Schritt 11:.: Licht:. (Foto Widerstände) - CIRC09
Was wir machen:
Während immer input von einem Potentiometer für kontrollierte Experimente an Menschen nützlich sein kann, nutzen was wir, wenn wir wollen, dass ein ökologisch kontrolliertes Experiment? Wir verwenden genau die gleichen Prinzipien aber statt ein Potentiometer (Twist basierte Widerstand) verwenden wir einen Foto-Widerstand (Licht basierend Widerstand). Arduino kann nicht direkt spüren Widerstand (es erkennt Spannung), damit wir einen Spannungsteiler ( http://tinyurl.com/2sunta ) einrichten. Die genaue Spannung am Sensor Pin ist berechenbar, aber für unsere Zwecke (nur sensing relative Licht) können wir mit den Werten experimentieren und sehen, was für uns funktioniert. Bei einem niedriger Wert wird auftreten, wenn der Sensor gut beleuchtet ist, während ein hoher Wert auftreten wird, wenn es dunkel wird.
(Sie können auch das Steckbrett-Layout-Blatt von der Unterseite von diesem Schritt)
Die Teile:
- CIRC-09 Steckbrett Blatt
- 2-Pin Header (x4)
- Foto-Widerstand (x1)
- LED 5mm grün (x1)
- 10 k Ohm Widerstand (braun-schwarz-Orange) (x1)
- 560 Ohm Widerstand (grün-blau-braun) (x1)
- Draht
Die Schaltung und alles einstecken:
Ein kleines Video von alles eingesteckt wird
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}
Es funktioniert nicht?
- LED ist noch dunkel - Dies ist ein Fehler, die wir weiterhin immer und immer wieder, wenn nur sie eine LED machen könnte, die beide Richtungen gearbeitet. Nach oben ziehen und es eine Wendung zu geben.
- Es zu Veränderungen des Lichts reagiert nicht. -Angesichts der Tatsache, dass der Abstand der Drähte auf die Foto-Widerstand nicht aus ist, ist es einfach, es zu verlegen. Überprüfen Sie die an der richtigen Stelle
- Noch nicht ganz funktioniert? -Sie können in einem Raum, die entweder zu hell oder zu dunkel ist. Versuchen Sie, die Lichter zu aktivieren oder deaktivieren Sie, um festzustellen, ob das hilft. Oder haben Sie eine Taschenlampe in der Nähe von probieren.
Besser machen:
Umkehren die Antwort:
Vielleicht möchten Sie die gegenteilige Reaktion. Keine Sorge, wir können diese Antwort nur Änderung leicht umkehren.
analogWrite(ledPin, lightLevel); ----> analogWrite(ledPin, 255 - lightLevel);
Hochladen Sie und beobachten Sie die Antwort zu ändern.
Nachtlicht:
Statt steuern die Helligkeit der LED in Reaktion auf Licht, können stattdessen es aktiviert oder deaktiviert auf einen Schwellenwert rundenbasiert. Ändern Sie den loop() Code mit.
void loop(){ int threshold = 300; if(analogRead(lightPin) > threshold){ digitalWrite(ledPin, HIGH); }else{ digitalWrite(ledPin, LOW); }}
Licht Steuern Servo:
Können unsere neugefundene Licht sensing Fähigkeiten verwenden, um ein Servo zu steuern (und gleichzeitig zu engagieren, in ein wenig von Arduino Code hacking). Verkabeln Sie ein Servo an Pin 9 (wie in CIRC-04) angeschlossen. Öffnen Sie dann die Knopf-Beispielprogramm (das gleiche wir in CIRC-08 verwendet) Datei > Skizzenbuch > Beispiele > Bibliothek-Servo > Knopf. Laden Sie den Code auf dein Board und sehen Sie zu, wie es unveränderte funktioniert.
Verwenden das gesamte Spektrum der Ihr Servo:
Sie werden feststellen, dass das Servo nur über einen begrenzten Teil ihres Verbreitungsgebietes betreiben wird. Und zwar deshalb, weil mit der Spannung dividiert Schaltung verwenden wir die Spannung am analogen Pin 0 nicht zwischen 0 und 5 Volt sondern zwischen zwei kleinere Werte liegen wird (diese Werte ändern je nach Ihrem Setup). Um dieses Spiel zu beheben mit dem Val = Karte (Val, 0, 1023, 0, 179); Linie. Für Hinweise, was Sie http://arduino.cc/en/Reference/Map besuchen.