Arduino Traffic Light for Beginners
25 Schritt:Schritt 1: Bereiten Sie Ihre Rot, Grün, Gelb und LEDs für Löten Schritt 2: Position und Löten Sie Ihre Lights! Schritt 3: Solder leuchtet Track Schritt 4: Solder Fotozelle Schritt 5: Montage leuchtet Track Schritt 6: Montage Fotozelle auf Piste Schritt 7: Befestigen Sie Ihren Traffic Light! Schritt 8: Schließen Sie die Drähte! Schritt 9: Einrichten des Arduino Umwelt Schritt 10: Grund Arduino Programmierung Schritt 11: Schalten Sie den LED grün Schritt 12: Variablen! Schritt 13: Machen Sie Ihre grüne LED Blink! (Teil 1/2) Schritt 14: Erstellen Sie Ihre grüne LED Blink! (Teil 2/2) Schritt 15: Blink die grüne und die gelbe LED Schritt 16: Blink alle LEDs! Schritt 17: Verwenden Sie Funktionen! Schritt 18: Fügen Sie im Code für Ihre blauen Straßenlaternen! Schritt 19: Sensoren! Teil 1: Lesen Eingangs Schritt 20: Sensoren! Teil 2: Anzeigen von Text Schritt 21: Sensoren! Teil 3: Verwenden der Eingangsinformationen (Wenn Erklärungen und Vergleiche) Schritt 22: Sensoren! Teil 4: Kalibrieren (While-Schleifen) Schritt 23: Sensoren! Teil 5: Sensoren + Leuchten Schritt 24: Sensoren! Teil 6: Erweiterung der Green Light Schritt 25: Der finale Code
* 2013.08.24 - Aktualisiert Ampel Template enthalten (siehe PDF unten)
Diese instructable führt Sie durch die Schritte zum Erstellen einer Einbahnverkehr Licht wandeln. Es wurde entwickelt, um im Tandem mit unserer Linie arbeiten folgende Auto für Anfänger. Durch die Kombination der beiden, werden Sie eine Linie, die Robot Nach einer Ampel gehorcht haben - wenn Sie es wollen:) Je nachdem, wie Sie Ihre Teile beziehen, schätzen wir dieses Projekt (ohne Auto) kostet etwa € 30 bis 50 €. Wir empfehlen Ihnen, ein paar Stunden von engagierten Zeit für die Fertigstellung haben.
Dieses Projekt wurde ursprünglich für ein Sommercamp an einem Hackerspace in Ann Arbor, MI konzipiert. Wenn Sie noch nicht vertraut mit dem, was ein Hackerspace / Maker ist sind, empfehlen wir Ihnen einen auschecken! Sie können eine wunderbare Ressource für beide Tools und Informationen sein. Dinge wie den Zugang zu einem Laserschneider kann machen dieses Projekt wesentlich besser aussehen mit minimalem Aufwand. Finden Sie in Ihrer Nähe!
Empfohlene Werkzeuge:
- Lötkolben
- Drahtschere
- Zange (Spitz Preferred)
- Drahtabisolierer (22 AWG)
- Allzweckmesser
- Kreuzschlitzschraubendreher (Nr 1)
- Bleistift
- Arduino UNO
- Brotschneidebrett
- 9-V-Batteriehalter mit 2,1 mm Barrel Steckverbinder
- Laser-Cutter
Empfohlene Materialien:
- Solder
- 9V Batterie
- Isolierband
- ~ 6 "Aus Schrumpfschlauch (3/32")
- 8 x Sticky Gummifüße
- Traffic Light Enclosure
- 3 x 220 Ohm Widerstände (Red Red Brown)
- 1 x 100 Ohm Widerstand (Brown Schwarz Braun)
- 1 x 10k Ohm Widerstand (braun schwarz orange)
- 1 x rote LED
- 1 x LED gelb
- 1 x LED grün
- 3 x blaue LEDs (jede mögliche Farbe tun wird, aber alle drei übereinstimmen sollte)
- 1 x NPN Transistor (PN2222)
- 1 x Lichtschranke
- 22 AWG Schaltdraht, vorzugsweise in den Farben Rot, Schwarz, Grün und Gelb.
Sehr empfehlenswert
- Saubere Arbeitsbereich
- Gute Beleuchtung
- Jemand genial, mit zu arbeiten
Short auf die Ressourcen?
- Finden Sie heraus, ob es eine lokale Hackerspace in der Nähe!
- Brauchen Sie es heute? Radioshack . Können Sie ein paar Tage warten? Adafruit und Sparkfun sind ausgezeichnete Ressourcen.
Wer hat das?
- Dieses instructable wurde von Khevna Shah und Josh Williams, und viel Hilfe von der zu Ihnen gebracht weltweit freundlichste Hackerspace: Alle Hände Aktiv
Schritt 1: Bereiten Sie Ihre Rot, Grün, Gelb und LEDs für Löten
-
Alle 8 Artikel anzeigen
Eine Notiz für dieses instructable:
Wir verwenden Fotos für die meisten der Anweisungen des physischer Setup. Für jeden Schritt:
- Erstens, einen Überblick über die Tools und Materialien benötigt.
- Zweitens, öffnen Sie das erste Bild.
- Drittens, bewegen Sie den Mauszeiger über das Kommentarfeld für eine kurze Beschreibung.
- Klicken Sie auf den Pfeil auf der rechten Seite des Bildes, um zum nächsten Bild zu wechseln.
- Wenn keine Pfeile zeigen auf, das Bild zu schließen und gehen Sie zum nächsten Schritt.
Benötigtes Werkzeug:
- Hands
- Drahtabisolierer
Benötigte Materialien:
- 1 x rote LED
- 1 x LED grün
- 1 x LED gelb
- 1 x Schwarz Draht (22 AWG Solid Core, ~ 21 cm in der Länge
Schritt 2: Position und Löten Sie Ihre Lights!
-
Alle 7 Artikel anzeigen
Benötigtes Werkzeug:
- Hands
- Drahtabisolierer
- Drahtschere
- Lötkolben
Benötigte Materialien:
- Ungelötet Traffic Light
- 1 x Red Draht (22 AWG, ~ 21 cm in der Länge)
- 1 x grüne Kabel (22 AWG, ~ 21 cm in der Länge)
- 1 x Gelb Draht (22 AWG, ~ 21 cm in der Länge)
- 1 x Traffic Light Housing (zwei Teile)
Schritt 3: Solder leuchtet Track
-
** Machen Sie diese GIF TRENNEN PLZ KTHXBYE
Benötigtes Werkzeug:
- Hands
- Drahtabisolierer
- Drahtschere oder Scheren
- Lötkolben
- Heat Gun
Benötigte Materialien:
- Solder
- 1 x Schwarz Draht (22 AWG, ~ 41 cm in der Länge)
- 1 x Red Draht (22 AWG, ~ 41 cm in der Länge)
- 3 x blaue LEDs
- 2 x Schrumpfschlauch (2 cm in der Länge, 2,3 mm (3/32 ") Durchmesser)
FYI: Das zweite Bild in das ist eine absolut erstaunliche Schritt GIF-Animation. Bitte hängen eng, kann es einen Moment dauern.
Schritt 4: Solder Fotozelle
-
* Geben GRÖSSEN
* Wie lange BRO schrumpfen?
Benötigtes Werkzeug:
- Hands
- Drahtabisolierer
- Drahtschere oder Scheren
- Lötkolben
- Heat Gun
Benötigte Materialien:
- Solder
- 1 x Schwarz Draht (22 AWG, ~ 25 cm in der Länge)
- 1 x Red Draht (22 AWG, ~ 25 cm in der Länge)
- 1 x Lichtschranke
- 2 x Schrumpfschlauch (4 cm in der Länge, 2,3 mm (3/32 ") Durchmesser)
Es gibt keine GIF-Animation hier. Vielleicht ist der nächste Schritt wird!
Schritt 5: Montage leuchtet Track
Schritt 6: Montage Fotozelle auf Piste
Schritt 7: Befestigen Sie Ihren Traffic Light!
-
Alle 13 Artikel anzeigen
Benötigtes Werkzeug:
- Hands
- Allzweckmesser
- Bleistift
Benötigte Materialien:
- Pre-gelötet Traffic Light-Setup
- Traffic Light Plates (Wenn Sie in der AHA Summer Camp teilnehmenden bist, sind diese bereits in Ihrem Kit!)
- - Wenn Sie nicht in Sommerlager sind. Sie können diese Dateien mit einem Laserschneider verwenden.
- - Oder drucken Sie sie auf Ihren Drucker und verwenden Sie es als Leitfaden für die aus Pappe geschnitten!
- - Oder entwerfen Sie Ihre eigenen!
Schritt 8: Schließen Sie die Drähte!
-
Alle 10 Artikel anzeigen
Benötigtes Werkzeug:
- Hands
- Arduino Uno
- Brotschneidebrett
- Drahtabisolierer
- Drahtschere
- Zangen
Benötigte Materialien:
- Assembled Traffic Light
- Assembled Schranke / Sensor
- Assembled 3 x LED-Setup
- Roter Draht
- Black Wire
- Green Draht
- Gelbe Draht
- Blau Draht
- 4 x 220 Ohm Widerstände (Red Red Brown)
- 1 x 10k Ohm Widerstand (braun schwarz orange)
- 1 x 100 Ohm Widerstand (Brown Schwarz Braun)
- 1 x NPN Transistor
Schritt 9: Einrichten des Arduino Umwelt
-
Diese instructable macht viele Annahmen! Einige Leute mögen diese "Voraussetzungen" nennen. Um sicherzustellen, dass Sie das Beste aus dieser instructable zu bekommen, sollten Sie:
- Die Arduino Software heruntergeladen und auf Ihrem Computer installiert.
- Angeschlossen und getestet Ihren Arduino, indem Sie das Installationshandbuch geeignete für Ihren Computer.
- Etwa eine Stunde Zeit zu ersparen und ein schönes, sauberes Arbeitsbereich mit viel Licht.
Mission zu erfüllen? Fahren Sie weiter auf!
Hinweis:
Gehen Sie zu dieser Seite für Tutorials: http://arduino.cc/en/Tutorial/HomePage
Gehen Sie auf dieser Seite nach Referenzen: http://arduino.cc/en/Reference/HomePage
Bildquelle: Das Erste Schritte w / Arduino-Führer
Schritt 10: Grund Arduino Programmierung
-
Sie werden Ihren Code in zwei grundlegende Bereiche schreiben: den Abschnitt "Setup" und im Abschnitt "Loop". Diese Abschnitte werden als Funktionen bekannt. Wir werden erfahren Sie mehr über das, was eine Funktion ist später!
Die Setup- Funktion wird einmal, wenn der Arduino eingeschaltet oder zurückgesetzt wird.
Die Loop- Funktion läuft, nach der Setup-Funktion wird einmal.
Hier ist eine grundlegende Arduino Programm. Dieses Programm tut nichts interessanter noch, aber das kommt als nächstes!
void setup ()
{
// code in here runs once
}
void loop ()
{
// after the setup function, code in here runs over and over
}
Schritt 11: Schalten Sie den LED grün
-
Für die Sie auf Ihrem LED schalten, müssen zwei Dinge passieren.
Zuerst müssen Sie die Arduino, die Sie sagen,OUTPUT
Daten auf dem Stift Sie eingesteckt in die grüne LED.
Sie können dies tun, indem Sie diepinMode
Funktion.
Ein Beispiel hierfür ist:pinMode (3, OUTPUT );
wo meine PIN-Nummer ist3
.
Zweitens, müssen Sie eine NachrichtHIGH
Signal an die LED, um ihn einzuschalten! (A "LOW" Signals schaltet die LED aus.)
Sie können dies tun, indem Sie diedigitalWrite
Funktion.
Ein Beispiel hierfür ist:digitalWrite (3, HIGH );
wo meine PIN-Nummer ist3
.
Versuchen Sie nun, das Einschalten des LED grün! Es sollte auf PIN 2. Hier ist ein Code sein, um Ihnen den Einstieg erleichtern:
void setup ()
{
// set the pinMode to OUTPUT
// your code here
}
void loop ()
{
// digitalWrite the pin to HIGH
// your code here
}
Schritt 12: Variablen!
-
Im vorherigen Schritt, schrieben wir die folgende Codezeile:pinMode (2, OUTPUT );
unddigitalWrite (2, HIGH );
Was ist, wenn ich wollte, sich zu bewegen meine grüne LED an PIN 4? Dies würde bedeuten, wechselnden Zahlen an zwei verschiedenen Orten! Yuck!
Stattdessen sagen wir den Computer, die das Wort GREEN bedeutet 2, und verwenden Sie dann das Wort GREEN überall! So, wenn ich zog meine grüne LED an Pin 4, Ich möchte nur sagen, der Computer, auf dem Grün bedeutet, jetzt 4!
Um dies zu tun, die wir verwenden: Variables!
Variablen können Sie die Namen, die Dinge zu geben. Es gibt viele verschiedene Arten von Variablen.
Heute werden wir über eine Reihe Variable ein int (kurz für integer) zu lernen. Ein int kann jede ganze Zahl von -32.768 bis 32.767 sein. Mehr Details hier: http://arduino.cc/en/Reference/Int
Variablen haben 3 Eigenschaften: Typ, Name und Wert.
Zum Beispiel:int GREEN = 2;
hat eine Art vonint
, einen Namen vonGREEN
, und einen Wert von2
.
Eine Variable wird anstelle eines Werts verwendet.
Überall, wo Sie einen verwenden möchten2
können Sie jetzt schreibenGREEN
* Denken Sie daran: Sie haben, um eine Variable zu machen, bevor Sie sie verwenden können!
Versuchen Sie nun Einschalten die grüne LED mit der Variable "grün". Es sollte auf PIN 2. Hier ist ein Code sein, um Ihnen den Einstieg erleichtern:
// make your variable
// your code here
void setup ()
{
// set the pinMode to OUTPUT using GREEN
// your code here
}
void loop ()
{
// digitalWrite the pin to HIGH using GREEN
// your code here
}
* Variablen existieren in verschiedenen Bereichen wie Zielfernrohre bekannt. Ein Bereich ist der Bereich zwischen einer Start geschweifte Klammer {und ihre passenden Angebotsende geschweifte Klammer}. In unserem Fall werden wir die Variablen alle am Anfang des Codes zu erklären. Diese Variablen werden als globale Variablen bezeichnet. Eine globale Variable kann irgendwo in dem Dokument verwendet werden.
Schritt 13: Machen Sie Ihre grüne LED Blink! (Teil 1/2)
-
Um die LED Blink zu machen, müssen wir nutzendigitalWrite
zu schreibenHIGH
und dannLOW
aufGREEN
.
Was passiert, wenn Sie dies versuchen:
Funktioniert es? Nein? Fahren Sie mit Teil 2!
// variables
int GREEN = 3;
void setup ()
{
// setup LED modes
pinMode (GREEN, OUTPUT );
}
void loop ()
{
// High turns things on
digitalWrite (GREEN, HIGH );
// low turns things off
digitalWrite (GREEN, LOW );
}
Schritt 14: Erstellen Sie Ihre grüne LED Blink! (Teil 2/2)
-
Der Code führt schneller als das Auge bemerken können!
Um dieses Problem zu lösen, werden wir ein Indelay
zwischen der Lichtwesen auf und das Licht ist weg!
Mehr Details hier: http://arduino.cc/en/Reference/Delay
Sie können dies tun, indem Sie diedelay
Funktion.
Ein Beispiel hierfür ist:delay (100);
wo meine Verzögerung100
Millisekunden.
Verwenden Sie die VariableDELAY_GREEN
einen 1 Sekunde, 1000 Millisekunde Verzögerung zwischen dem Lichtwesen ein und aus zu erstellen:
// variables
int GREEN = 3;
int DELAY_GREEN = 1000;
void setup ()
{
// setup LED modes
pinMode (GREEN, OUTPUT );
}
void loop ()
{
// High turns things on
digitalWrite (GREEN, HIGH );
// we need a delay here!
// your code here
// low turns things off
digitalWrite (GREEN, LOW );
// what happens next?
}
Schritt 15: Blink die grüne und die gelbe LED
-
Jetzt sollten Sie eine Variable erstellen für die gelbe LED genanntYELLOW
und setzen Sie ihn auf 7 und eine weitere Variable namensDELAY_YELLOW
und setzen Sie ihn auf 500 Millisekunden betragen.
Es so einrichten, dass Ihre grüne LED bleibt für 1000 Millisekunden und Ihre gelbe LED bleibt für 500 Millisekunden.
Beginnen Sie mit diesem Code:
// variables for green light
int GREEN = 2;
int DELAY_GREEN = 1000;
// variables for yellow light
// your code here
void setup ()
{
// setup LED modes
pinMode (GREEN, OUTPUT );
}
void loop ()
{
// High turns things on
digitalWrite (GREEN, HIGH );
delay (DELAY_GREEN);
// low turns things off
digitalWrite (GREEN, LOW );
delay (DELAY_GREEN);
}
Tipps für die Fehlersuche:
* Haben Sie alle Ihre Variablen zu erstellen?
* Haben Sie alle Ihre Stifte auf Ausgang eingestellt?
* Haben Sie daran gedacht, schalten Sie eine LED und schalten Sie die anderen?
* Wussten Sie legen Sie Ihre Verzögerungen, so dass nach dem Einschalten der LED schalten, variable Verzögerung die gleiche Farbe verwenden Sie?
Schritt 16: Blink alle LEDs!
Schritt 17: Verwenden Sie Funktionen!
-
Im vorherigen Schritt, schrieben wir die folgenden Zeilen Code, um nur auf dem grünen Licht einzuschalten:
digitalWrite (GREEN, HIGH );
digitalWrite (YELLOW, LOW );
digitalWrite (RED, LOW );
Und dann hatte man sie für das gelbe Licht für das rote Licht zu wiederholen und dann wieder.
Um zu vermeiden, dass zu tun, verwenden wir eine Funktion. Funktionen können auch mit uns, um unseren Code leichter zu lesen.
Funktionen können Sie Gruppe Anweisungen. Funktionen haben 3 Hauptteilen. Input, Anweisungen und Ausgang!
Heute werden wir den Schwerpunkt auf die nur die Gruppierung von Anweisungen!
Funktionen sind ebenso wie Variablen. Sobald Ihr sie erstellen, können Sie die Sätze von Anweisungen, die Sie in den Rest Ihres Programms in der Funktion gesetzt zu ersetzen.
Drehen Sie diese Reihe von Anweisungen:
void loop()
{
digitalWrite (GREEN, HIGH );
digitalWrite (YELLOW, LOW );
digitalWrite (RED, LOW );
}
In diese:
void loop()
{
green_light();
}
void green_light()
{
digitalWrite (GREEN, HIGH );
digitalWrite (YELLOW, LOW );
digitalWrite (RED, LOW );
}
Eine Funktion wird anstelle der Verwendung.
Überall, wo Sie auf ein grünes Licht machen wollen, können Sie jetzt schreibengreen_light();
.
Versuchen Abschluss den folgenden Code:
// variables
int GREEN = 2;
int YELLOW = 7;
int RED = 12;
int DELAY_GREEN = 5000;
int DELAY_YELLOW = 2000;
int DELAY_RED = 5000;
void setup ()
{
// setup LED modes
pinMode (GREEN, OUTPUT );
pinMode (YELLOW, OUTPUT );
pinMode (RED, OUTPUT );
}
void loop ()
{
green_light();
delay (DELAY_GREEN);
// code to make a yellow light
delay (DELAY_YELLOW);
//code to make a red light
delay (DELAY_RED);
}
void all_LEDs_off()
{
digitalWrite (GREEN, LOW );
digitalWrite (YELLOW, LOW );
digitalWrite (RED, LOW );
}
void green_light()
{
all_LEDs_off();
digitalWrite (GREEN, HIGH );
}
void yellow_light()
{
// your code here
}
void red_light()
{
// your code here
}
//
Schritt 18: Fügen Sie im Code für Ihre blauen Straßenlaternen!
-
Kannst du es so eingerichtet, dass Ihr Blue LEDs leuchten, wenn Ihr Red LEDs einschalten?
Rufen Sie Ihr Straßenlaterne PIN variableSTREET_LIGHTS
.
* Denken Sie daran, Variablen für Ihre Stifte zu verwenden und setzen Sie sie auf Ausgabemodus!
* Denken Sie daran, in die LEDs schalten Sieall_LEDS_off
Funktion!
Schritt 19: Sensoren! Teil 1: Lesen Eingangs
-
Das letzte, was wir wollen, dass unsere Ampel zu tun ist, um zu erfassen, wenn Autos kommen durch!
Sie können die Eingabewerte aus den analogen Pins zu lesen!
Früher haben wir darüber gesprochen, wie Funktionen haben 3 Hauptteilen. Input, Anweisungen und Ausgang!
Sie können dies tun, indem Sie dieanalogRead
Funktion.
Ein Beispiel hierfür ist:analogRead (A0);
wo meine analoge Pin-Nummer istA0
.
DieanalogRead
Funktion zurückkehrt (Ausgänge) ein int (integer) zwischen 0 und 1023.
Mehr Details hier: http://arduino.cc/en/Reference/AnalogRead
Hier ist ein Beispiel Stück Code, den Wert, der durch die zurück speichertanalogRead
Funktion in einer Variablen:
Aber was nun?
int SENSOR_PIN = A0;
int sensor_value = 0;
void setup ()
{
}
void loop ()
{
sensor_value = analogRead (SENSOR_PIN);
}
Schritt 20: Sensoren! Teil 2: Anzeigen von Text
-
So haben wir einen Sensor liest Eingangs, aber was nun?
Lassen Sie uns versuchen zu sehen, welche Informationen wir lesen! Dies erfolgt in zwei Schritten.
Zuerst müssen Sie die Arduino, mit dem Sie einige Informationen sehen wollen, zu informieren.
Mehr Details hier: http://arduino.cc/en/Serial/Begin
Sie können dies tun, indem Sie dieSerial .begin
Funktion.
Ein Beispiel hierfür ist:Serial .begin (9600);
wo9600
ist die Rate, mit der wir die Informationen angezeigt werden sollen.
Als nächstes müssen Sie darauf hin, dass Informationen auf Ihrem Computer drucken möchten!
Mehr Details hier: http://arduino.cc/en/Serial/Print
Sie können dies tun, indem Sie dieSerial .println
Funktion.
Ein Beispiel hierfür ist:Serial .println (sensor_Value);
in dem die Informationen, die ich sehen wollen, istsensorValue
.
Dies ist ein großes Werkzeug für die Fehlersuche!
Mal sehen, wie es funktioniert.
Zunächst laden Sie diesen Code auf Ihre Arduino:
Drücken Sie nun die kleine Lupe rechts oben auf Ihrer Arduino-Umgebung (wie in der Abbildung dargestellt!).
int SENSOR_PIN = A0;
int sensor_value = 0;
void setup ()
{
Serial . begin (9600);
}
void loop ()
{
sensor_value = analogRead (SENSOR_PIN);
}
Versuchen Sie dabei deine Fotozelle mit der Hand oder zeigt eine Taschenlampe auf sie! Sie sollten Werte zwischen 0 und 1023 zu sehen! Ordentlich huh?
Schritt 21: Sensoren! Teil 3: Verwenden der Eingangsinformationen (Wenn Erklärungen und Vergleiche)
-
Bisher wissen wir, dass der Sensor sieht, zwischen 0 und 1023. Also sagen wir mal die Mitte ist 511.
int sensor_mid = 511;
Jetzt werden wir, um diesen Wert zu verwenden, um ein-und ausschalten Lichter einschalten, wenn die Lichtschranke sieht mehr oder weniger Licht als der Mittelwert.
Es gibt zwei wirklich wichtigen Dinge, die Ihnen helfen!Sie können dies, indem Sie die zu tun
Werfen wir einen zweiten, um über das, was passiert, denken, wenn Sie eine verwendenif
Rechnung und Vergleiche<
und>
.
Ein Beispiel hierfür ist:if (sensor_value < sensor_mid)
, wo ich vergleichensensor_value
undsensor_mid
.if
Aussage. Einif
Anweisung können Sie zwei verschiedene Dinge, je nachdem ob der Vergleich tuntrue
oderfalse
.
Ein Beispiel hierfür ist:
if (sensor_value < sensor_mid)
{
// do something
} else {
// do something else
}
Versuchen Sie, auf das grüne Licht, wenn der Sensor-Wert größer als der Mitte ist und Drehen auf dem roten Licht, wenn der Sensor-Wert kleiner als der Mitte ist!int SENSOR_PIN = A0;
int sensor_mid = 511;
int GREEN = 2;
int YELLOW = 7;
int RED = 12;
int STREET_LIGHTS = 13;
void setup ()
{
pinMode (GREEN, OUTPUT );
pinMode (YELLOW, OUTPUT );
pinMode (RED, OUTPUT );
pinMode (STREET_LIGHTS, OUTPUT );
Serial . begin (9600);
}
void loop ()
{
int sensor_value = analogRead (SENSOR_PIN);
Serial . println (sensor_value);
if (sensor_value < sensor_mid)
{
// your code here
}
//your code here
}
void all_LEDs_off()
{
digitalWrite (GREEN, LOW );
digitalWrite (YELLOW, LOW );
digitalWrite (RED, LOW );
}
void green_light()
{
all_LEDs_off();
digitalWrite (GREEN, HIGH );
}
void yellow_light()
{
all_LEDs_off();
digitalWrite (YELLOW, HIGH );
}
void red_light()
{
all_LEDs_off();
digitalWrite (RED, HIGH );
digitalWrite (STREET_LIGHTS, HIGH );
}
Schritt 22: Sensoren! Teil 4: Kalibrieren (While-Schleifen)
-
In verschiedenen Lichtverhältnissen wird die Fotozelle sehen einen anderen Wertebereich. Versuchen Sie es mit den gleichen Code aber an einem dunklen Ort. Versuchen Sie nun mit dem gleichen Code aber in einer sehr hellen Ort. Sie werden sehen, dass der Sensor immer ausgeschaltet an einem dunklen Ort, und dass der Code funktioniert wirklich gut in helles Licht.
Um dieses Problem zu lösen, wir etwas Kalibrieren genannt zu tun! Wenn wir kalibrieren die Fotozelle, suchen wir nach dem höchsten Wert sie sieht und niedrigsten Wert sie sieht und dann die Mitte zwischen diesen beiden Werte gesetzt. Wir werden den Wert für ca. 5 Sekunden kalibrieren.
Um dies zu tun, werden wir werden mit einer Reihe von verschiedenen Tricks!
Erstens werden wir an der Zeit zu lernen. Das Arduino verfolgt, wie lange es schon seit dem Arduino eingeschaltet worden ist. Wir können, was dieser Wert zu suchen.
Was ist ein
Sie können dies tun, indem Sie diemillis
Funktion.
Ein Beispiel hierfür ist:unsigned long current_time = millis ();
wo ich speichern den Wert der Zeit in der Variablencurrent_time
.unsigned long
? Einelong
ist wie eine ganze Zahl, aber größer! Eine lange geht von -2147483648 bis 2147483647. Das Wortunsigned
bedeutet, dass anstatt von -2147483648 bis 2147483647, es geht von 0 bis 4294967295. Da die Zeit nie negativ, verwenden wir einenunsigned
-Nummer für sie!
Mehr Details hier: http://arduino.cc/en/Reference/Long
und hier: http://arduino.cc/en/Reference/UnsignedLong
Weiter werden wir etwas verwenden, genanntwhile
Schleife! Awhile
Schleife ist wie einif
Aussage, während die Bedingung vorgesehen isttrue
, führt sie aus. Der Unterschied zwischen einemif
Rechnung und einerwhile
Aussage ist, dass diewhile
der Ausführung auf Anweisung hält, bis die Bedingungfalse
- wie, wie dieloop
Funktion läuft bis zum Ausschalten des Arduino. Stellen Sie sicher, end_time ist auch eine unsigned long.
Ein Beispiel hierfür ist:
while (current_time < end_time)
{
// do something
// now update the current time
current_time = millis ();
}
Der Code, den Sie in der "etwas tun" Bereich gesetzt werden weitermachen, bis die Zeit geht vorbei end_time
Danach, was wir tun müssen, ist für die höchsten und niedrigsten Werte, die der Fotozelle sieht und diese Werte zu speichern.
Sie können diese durch erste Start des hohen Wert an tun0
und den niedrigen Wert in1023
.
sensor_low = 1023;
sensor_high = 0;
Als nächstes wird jedes Mal, wenn wir durch die while-Schleife zu gehen, werden wir schauen, ob der Sensorwert kleiner als der niedrigste Wert, den er gesehen hat ist, wenn ja, denn das neue Wert niedriger ist, werden wir den niedrigen Wert zu setzen, dass statt .
Ein Beispiel hierfür ist:
if (sensor_value < sensor_low)
{
sensor_low = sensor_value
}
Ähnlich ist es mit dem hohen Wert, wenn der Sensor sieht einen höheren Wert, werden wir es auf den höheren Wert gesetzt!
Ein Beispiel hierfür ist:
if (sensor_value > sensor_high)
{
sensor_high = sensor_value
}
Nach Ablauf der 5 Sekunden der Kalibrierung, werden wir weitermachen und auf den Durchschnitt der niedrigen und hohen Werten gesetzt sensor_mid.
Jetzt versuchen Sie es selbst:int SENSOR_PIN=A0;
int sensor_mid = 511;
int GREEN = 2;
int YELLOW = 7;
int RED = 12;
int STREET_LIGHTS = 13;
void setup ()
{
pinMode (GREEN, OUTPUT );
pinMode (YELLOW, OUTPUT );
pinMode (RED, OUTPUT );
pinMode (STREET_LIGHTS, OUTPUT );
calibrate();
}
void loop ()
{
int sensor_value = analogRead (SENSOR_PIN);
Serial . println (sensor_value);
if (sensor_value < sensor_mid)
{
green_light();
}
else
{
red_light();
}
}
void calibrate()
{
int sensor_high = 0;
int sensor_low = 1023;
int current_time = millis ();
int end_time = current_time + 5000;
// we have to calibrate this in the first five seconds
while (current_time < end_time)
{
// now update the current time
current_time = millis ();
// update sensor value here!
// your code here
// record the minimum sensor value
if (sensor_value < sensor_low)
{
//your code here
}
// record the maximum sensor value
if //your code here
{
sensor_high = sensor_value;
}
}
//set mid to be the MIDDLE! :)
sensor_mid = (sensor_high + sensor_low)/2;
}
void all_LEDs_off()
{
digitalWrite (GREEN, LOW );
digitalWrite (YELLOW, LOW );
digitalWrite (RED, LOW );
digitalWrite (STREET_LIGHTS, LOW );
}
void green_light()
{
all_LEDs_off();
digitalWrite (GREEN, HIGH );
}
void yellow_light()
{
all_LEDs_off();
digitalWrite (YELLOW, HIGH );
}
void red_light()
{
all_LEDs_off();
digitalWrite (RED, HIGH );
digitalWrite (STREET_LIGHTS, HIGH );
}
Schritt 23: Sensoren! Teil 5: Sensoren + Leuchten
-
So, jetzt werden wir versuchen, so dass die Sensor Arbeit mit unseren Ampel!
Lassen Sie uns zunächst erhalten die Lichter gehen von grün über gelb nach rot!
Fügen Sie Ihr DELAY-Variablen wieder an die Spitze!
// variables for green light
int DELAY_GREEN = 1000;
int DELAY_YELLOW = 500;
int DELAY_RED = 1000;
Change your loop function from the previous step to:
void loop ()
{
green_light();
delay (DELAY_GREEN);
yellow_light();
delay (DELAY_YELLOW);
red_light();
delay (DELAY_RED);
}
Schritt 24: Sensoren! Teil 6: Erweiterung der Green Light
-
Grünes Licht werden wir brauchen, um zwei Dinge tun zu verlängern.
Zuerst müssen wir für das Auto zu suchen. Dies geschieht, wenn die Lichtschranke sieht weniger alssensor_mid
.
Dann, wenn die Lichtschranke sieht das Auto, wir sollten das grüne Licht zu verlängern.
Um dies zu tun, wir werden einen neuen Variablentyp müssen:boolean
. Einboolean
kann entwedertrue
oderfalse
wie einint
hat eine Reichweite von -32.768 bis 32.767.
Mehr Details hier: http://arduino.cc/en/Reference/BooleanVariables
Ein Beispiel hierfür ist:boolean i_love_kittens = true ;
in dem die variablei_love_kittens
eingestellt isttrue
.
Denken Sie daran, wie wir über Funktionen, die drei Teile gesprochen? Input, Anweisungen und Output? Lassen Sie uns über Ausgänge zu sprechen!
Das Setup und die Loop-Funktion haben Ausgänge zu. Sie sind nichtig. Void ist Computersprache für nichts. Unsere Funktion ausgeben wird ein boolean.
In der Funktion, werden wir die return_value auf true gesetzt, wenn das Auto Sensor sieht das Auto.
Zuerst müssen Sie die Arduino sagen, dass Sie Ihre Funktion zur Ausgabe eines boolean möchten.
Dann müssen Sie tatsächlich zurück (Ausgang) einen booleschen Wert.
Ein Beispiel hierfür ist:
boolean my_awesome_function()
{
boolean i_love_kittens = true ;
return i_love_kittens;
}
Versuchen Sie diese Funktion, um Ihren Code ein:boolean look_for_car()
{
int current_time = millis ();
int end_time = current_time + 2000; // we'll look for about two seconds
boolean saw_car = false ;
while (current_time < end_time)
{
sensor_value = analogRead (SENSOR_PIN);
if (sensor_value < sensor_mid)
{
// set the value of saw_car to true
// your code here
}
// update the current time
// your code here
}
return saw_car;
}
Wenn das Auto sieht, denken Sie daran, eine zweite Verzögerungs hinzuzufügen, wenn nicht, zögern Sie nicht!
Schnell Beispiel:
boolean saw_car = look_for_car();