Obsah:

Inteligentní interaktivní semafor: 5 kroků (s obrázky)
Inteligentní interaktivní semafor: 5 kroků (s obrázky)

Video: Inteligentní interaktivní semafor: 5 kroků (s obrázky)

Video: Inteligentní interaktivní semafor: 5 kroků (s obrázky)
Video: 06-2 Wix kapitoly 1.7.6 - 1.12 a Figma založení účtu 2024, Listopad
Anonim
Inteligentní interaktivní semafor
Inteligentní interaktivní semafor

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

Krok 1: Vytvořte světelné čepice
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

Krok 2: Příprava sloupku z PVC
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

Krok 3: Sestavení RGB LED pásků a pískování akrylových desek
Krok 3: Sestavení RGB LED pásků a pískování akrylových desek
Krok 3: Sestavení RGB LED pásků a pískování akrylových desek
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

Krok 4: Připojte RGB LED pásky k Arduinu
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

Krok 5: Napište kód Arduino
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); }}}

Doporučuje: