Inhoudsopgave:

Slim interactief verkeerslicht - Ajarnpa
Slim interactief verkeerslicht - Ajarnpa

Video: Slim interactief verkeerslicht - Ajarnpa

Video: Slim interactief verkeerslicht - Ajarnpa
Video: LES 18 Verkeerslichten 2024, November
Anonim
Slim interactief verkeerslicht
Slim interactief verkeerslicht

Klaar om 's werelds beste en meest interactieve verkeerslicht te bouwen? Mooi zo! In deze tutorial leggen we uit hoe je er zelf een kunt bouwen met Arduino.

Benodigde componenten:- Arduino (..duh)- LM317 Mosfet- 2x 60cm Analoge RGB LED Strips (12V)- PVC buis (1m x 125mm)- Kabels (rood en zwart)- Metalen platen voor lichtkappen- Acryl voor het licht -iconen (check flaticon.com voor.svg iconen)- Spuitbus zwart-witte verf.- Elektrisch tape- Alle benodigde soldeercomponenten- Display met vereist schild (niet gebruikt in tutorial)

Stap 1: Stap 1: Maak de Light-caps

Stap 1: Maak de lichtkappen
Stap 1: Maak de lichtkappen

Het ontwerp is echt aan jou. We hebben een dop van 15x15cm gemaakt om de lampjes vast te houden. We hebben de metalen platen op de juiste maat gesneden en met een metalen buigmachine (nee, niet van Avatar) de doppen in de juiste vormen gebogen. De backplates zijn gemaakt van een ander onderdeel.

Stap 2: Stap 2: De PVC-paal voorbereiden

Stap 2: De PVC-paal voorbereiden
Stap 2: De PVC-paal voorbereiden

Snijd 2 gaten in de PVC-paal om op de lichtkappen te passen. Gebruik vervolgens een zwarte verfspuitbus om het geheel zwart te schilderen. Als je wilt, kun je witte strepen aan de onderkant van de paal toevoegen (gebruikelijk in Nederland).

Stap 3: Stap 3: Montage van de RGB LED-strips en zandstralen van de acrylplaten

Stap 3: Montage van de RGB LED-strips en zandstralen van de acrylplaten
Stap 3: Montage van de RGB LED-strips en zandstralen van de acrylplaten
Stap 3: Montage van de RGB LED-strips en zandstralen van de acrylplaten
Stap 3: Montage van de RGB LED-strips en zandstralen van de acrylplaten

Vervolgens moet je de RGB LED-strips in de lichtkap monteren. Plaats ze strak om de dop en plaats ze zo dicht mogelijk naar voren.

Vervolgens moet je het geselecteerde symbool voor op de acrylplaat zandstralen. Pak wat tape en bedek de hele acrylplaat. Knip vervolgens de gewenste vorm/figuur uit. Hierna kunt u de plaat zandstralen om een matglas-achtig effect te krijgen.

Stap 4: Stap 4: Sluit de RGB LED-strips aan op de Arduino

Stap 4: Sluit de RGB LED-strips aan op de Arduino
Stap 4: Sluit de RGB LED-strips aan op de Arduino

Nu komt het lastige deel: de RGB LED-strips aansluiten op de Arduino. Let er bij het aansluiten van de pinnen op dat je de 12v op de 12v van je strip zet. Tussen elke kleur, dus rood of groen, moet je een mosfet plaatsen. Sluit de data van de ledstrip aan op de middelste pin van de mosfet, en de linker pin op je Arduino. De rechter pin moet terug naar de grond van de Arduino.

Stap 5: Stap 5: Schrijf de Arduino-code

Stap 5: Schrijf de Arduino-code
Stap 5: Schrijf de Arduino-code

Deze Arduino-code wordt aangestuurd door bluetooth, omdat we geen intern display hebben gebruikt. Dus de code wordt bestuurd via bluetooth-berichten in de loop()-functie.

#define r 6#define g 11 #include

SoftwareSerial mySerial(10, 11); // RX, TX

#definieer boosLength 4

#define fallLength 3 #define happyLength 4 #define onPhoneLength 13 #define talkingLength 5 #define walkingLength 4 #define walkingOutLength 4 #define zwaaienLength 6

bool-knop Ingedrukt;

int huidigeMillis; int vorigeMillis;

int animatie1Vertraging;

int animatie2Delay; int animatie3Delay; int animatie4Delay;

bool animatie1Gereed = false;

bool animatie2Gereed = false; bool animatie3Gereed = false; bool animatie4Done = false; bool animatie5Gereed = false;

bool blockLight = false;

bool lightRood = waar;

int huidigeAnimationDelay;

ongeldige setup() {

// plaats hier je setup-code om een keer uit te voeren: pinMode(r, OUTPUT); pinMode (g, UITGANG);

Serieel.begin(9600);

mijnSerial.begin(38400); Seriële.setTimeout(25); knop ingedrukt = vals; huidigeMillis = 0; vorigeMillis = 0;

animatie1Delay = wandelenLengte * 1000;

animatie2Delay = zwaailengte * 1000; animatie3Delay = happyLength * 1000; animatie4Delay = walkingOutLength * 1000;

//currentAnimationDelay = animatie1Delay * 1000;

lichtrood = waar; }

lege lus() {

//vertraging (20);

// plaats hier je hoofdcode, om herhaaldelijk uit te voeren: unsigned long currentMillis = millis(); if(buttonPressed == true) { if(animation1Done == false) { if(currentMillis - previousMillis > animatie1Delay) { Serial.println("0"); vorigeMillis = huidigeMillis; animatie1Gereed = waar; } } else if(animation2Done == false en animatie1Done == true) { if(currentMillis - previousMillis > animatie2Delay) { Serial.println("1"); vorigeMillis = huidigeMillis; animatie2Gereed = waar; } } else if(animation3Done == false en animatie2Done == true) { if(currentMillis - previousMillis > animatie3Delay) { Serial.println("2"); //Serial.println ("geluid: groen"); vorigeMillis = huidigeMillis; animatie3Gereed = waar; lichtrood = onwaar; } } else if(animation4Done == false en animatie3Done == true) { if(currentMillis - previousMillis > animatie4Delay) { previousMillis = currentMillis; animatie4Done = waar; Serieel.println("FLSH"); } } }

if (Serial.available()) {

String str = Serial.readString(); if(str == "CMD:BUTTON_PRESSED") {

animatie1Gereed = false;

animatie2Gereed = onwaar; animatie3Gereed = onwaar; animatie4Done = false; animatie5Gereed = onwaar;

animatie1Delay = wandelenLengte * 1000;

animatie2Delay = zwaailengte * 1000; animatie3Delay = happyLength * 1000; animatie4Delay = walkingOutLength * 1000;

//currentAnimationDelay = animatie1Delay * 1000;

lichtrood = waar; Serieel.println("3"); knop ingedrukt = waar; vorigeMillis = huidigeMillis; }

if(str == "ROOD") {

blockLight = onwaar; lichtrood = waar; }

if(str == "GROEN") {

blockLight = onwaar; lichtrood = onwaar; }

if(str == "LICHT:GROEN:UIT") {

blockLight = waar; analoogWrite(g, 255); } if(str == "LIGHT:GREEN:ON") { blockLight = true; analoogWrite(g, 0); } //Serial.println(str); }

if(blockLight == false) {

if(lightRed == true) {

analoogWrite(r, 0); analoogWrite(g, 255); } if(lightRed == false) { analogWrite(r, 255); analoogWrite(g, 0); } } }

Aanbevolen: