Innehållsförteckning:
Video: Smart interaktivt trafikljus: 5 steg (med bilder)
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Redo att bygga världens bästa och mest interaktiva trafikljus? Bra! I denna handledning förklarar vi hur du kan bygga en själv med Arduino.
Nödvändiga komponenter:- Arduino (..duh)- LM317 Mosfet- 2x 60cm analoga RGB LED-remsor (12V)- PVC-rör (1m x 125mm)- Kablar (röda och svarta)- Metallplattor för ljuskåpor- Akryl för ljuset -ikoner (kolla flaticon.com för.svg-ikoner)- Spraycan svart och vit färg.- Eltejp- Alla nödvändiga lödningskomponenter- Display med erforderlig skärm (används inte i självstudien)
Steg 1: Steg 1: Gör Light-caps
Designen är verkligen upp till dig. Vi har gjort en 15x15cm keps för att hålla lamporna. Vi har klippt metallplattorna till rätt storlek och använt en metallböjare (nej, inte från Avatar) för att böja locken i rätt former. Bakplattorna gjordes av en annan komponent.
Steg 2: Steg 2: Förbered PVC -polen
Skär 2 hål i PVC-stolpen för att passa ljuskåporna. Använd sedan en svart färgspray för att måla allt svart. Om du vill kan du lägga till vita ränder på botten av stolpen (vanligt i Nederländerna).
Steg 3: Steg 3: Montering av RGB LED -remsor och sandblästring av akrylplattorna
Därefter måste du montera RGB LED-remsorna inuti ljuskåpan. Montera dem tätt runt locket och placera dem så nära framsidan som möjligt.
Därefter måste du sandblästra den valda symbolen på akrylplattan. Ta lite tejp och täck hela akrylplattan. Klipp sedan ut den form/figur du vill ha. Efter detta kan du sandblästra plattan för att få en frostat glasliknande effekt.
Steg 4: Steg 4: Anslut RGB LED -remsorna till Arduino
Nu kommer den knepiga delen: att ansluta RGB LED -remsorna till Arduino. När du ansluter stiften, se till att du sätter 12v på 12v på din remsa. Mellan varje färg, så röd eller grön, måste du lägga en mosfet. Anslut data från ledremsan till mitten av stiftet på mosfeten och vänster stift till din Arduino. Den högra stiftet måste gå tillbaka till marken på Arduino.
Steg 5: Steg 5: Skriv Arduino -koden
Denna Arduino -kod styrs av bluetooth, eftersom vi inte använde en intern skärm. Så koden styrs via bluetooth -meddelanden i loop () -funktionen.
#define r 6 #definiera g 11 #inkludera
SoftwareSerial mySerial (10, 11); // RX, TX
#define angryLängd 4
#define fallsLength 3 #define happyLength 4 #define onPhoneLength 13 #define talkingLength 5 #define walkingLength 4 #define walkingOutLength 4 #define wavingLength 6
bool -knapp Tryckt;
int currentMillis; int tidigareMillis;
int animation1Delay;
int animation2Delay; int animation3Delay; int animation4Delay;
bool animation1Done = false;
bool animation2Done = false; bool animation3Done = false; bool animation4Done = false; bool animation5Done = false;
bool blockLight = false;
bool lightRed = true;
int currentAnimationDelay;
void setup () {
// lägg din installationskod här för att köra en gång: pinMode (r, OUTPUT); pinMode (g, OUTPUT);
Serial.begin (9600);
mySerial.begin (38400); Serial.setTimeout (25); buttonPressed = false; currentMillis = 0; föregående Millis = 0;
animation1Delay = walkingLength * 1000;
animation2Delay = wavingLength * 1000; animation3Delay = happyLength * 1000; animation4Delay = walkingOutLength * 1000;
// currentAnimationDelay = animation1Delay * 1000;
lightRed = true; }
void loop () {
// fördröjning (20);
// lägg din huvudkod här för att köra upprepade gånger: osignerad lång strömMillis = millis (); if (buttonPressed == true) {if (animation1Done == false) {if (currentMillis - previousMillis> animation1Delay) {Serial.println ("0"); previousMillis = currentMillis; animation1Done = true; }} annars if (animation2Done == false och animation1Done == true) {if (currentMillis - previousMillis> animation2Delay) {Serial.println ("1"); previousMillis = currentMillis; animation2Done = true; }} annars if (animation3Done == false och animation2Done == true) {if (currentMillis - previousMillis> animation3Delay) {Serial.println ("2"); //Serial.println("ljud:grön "); previousMillis = currentMillis; animation3Done = true; lightRed = false; }} annat om (animation4Done == false och animation3Done == true) {if (currentMillis - previousMillis> animation4Delay) {previousMillis = currentMillis; animation4Done = true; Serial.println ("FLSH"); }}}
if (Serial.available ()) {
String str = Serial.readString (); if (str == "CMD: BUTTON_PRESSED") {
animation1Done = false;
animation2Done = false; animation3Done = false; animation4Done = false; animation5Done = false;
animation1Delay = walkingLength * 1000;
animation2Delay = wavingLength * 1000; animation3Delay = happyLength * 1000; animation4Delay = walkingOutLength * 1000;
// currentAnimationDelay = animation1Delay * 1000;
lightRed = true; Serial.println ("3"); buttonPressed = true; previousMillis = currentMillis; }
if (str == "RÖD") {
blockLight = false; lightRed = true; }
if (str == "GRÖN") {
blockLight = false; lightRed = false; }
if (str == "LJUS: GRÖN: AV") {
blockLight = true; analogWrite (g, 255); } if (str == "LIGHT: GREEN: ON") {blockLight = true; analogWrite (g, 0); } //Serial.println(str); }
if (blockLight == false) {
if (lightRed == true) {
analogWrite (r, 0); analogWrite (g, 255); } if (lightRed == false) {analogWrite (r, 255); analogWrite (g, 0); }}}