Stap 11:.: licht:. (Foto weerstanden) - CIRC09
Wat We doen:
Terwijl krijgen input van een potentiometer nuttig voor menselijke gecontroleerde experimenten zijn kan, wat doen we gebruiken wanneer we een milieuvriendelijke gecontroleerde experiment willen? Gebruiken we precies dezelfde beginselen maar in plaats van een potentiometer (draai gebaseerd weerstand) gebruiken we een foto-weerstand (licht gebaseerde weerstand). De Arduino kan niet direct het gevoel van weerstand (het zintuigen spanning) zodat we een voltage divider ( http://tinyurl.com/2sunta ) opgezet. De exacte spanning aan de sensing pin is berekenbare, maar voor onze doeleinden (alleen relatief licht sensing) we kunnen experimenteren met de waarden en zie wat voor ons werkt. Een lage waarde wordt uitgevoerd wanneer de sensor goed verlicht is terwijl een hoge waarde plaatsvinden zal wanneer er in de duisternis.
(u kunt ook de fiche breadboard lay-out van de onderkant van deze stap)
De delen:
- CIRC-09 Breadboard blad
- 2 pin Header (x4)
- Foto-weerstand (x1)
- 5mm groene LED (x1)
- 10 k ohm weerstand (bruin-zwart-oranje) (x1)
- 560 ohm weerstand (groen-blauw-bruin) (x1)
- Draad
Het Circuit en alles inpluggen In:
Een kleine Video van alles wordt aangesloten
The Code: - http://tinyurl.com/crdum6''
/* * A simple programme that will change the * intensity of an LED based on the amount of * light incident on the photo resistor. * *///PhotoResistor Pinint lightPin = 0; //the analog pin the //photoresistor is //connected to //the photoresistor is not //calibrated to any units so //this is simply a raw sensor value (relative light)//LED Pinint ledPin = 9;//the pin the LED is connected to //we are controlling brightness so //we use one of the PWM (pulse //width modulation pins)void setup(){ pinMode(ledPin, OUTPUT); //sets the led pin to //output} /* * loop() - this function will start after setup * finishes and then repeat */void loop(){ int lightLevel = analogRead(lightPin); //Read the // lightlevel lightLevel = map(lightLevel, 0, 900, 0, 255); //adjust the value 0 to 900 to lightLevel = constrain(lightLevel, 0, 255); //make sure the value is betwween 0 and 255 analogWrite(ledPin, lightLevel); //write the value}
Niet werkt?
- LED is resterende donker - dit is een fout die we maken van tijd en tijd weer, blijven als alleen zij konden merk een LED dat beide manieren werkte. Het optrekken en geef het een draai.
- Het niet reageert op veranderingen in licht. -Gezien het feit dat de afstand tussen de draden op de foto-weerstand niet standad is, is het gemakkelijk te misplaatsen het. Dubbele controle zijn op de juiste plaats
- Nog steeds niet vrij werken? -U kan worden in een kamer die ofwel te helder of te donker is. Probeer de verlichting inschakelen of uitschakelen om te zien of dit helpt. Of hebt u een zaklamp in de buurt van door geven dat een poging.
Waardoor het beter:
Keren de reactie:
Misschien wil u graag de tegenovergestelde reactie. Geen zorgen, wij kunnen deze reactie enkel verandering gemakkelijk omkeren.
analogWrite(ledPin, lightLevel); ----> analogWrite(ledPin, 255 - lightLevel);
Upload en Bekijk het antwoord wijzigen.
Nachtlampje:
In plaats van controle van de helderheid van de LED in reactie op licht, kunt in plaats daarvan zet hem in- of uitschakelen op basis van een drempelwaarde. De code van de loop met wijzigen.
void loop(){ int threshold = 300; if(analogRead(lightPin) > threshold){ digitalWrite(ledPin, HIGH); }else{ digitalWrite(ledPin, LOW); }}
Lichte gecontroleerde servo:
Laten we gebruik maken van onze nieuw gevonden licht sensing vaardigheden te beheersen een servo (en op hetzelfde moment bezighouden met een beetje hacken van de code van de Arduino). Kabellengte tot een servo aangesloten op pin 9 (zoals in CIRC-04). Open vervolgens de knop voorbeeldprogramma (dezelfde we in CIRC-08 gebruikten) bestand > Sketchbook > voorbeelden > Bibliotheek-Servo > Schakelpook. De code uploaden naar je board en het horloge als het werkt ongewijzigd.
Met behulp van het volledige scala van uw servo:
U zult merken dat de servo alleen op een beperkt gedeelte van haar assortiment werken zal. Dit is omdat met de spanning verdelen circuit gebruiken we de spanning op analoge pin 0 niet van 0 tot 5 volt maar in plaats daarvan tussen twee kleinere waarden variëren zal (deze waarden verandert op basis van uw setup). Dit spel vast te stellen met de val = kaart (val, 0, 1023, 0, 179); lijn. Voor tips over wat te bezoek http://arduino.cc/en/Reference/Map .