Sadržaj:
Video: Pametni interaktivni semafor: 5 koraka (sa slikama)
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Spremni za izradu najboljeg i najinteraktivnijeg semafora na svijetu? Dobro! U ovom ćemo vodiču objasniti kako ga možete sami izgraditi pomoću Arduina.
Potrebne komponente:- Arduino (..duh)- LM317 Mosfet- 2x 60 cm analogne RGB LED trake (12V)- PVC cijev (1m x 125 mm)- Kabeli (crveni i crni)- Metalne ploče za svjetlosne kape- Akril za svjetlo -ikone (provjerite flaticon.com za.svg ikone)- Spraycan crno-bijela boja.- Električna traka- Sve potrebne komponente za lemljenje- Zaslon sa potrebnim štitom (ne koristi se u vodiču)
Korak 1: Korak 1: Napravite kapice za svjetlo
Dizajn doista ovisi o vama. Napravili smo kapu dimenzija 15x15 cm koja drži svjetla. Izrezali smo metalne ploče na ispravnu veličinu i upotrijebili metalni savijač (ne, ne iz Avatara) da savijemo kape u pravim oblicima. Stražnje ploče izrađene su od različite komponente.
Korak 2: Korak 2: Priprema PVC stupa
Izrežite 2 rupe na PVC stupu kako biste prilagodili poklopce svjetla. Zatim upotrijebite sprej sa crnom bojom da cijelu boju ofarbate u crno. Ako želite, možete dodati bijele pruge na dnu stupa (uobičajeno u Nizozemskoj).
Korak 3: Korak 3: Sklapanje RGB LED traka i pjeskarenje akrilnih ploča
Zatim ćete morati sastaviti RGB LED trake unutar poklopca svjetla. Čvrsto ih pričvrstite oko čepa i postavite ih što bliže sprijeda.
Zatim ćete morati pjeskariti odabrani simbol za na akrilnoj ploči. Uzmite traku i prekrijte cijelu akrilnu ploču. Zatim izrežite željeni oblik/figuru. Nakon toga ploču možete pjeskariti kako biste dobili učinak poput matiranog stakla.
Korak 4: Korak 4: Spojite RGB LED trake na Arduino
Sada dolazi lukavi dio: povezivanje RGB LED traka s Arduinom. Kad spajate pinove, provjerite jeste li stavili 12v na 12v vaše trake. Između svake boje, tako crvene ili zelene, morate staviti MOSFET. Spojite podatke LED trake na srednji pin MOSFET -a, a lijevi na vaš Arduino. Desni pin mora se vratiti na tlo Arduina.
Korak 5: Korak 5: Napišite Arduino kod
Ovim Arduino kodom upravlja Bluetooth, jer nismo koristili unutarnji zaslon. Dakle, kod se kontrolira putem bluetooth poruka u 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 wavingLength 6
bool gumbPritisnut;
int currentMillis; int previousMillis;
int animacija1Delay;
int animation2Delay; int animacija3Delay; int animacija4Delay;
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 () {
// ovdje postavite svoj kôd za postavljanje, da biste ga jednom pokrenuli: pinMode (r, OUTPUT); pinMode (g, OUTPUT);
Serial.begin (9600);
mySerial.begin (38400); Serial.setTimeout (25); buttonPressed = false; currentMillis = 0; previousMillis = 0;
animation1Delay = walkingLength * 1000;
animation2Delay = wavingLength * 1000; animation3Delay = happyLength * 1000; animation4Delay = walkingOutLength * 1000;
// currentAnimationDelay = animation1Delay * 1000;
lightRed = istina; }
void loop () {{100} {101}
// odgoda (20);
// ovdje unesite svoj glavni kôd, za ponavljanje izvođenja: unsigned long currentMillis = millis (); if (buttonPressed == true) {if (animation1Done == false) {if (currentMillis - previousMillis> animacija1Delay) {Serial.println ("0"); previousMillis = trenutniMillis; animacija1Učinjeno = istina; }} else if (animation2Done == false i animation1Done == true) {if (currentMillis - previousMillis> animation2Delay) {Serial.println ("1"); previousMillis = trenutniMillis; animacija2Učinjeno = istina; }} else if (animation3Done == false i animation2Done == true) {if (currentMillis - previousMillis> animacija3Delay) {Serial.println ("2"); //Serial.println("sound:green "); previousMillis = trenutniMillis; animacija3Učinjeno = istina; lightRed = false; }} else if (animation4Done == false i animation3Done == true) {if (currentMillis - previousMillis> animation4Delay) {previousMillis = currentMillis; animation4Done = istina; Serial.println ("FLSH"); }}}
if (Serial.available ()) {
Niz str = Serial.readString (); if (str == "CMD: BUTTON_PRESSED") {{100} {101}
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 = istina; Serial.println ("3"); buttonPressed = true; previousMillis = trenutniMillis; }
if (str == "CRVENO") {
blockLight = false; lightRed = istina; }
if (str == "ZELENO") {
blockLight = false; lightRed = false; }
if (str == "SVJETLO: ZELENO: ISKLJUČENO") {
blockLight = true; analogWrite (g, 255); } if (str == "LIGHT: GREEN: ON") {blockLight = true; analogWrite (g, 0); } //Serijski.println(str); }
if (blockLight == false) {
if (lightRed == true) {
analogWrite (r, 0); analogWrite (g, 255); } if (lightRed == false) {analogWrite (r, 255); analogWrite (g, 0); }}}