Cuprins:

Semafor interactiv inteligent: 5 pași (cu imagini)
Semafor interactiv inteligent: 5 pași (cu imagini)
Anonim
Semafor interactiv inteligent
Semafor interactiv inteligent

Sunteți gata să construiți cel mai bun și mai interactiv semafor din lume? Bun! În acest tutorial, vă vom explica cum puteți construi unul singur folosind Arduino.

Componente necesare: - Arduino (..duh) - LM317 Mosfet - 2x 60cm benzi LED RGB analogice (12V) - Tub din PVC (1m x 125mm) - Cabluri (roșu și negru) - Plăci metalice pentru capace de lumină - Acril pentru lumină -iconuri (verificați flaticon.com pentru pictogramele.svg) - Vopsea alb-negru spray-Banda electrică- Toate componentele de lipit necesare- Afișaj cu ecranul necesar (nu este utilizat în tutorial)

Pasul 1: Pasul 1: Faceți capacele luminoase

Pasul 1: Faceți capacele luminoase
Pasul 1: Faceți capacele luminoase

Designul depinde de tine. Am realizat un capac de 15x15cm pentru a ține luminile. Am tăiat plăcile metalice la dimensiunea corectă și am folosit un dispozitiv de îndoit metalic (nu, nu de la Avatar) pentru a îndoi capacele în formele potrivite. Plăcile din spate au fost realizate dintr-o componentă diferită.

Pasul 2: Pasul 2: Pregătirea stâlpului din PVC

Pasul 2: Preparați stâlpul din PVC
Pasul 2: Preparați stâlpul din PVC

Tăiați 2 găuri în stâlpul din PVC pentru a se potrivi cu capacele luminoase. Apoi utilizați un spray de vopsea neagră pentru a vopsi întregul lucru în negru. Dacă doriți, puteți adăuga dungi albe pe fundul stâlpului (obișnuit în Olanda).

Pasul 3: Pasul 3: Asamblarea benzilor LED RGB și sablarea plăcilor acrilice

Pasul 3: Asamblarea benzilor LED RGB și sablarea plăcilor acrilice
Pasul 3: Asamblarea benzilor LED RGB și sablarea plăcilor acrilice
Pasul 3: Asamblarea benzilor LED RGB și sablarea plăcilor acrilice
Pasul 3: Asamblarea benzilor LED RGB și sablarea plăcilor acrilice

Apoi, va trebui să asamblați benzile LED RGB în interiorul capacului de lumină. Montați-le strâns în jurul capacului și așezați-le cât mai aproape posibil de partea din față.

În continuare, va trebui să șlefuiți simbolul selectat pentru placa acrilică. Ia niște bandă adezivă și acoperă întreaga placă acrilică. Apoi decupați forma / figura dorită. După aceasta, puteți șlefui placa pentru a obține un efect de sticlă mată.

Pasul 4: Pasul 4: Conectați benzile LED RGB la Arduino

Pasul 4: Conectați benzile LED RGB la Arduino
Pasul 4: Conectați benzile LED RGB la Arduino

Acum vine partea dificilă: conectarea benzilor LED RGB la Arduino. Când conectați pinii, asigurați-vă că ați pus 12v pe 12v de bandă. Între fiecare culoare, deci roșie sau verde, trebuie să puneți un mosfet. Conectați datele benzii led la pinul din mijloc al mosfetului și pinul stâng la Arduino. Știftul din dreapta trebuie să se întoarcă la solul Arduino.

Pasul 5: Pasul 5: Scrieți codul Arduino

Pasul 5: Scrieți codul Arduino
Pasul 5: Scrieți codul Arduino

Acest cod Arduino este controlat de bluetooth, deoarece nu am folosit un afișaj intern. Deci, codul este controlat prin mesaje bluetooth în funcția loop ().

#define r 6 # define g 11 #include

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

#define angryLength 4

#definirea căderiiLungimea 3 #definirea fericităLungimea 4 #definirea peTelefonulLungimea 13 #definirea vorbiriiLungimea 5 #definirea mersului pe josLungimea 4 #definirea mersuluiDeLungimea 4 #definirea fluturăriiLungimea 6

buton bool Apăsat;

int currentMillis; int previousMillis;

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 = adevărat;

int currentAnimationDelay;

configurare nulă () {

// puneți codul de configurare aici, pentru a rula o dată: pinMode (r, OUTPUT); pinMode (g, OUTPUT);

Serial.begin (9600);

mySerial.begin (38400); Serial.setTimeout (25); buttonPressed = false; currentMillis = 0; precedentMilis = 0;

animation1Delay = WalkingLength * 1000;

animation2Delay = wavingLength * 1000; animation3Delay = happyLength * 1000; animation4Delay = walkingOutLength * 1000;

// currentAnimationDelay = animation1Delay * 1000;

lightRed = adevărat; }

bucla nulă () {

// întârziere (20);

// puneți codul principal aici, pentru a rula în mod repetat: unsigned long currentMillis = millis (); if (buttonPressed == true) {if (animation1Done == false) {if (currentMillis - anteriorMillis> animation1Delay) {Serial.println ("0"); previousMillis = currentMillis; animație1Done = adevărat; }} else if (animation2Done == false și animation1Done == true) {if (currentMillis - anteriorMillis> animation2Delay) {Serial.println ("1"); previousMillis = currentMillis; animation2Done = adevărat; }} else if (animation3Done == false și animation2Done == true) {if (currentMillis - anteriorMillis> animation3Delay) {Serial.println ("2"); //Serial.println("sound:green "); previousMillis = currentMillis; animation3Done = adevărat; lightRed = fals; }} else if (animation4Done == false și animation3Done == true) {if (currentMillis - previousMillis> animation4Delay) {previousMillis = currentMillis; animation4Done = adevărat; Serial.println ("FLSH"); }}}

if (Serial.available ()) {

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

animation1Done = false;

animation2Done = false; animație3Done = fals; animation4Done = fals; animation5Done = false;

animation1Delay = WalkingLength * 1000;

animation2Delay = wavingLength * 1000; animation3Delay = happyLength * 1000; animation4Delay = walkingOutLength * 1000;

// currentAnimationDelay = animation1Delay * 1000;

lightRed = adevărat; Serial.println ("3"); buttonPressed = true; previousMillis = currentMillis; }

if (str == "RED") {

blockLight = false; lightRed = adevărat; }

if (str == "VERDE") {

blockLight = false; lightRed = fals; }

if (str == "LIGHT: GREEN: OFF") {

blockLight = adevărat; 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); }}}

Recomandat: