Obsah:
Video: Inteligentní interaktivní semafor: 5 kroků (s obrázky)
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Jste připraveni postavit nejlepší a nejinteraktivnější semafor na světě? Dobrý! V tomto tutoriálu vysvětlíme, jak si jej můžete vytvořit sami pomocí Arduina.
Požadované komponenty:- Arduino (..duh)- LM317 Mosfet- 2x 60 cm analogové RGB LED pásky (12V)- PVC trubice (1 m x 125 mm)- kabely (červené a černé)- kovové desky pro světelné čepice- akryl pro světlo -ikony (ikony.svg najdete na flaticon.com)- Spraycan černobílý nátěr.- Elektrická páska- Všechny požadované pájecí součásti- Displej s požadovaným štítem (nepoužívá se v tutoriálu)
Krok 1: Krok 1: Vytvořte světelné čepice
Design je opravdu na vás. Vyrobili jsme čepici 15x15 cm, která drží světla. Vystřihli jsme kovové desky na správnou velikost a pomocí kovového ohýbačky (ne, ne od Avatara) ohýbáme čepice ve správných tvarech. Zadní desky byly vyrobeny z jiné součásti.
Krok 2: Krok 2: Příprava sloupku z PVC
Vyřízněte 2 otvory v tyči z PVC, aby odpovídaly světelným čepicím. Poté použijte stříkací pistoli s černou barvou k natření celé věci na černo. Pokud chcete, můžete na spodní část sloupu přidat bílé pruhy (běžné v Nizozemsku).
Krok 3: Krok 3: Sestavení RGB LED pásků a pískování akrylových desek
Dále budete muset sestavit RGB LED pásky uvnitř světelné krytky. Nasaďte je těsně kolem víčka a umístěte je co nejblíže k přední části.
Dále budete muset pískovat vybraný symbol pro na akrylovou desku. Vezměte si pásku a zakryjte celou akrylovou desku. Poté vystřihněte požadovaný tvar/postavu. Poté můžete desku opískovat, abyste získali efekt podobný matnému sklu.
Krok 4: Krok 4: Připojte RGB LED pásky k Arduinu
Nyní přichází ošemetná část: připojení RGB LED pásků k Arduinu. Když připojujete kolíky, ujistěte se, že jste připojili 12 V na 12 V pásku. Mezi každou barvu, tak červenou nebo zelenou, musíte vložit mosfet. Připojte data LED pásky ke střednímu kolíku mosfetu a levý pin k vašemu Arduinu. Pravý kolík se musí vrátit zpět na zem Arduina.
Krok 5: Krok 5: Napište kód Arduino
Tento kód Arduino je řízen bluetooth, protože jsme nepoužili interní displej. Kód je tedy řízen pomocí zpráv bluetooth ve funkci loop ().
#definovat r 6 #definovat g 11 #zahrnout
SoftwareSerial mySerial (10, 11); // RX, TX
#define angryLength 4
#define klesajícíDélka 3 #define happyLength 4 #define onPhoneLength 13 #define talkingLength 5 #define walkingLength 4 #define walkingOutLength 4 #define wavingLength 6
tlačítko boolStisknuto;
int aktuálníMillis; int předchozíMillis;
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 = true;
int currentAnimationDelay;
neplatné nastavení () {
// sem vložte svůj instalační kód, aby se spustil jednou: pinMode (r, OUTPUT); pinMode (g, VÝSTUP);
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 = true; }
prázdná smyčka () {
// zpoždění (20);
// sem vložte svůj hlavní kód, aby běžel opakovaně: unsigned long currentMillis = millis (); if (buttonPressed == true) {if (animation1Done == false) {if (currentMillis - previousMillis> animation1Delay) {Serial.println ("0"); previousMillis = aktuálníMillis; animation1Done = true; }} else if (animation2Done == false a animation1Done == true) {if (currentMillis - previousMillis> animation2Delay) {Serial.println ("1"); previousMillis = aktuálníMillis; animation2Done = true; }} else if (animation3Done == false a animation2Done == true) {if (currentMillis - previousMillis> animation3Delay) {Serial.println ("2"); //Serial.println("sound:green "); previousMillis = aktuálníMillis; animation3Done = true; lightRed = false; }} else if (animation4Done == false a animation3Done == true) {if (currentMillis - previousMillis> animation4Delay) {previousMillis = currentMillis; animation4Done = true; Serial.println ("FLSH"); }}}
pokud (Serial.available ()) {
Řetězec 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 = true; Serial.println ("3"); buttonPressed = true; previousMillis = aktuálníMillis; }
if (str == "ČERVENÁ") {
blockLight = false; lightRed = true; }
if (str == "ZELENÁ") {
blockLight = false; lightRed = false; }
if (str == "SVĚTLO: ZELENÉ: VYPNUTO") {
blockLight = true; analogWrite (g, 255); } if (str == "SVĚTLO: ZELENÉ: ZAPNUTO") {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); }}}