Mündəricat:
Video: Ağıllı İnteraktiv Svetofor: 5 Addım (Şəkillərlə birlikdə)
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
Dünyanın ən yaxşı və ən interaktiv işıqforunu qurmağa hazırsınızmı? Yaxşı! Bu təlimatda, Arduino -dan istifadə edərək özünüzü necə qura biləcəyinizi izah edəcəyik.
Lazım olan komponentlər:- Arduino (..duh)- LM317 Mosfet- 2x 60cm Analog RGB LED Şeritler (12V)- PVC boru (1m x 125mm)- Kabellər (qırmızı və qara)- İşıq qapaqları üçün metal lövhələr- İşıq üçün akril - ikonlar (.svg nişanları üçün flaticon.com saytına baxın)- Spraycan qara və ağ boya.- Elektrik lenti- Lazım olan bütün lehimləmə komponentləri
Addım 1: Adım 1: İşıq qapaqları düzəldin
Dizayn həqiqətən sizə bağlıdır. İşıqları saxlamaq üçün 15x15 sm ölçüdə bir qapaq hazırladıq. Metal lövhələri düzgün ölçüdə kəsdik və qapaqları düzgün formada əymək üçün metal bükücü istifadə etdik (yox, Avatardan deyil). Arxa plakalar fərqli bir komponentdən hazırlanmışdır.
Adım 2: Adım 2: PVC Dirək Hazırlanması
İşıq qapaqlarına uyğun olaraq PVC dirəkdə 2 delik kəsin. Sonra hər şeyi qara rəngə boyamaq üçün qara boya spreyindən istifadə edin. İstəyirsinizsə, dirəyin altına ağ zolaqlar əlavə edə bilərsiniz (Hollandiyada yaygındır).
Addım 3: Adım 3: RGB LED şeritlərinin yığılması və akril lövhələrin qumla təmizlənməsi
Sonra, işıq qapağının içərisində RGB LED şeritlərini yığmalısınız. Qapağın ətrafına sıx bağlayın və mümkün qədər önə yaxın qoyun.
Bundan sonra akril lövhədə seçilmiş simvolu qumdan təmizləməlisiniz. Bir az lent alın və bütün akril lövhəni örtün. Sonra istədiyiniz formanı/rəqəmi kəsin. Bundan sonra, buzlu şüşəyə bənzər bir təsir əldə etmək üçün boşqabı qumla təmizləyə bilərsiniz.
Addım 4: Adım 4: RGB LED şeritlərini Arduinoya qoşun
İndi çətin hissə gəlir: RGB LED şeritlərini Arduinoya bağlamaq. Pimleri bağlayarkən, zolağınızın 12v -ni 12v -ə qoyduğunuzdan əmin olun. Qırmızı və ya yaşıl olan hər bir rəng arasında bir mosfet qoymaq lazımdır. Led şeridinin məlumatlarını mosfetin orta pininə, sol pinini də Arduino -ya bağlayın. Doğru pin, Arduinonun torpağına qayıtmalıdır.
Addım 5: Adım 5: Arduino Kodunu yazın
Daxili bir ekran istifadə etmədiyimiz üçün bu Arduino kodu bluetooth ilə idarə olunur. Beləliklə, kod loop () funksiyasındakı bluetooth mesajları vasitəsilə idarə olunur.
#define r 6 #define g 11 #include
SoftwareSerial mySerial (10, 11); // RX, TX
#qəzəblənmişLength 4 təyin edin
#düşənləri təyin et Uzunluğu 3 #xoşbəxtLengthləri təyin et 4 #TelefonUzunluğunu 13 -ü təyin et #Danışıqları Uzunluğu təyin et 5 #Yürüyüşləri təyin etLength 4 #Define gəzməyiOutLength 4 #Dalğalanmanı Uzunluğu 6
bool düyməsi basıldı;
int currentMillis; int əvvəlkiMillis;
int animasiya1Delay;
int animation2Delay; int animation3Delay; int animation4Delay;
bool animasiya1Done = yalan;
bool animation2Done = yalan; bool animation3Done = yalan; bool animation4Done = yalan; bool animasiya5Done = yalan;
bool blockLight = yanlış;
bool lightRed = doğru;
int currentAnimationDelay;
boş quraşdırma () {
// quraşdırma kodunuzu bura qoyun, bir dəfə işləsin: pinMode (r, ÇIXIŞ); pinMode (g, ÇIXIŞ);
Serial.begin (9600);
mySerial.begin (38400); Serial.setTimeout (25); buttonPressed = yalan; currentMillis = 0; əvvəlkiMillis = 0;
animasiya1Delay = gəzinti uzunluğu * 1000;
animation2Delay = wavingLength * 1000; animation3Delay = happyLength * 1000; animation4Delay = walkingOutLength * 1000;
// currentAnimationDelay = animation1Delay * 1000;
lightRed = doğru; }
boşluq döngəsi () {
// gecikmə (20);
// əsas kodunuzu bura qoyun, təkrar işləsin: işarəsiz uzun currentMillis = millis (); if (buttonPressed == true) {if (animation1Done == false) {if (currentMillis - previousMillis> animation1Delay) {Serial.println ("0"); əvvəlkiMillis = cariMillis; animasiya1Done = doğru; }} başqa if (animation2Done == false və animation1Done == true) {if (currentMillis - previousMillis> animation2Delay) {Serial.println ("1"); əvvəlkiMillis = cariMillis; animation2Done = doğru; }} başqa if (animation3Done == yalan və animation2Done == doğru) {if (currentMillis - previousMillis> animation3Delay) {Serial.println ("2"); //Serial.println("səs: yaşıl "); əvvəlkiMillis = cariMillis; animation3Done = doğru; lightRed = yalan; }} başqa if (animation4Done == yalan və animation3Done == doğru) {if (currentMillis - previousMillis> animation4Delay) {previousMillis = currentMillis; animasiya4Done = doğru; Serial.println ("FLSH"); }}}
if (Serial.available ()) {
String str = Serial.readString (); əgər (str == "CMD: BUTTON_PRESSED") {
animasiya1Done = yalan;
animation2Done = yalan; animation3Done = yalan; animasiya4Done = yalan; animasiya5Done = yalan;
animasiya1Delay = gəzinti uzunluğu * 1000;
animation2Delay = wavingLength * 1000; animation3Delay = happyLength * 1000; animation4Delay = walkingOutLength * 1000;
// currentAnimationDelay = animation1Delay * 1000;
lightRed = doğru; Serial.println ("3"); buttonPressed = doğru; əvvəlkiMillis = cariMillis; }
əgər (str == "QIRMIZI") {
blockLight = yalan; lightRed = doğru; }
əgər (str == "YAŞIL") {
blockLight = yalan; lightRed = yalan; }
əgər (str == "İŞIQ: YAŞIL: KAPALI") {
blockLight = doğru; analogWrite (g, 255); } if (str == "LIGHT: GREEN: ON") {blockLight = doğru; analogWrite (g, 0); } //Serial.println(str); }
əgər (blockLight == yalan) {
əgər (lightRed == doğru) {
analogWrite (r, 0); analogWrite (g, 255); } if (lightRed == false) {analogWrite (r, 255); analogWrite (g, 0); }}}