Obsah:
Video: Inteligentný interaktívny semafor: 5 krokov (s obrázkami)
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
Ste pripravení postaviť najlepší a najinteraktívnejší semafor na svete? Dobre! V tomto návode vám vysvetlíme, ako si ho môžete vytvoriť sami pomocou Arduina.
Požadované komponenty:- Arduino (..duh)- LM317 Mosfet- 2x 60 cm analógové RGB LED pásy (12V)- PVC trubica (1 m x 125 mm)- Káble (červené a čierne)- Kovové platne pre žiarovky- Akryl pre svetlo -ikony (ikony.svg nájdete na flaticon.com)- čiernobiely lak na sprej.- elektrická páska- všetky požadované spájkovacie komponenty- displej s požadovaným štítom (nepoužíva sa v návode)
Krok 1: Krok 1: Vytvorte svetelné kryty
Dizajn je skutočne na vás. Vyrobili sme čiapku 15x15 cm na uchytenie svetiel. Vystrihli sme kovové platne na správnu veľkosť a pomocou kovového ohýbača (nie, nie od spoločnosti Avatar) sme čiapky ohýbali v správnych tvaroch. Zadné dosky boli vyrobené z iného komponentu.
Krok 2: Krok 2: Príprava pólu z PVC
Do stĺpika z PVC vyrežte 2 otvory tak, aby zodpovedali krytkám svetla. Potom použite sprej na čiernu farbu na natretie celej veci na čierno. Ak chcete, môžete na spodok tyče pridať biele pruhy (bežné v Holandsku).
Krok 3: Krok 3: Zostavenie RGB LED pásikov a pieskovanie akrylových dosiek
Ďalej budete musieť zostaviť RGB LED pásy do žiarovky. Nasaďte ich tesne okolo uzáveru a umiestnite ich čo najbližšie k prednej časti.
Ďalej budete musieť pieskovaný symbol na akrylovej doske opieskovať. Vezmite si pásku a pokryte celú akrylovú dosku. Potom vystrihnite požadovaný tvar/postavu. Potom môžete doštičku pieskovať, aby ste získali efekt podobný matnému sklu.
Krok 4: Krok 4: Pripojte RGB LED pásiky k Arduinu
Teraz prichádza náročná časť: pripojenie RGB LED pásikov k Arduinu. Keď pripájate kolíky, uistite sa, že ste zapojili 12 V na 12 V vášho prúžku. Medzi každú farbu, takú červenú alebo zelenú, musíte dať mosfet. Pripojte údaje LED pásky k strednému kolíku mosfetu a ľavý kolík k vášmu Arduinu. Pravý kolík sa musí vrátiť na zem Arduina.
Krok 5: Krok 5: Napíšte kód Arduino
Tento kód Arduino je ovládaný bluetooth, pretože sme nepoužili interný displej. Kód je teda ovládaný prostredníctvom správ bluetooth vo funkcii loop ().
#define r 6 #definujte g 11 #include
SoftwareSerial mySerial (10, 11); // RX, TX
#define angryDĺžka 4
#define klesáDĺžka 3 #define happyLength 4 #define onPhoneLength 13 #define talkingLength 5 #define walkingLength 4 #define walkingOutLength 4 #define wavingLength 6
tlačidlo boolStlačené;
int currentMillis; int predchádzajúciMillis;
int animation1Odklad;
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;
neplatné nastavenie () {
// sem vložte svoj inštalačný kód, aby sa spustil raz: pinMode (r, OUTPUT); pinMode (g, VÝSTUP);
Serial.begin (9600);
mySerial.begin (38400); Serial.setTimeout (25); buttonPressed = false; currentMillis = 0; predchádzajúciMillis = 0;
animation1Delay = walkingLength * 1000;
animation2Delay = wavingLength * 1000; animation3Delay = happyLength * 1000; animation4Delay = walkingOutLength * 1000;
// currentAnimationDelay = animation1Delay * 1000;
lightRed = true; }
prázdna slučka () {
// zdržanie (20);
// sem vložte svoj hlavný kód, aby sa spúšťal opakovane: nepodpísaný dlhý aktuálnyMillis = millis (); if (buttonPressed == true) {if (animation1Done == false) {if (currentMillis - previousMillis> animation1Delay) {Serial.println ("0"); previousMillis = súčasnýMillis; animation1Done = true; }} else if (animation2Done == false a animation1Done == true) {if (currentMillis - previousMillis> animation2Delay) {Serial.println ("1"); previousMillis = súčasnýMillis; animation2Done = true; }} else if (animation3Done == false a animation2Done == true) {if (currentMillis - previousMillis> animation3Delay) {Serial.println ("2"); //Serial.println("sound:green "); previousMillis = súčasnýMillis; animation3Done = true; lightRed = false; }} else if (animation4Done == false a animation3Done == true) {if (currentMillis - previousMillis> animation4Delay) {previousMillis = currentMillis; animation4Done = true; Serial.println ("FLSH"); }}}
ak (Serial.available ()) {
Reťazec str = Serial.readString (); ak (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 = súčasnýMillis; }
ak (str == "ČERVENÁ") {
blockLight = false; lightRed = true; }
ak (str == "ZELENÉ") {
blockLight = false; lightRed = false; }
ak (str == "SVETLO: ZELENÉ: VYPNUTÉ") {
blockLight = true; analogWrite (g, 255); } if (str == "SVETLO: ZELENÉ: ZAPNUTÉ") {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); }}}