Kazalo:
Video: Pametni interaktivni semafor: 5 korakov (s slikami)
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Ste pripravljeni na izgradnjo najboljšega in najbolj interaktivnega semaforja na svetu? Dobro! V tej vadnici vam bomo razložili, kako lahko sami zgradite Arduino.
Potrebne komponente:- Arduino (..duh)- LM317 Mosfet- 2x 60 cm analogni RGB LED trakovi (12V)- PVC cev (1m x 125 mm)- kabli (rdeči in črni)- kovinske plošče za svetlobne kape- akril za svetlobo -ikoni (poiščite ikone.svg na flaticon.com)- črno-bela barva Spraycan.- električni trak- vse potrebne komponente za spajkanje- zaslon z zahtevanim ščitnikom (v vadnici se ne uporablja)
1. korak: 1. korak: Naredite kapice za svetlobo
Oblikovanje je res odvisno od vas. Naredili smo pokrovček 15x15 cm, ki drži luči. Kovinske plošče smo razrezali na pravilno velikost in uporabili kovinski upogib (ne, ne iz Avatarja), da smo pokrovčke upognili v prave oblike. Zadnje plošče so bile izdelane iz različnih komponent.
2. korak: 2. korak: Priprava PVC stebra
V PVC stebru izrežite 2 luknji, da se prilegata svetlobnim pokrovom. Nato s črno barvo razpršite, da celotno stvar pobarvate v črno. Če želite, lahko na dno stebra dodate bele črte (običajno na Nizozemskem).
3. korak: 3. korak: Sestavljanje LED trakov RGB in peskanje akrilnih plošč
Nato morate sestaviti RGB LED trakove znotraj pokrova luči. Tesno jih namestite okoli pokrovčka in jih postavite čim bližje spredaj.
Nato morate na akrilni plošči peskati izbrani simbol za. Vzemite nekaj traku in pokrijte celotno akrilno ploščo. Nato izrežite želeno obliko/figuro. Po tem lahko ploščo peskate, da dobite učinek, podoben matiranemu steklu.
Korak 4: Korak 4: Priključite LED trakove RGB na Arduino
Zdaj prihaja težaven del: povezovanje LED trakov RGB z Arduinom. Ko priključujete zatiče, se prepričajte, da ste 12v postavili na 12v vašega traku. Med vsako barvo, tako rdečo ali zeleno, morate postaviti MOSFET. Priključite podatke LED traku na srednji zatič MOSFET -a, levi pa na Arduino. Desni zatič se mora vrniti na tla Arduina.
5. korak: 5. korak: Napišite kodo Arduino
To kodo Arduino nadzira bluetooth, ker nismo uporabljali notranjega zaslona. Tako se koda nadzira prek bluetooth sporočil v funkciji loop ().
#define r 6 #define g 11 #include
SoftwareSerial mySerial (10, 11); // RX, TX
#define angryLength 4
#define fallLength 3 #define happyLength 4 #define onPhoneLength 13 #define talkLength 5 #define walkingLength 4 #define walkingOutLength 4 #define wavingDolžina 6
bool gumbPritisnjen;
int currentMillis; int previousMillis;
int animation1Delay;
int animacija2Delay; int animacija3Delay; int animacija4Delay;
bool animation1Done = false;
bool animation2Done = false; bool animation3Done = false; bool animation4Done = false; bool animation5Done = false;
bool blockLight = false;
bool lightRed = res;
int currentAnimationDelay;
void setup () {
// tukaj vstavite nastavitveno kodo, ki jo želite zagnati enkrat: pinMode (r, OUTPUT); pinMode (g, OUTPUT);
Serial.begin (9600);
mySerial.begin (38400); Serial.setTimeout (25); buttonPressed = false; currentMillis = 0; prejšnjiMillis = 0;
animation1Delay = walkingLength * 1000;
animation2Delay = wavingLength * 1000; animation3Delay = happyLength * 1000; animation4Delay = walkingOutLength * 1000;
// currentAnimationDelay = animation1Delay * 1000;
lightRed = res; }
void loop () {
// zakasnitev (20);
// vnesite svojo glavno kodo sem, da se zažene večkrat: unsigned long currentMillis = millis (); if (buttonPressed == true) {if (animation1Done == false) {if (currentMillis - previousMillis> animacija1Delay) {Serial.println ("0"); previousMillis = trenutniMillis; animacija1Done = res; }} else if (animation2Done == false in animation1Done == true) {if (currentMillis - previousMillis> animation2Delay) {Serial.println ("1"); previousMillis = trenutniMillis; animacija2Done = res; }} else if (animation3Done == false in animation2Done == true) {if (currentMillis - previousMillis> animation3Delay) {Serial.println ("2"); //Serial.println("sound:green "); previousMillis = trenutniMillis; animacija3Done = res; lightRed = false; }} else if (animation4Done == false in animation3Done == true) {if (currentMillis - previousMillis> animation4Delay) {previousMillis = currentMillis; animacija4Done = res; Serial.println ("FLSH"); }}}
if (Serial.available ()) {
Niz 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 = res; Serial.println ("3"); buttonPressed = res; previousMillis = trenutniMillis; }
if (str == "RDEČA") {
blockLight = false; lightRed = res; }
if (str == "ZELENO") {
blockLight = false; lightRed = false; }
if (str == "LUČ: ZELENO: IZKLOPLJENO") {
blockLight = res; 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); }}}