Përshëndetje për të gjithë ata që bëjnë vetë! Sot do të shqyrtojmë një nga opsionet e shumta për përdorimin e një shiriti LED WS2812B në LED të adresueshëm RGB. Shirita të tillë (si dhe LED-të e montuar veçmas WS2812B) mund të përdoren për të ndriçuar sfondin "Ambilight" të monitorëve të kompjuterëve dhe televizorëve, ndriçimin dinamik në një makinë, një foto, një kornizë fotografie, një akuarium etj. Ato përdoren gjerësisht në hartimin e çdo ambienti, në formën e ndriçimeve të Vitit të Ri ose shfaqjeve të dritës. Përdorimi i shiritit LED të tipit WS2812B bën të mundur marrjen e një numri të madh projektesh interesante.
LED WS2812B është një LED RGB i ngulitur në të njëjtin strehë me çipin WS2801.
Vetë LED WS2812B është një element SMD i krijuar për montim në sipërfaqe. Brenda, LED përbëhet nga kristale me dritë të kuqe (e kuqe), dritë jeshile (jeshile) dhe dritë blu (blu) në një paketë. Me këtë LED, ju mund të merrni një shumëllojshmëri të gjerë të nuancave të ngjyrave të rrezatimit të dritës.
RGB LED kontrollohet përmes bordit të mikrokontrolluesit Arduino.
Kam marrë një shirit LED WS2812B nga kinezët, është një segment 1 metër i gjatë me 144 LED. Prej kohësh kam dashur të provoj eksperimente të ndryshme. Me ndihmën e bibliotekave për Arduino - Adafruit Neopixel dhe Fast led, mund të merrni shumë efekte ndriçimi shumë të pazakonta. Por më pas vendosa të përpiqem të bëj sinjale kthese dinamike për një makinë në të ashtuquajturin "stili Audi". Nuk e kam vënë ende në praktikë këtë skemë (si do ta marrin gibbddeshnikët tanë?), por efekti doli në të jetë shumë tërheqëse.
Pllaka Arduino Uno shërben si një kontrollues për kontrollin e shiritit LED, mund të përdoren pllaka të tjera - Arduino Nano, Arduino Pro mini).
Shikoni të gjithë procesin në video:
Lista e mjeteve dhe materialeve.
-Pllaka Arduino Uno;
- bordi zbritës 12V \ 5V në 3A;
- rezistenca 100Kom-4pc;
-rezistenca 47Kom-4pc;
- rezistenca 500 Ohm-1pc;
-butonat (për të simuluar përfshirjen e sinjaleve) -4 copë;
-dërrasë për bukë
-kaçavidë;
furnizimi me energji laboratorike
- Makine per ngjitjen e metalit;
- kambrik;
- testues.
- telat lidhës.
Hapi i parë. Asambleja e skemës.
Unë mblodha qarkun duke përdorur një tabelë (bradboard). Rezistorët e lidhur me hyrjet dixhitale Arduino nevojiten për të kthyer sinjalet hyrëse të makinës nga 12 në 5 volt. Rezistencë 500 ohm për të mbrojtur linjën e kontrollit të shiritit LED WS2812B.
Foto e bordit
Si një konvertues nga 12V në 5V, përdora një tabelë të gatshme nga Aliexpress. Mund të përdoret çdo konvertues me parametra të përshtatshëm. Konvertuesi nevojitet për furnizim të qëndrueshëm me energji elektrike të Arduino dhe shiritit LED WS2812B.
Hapi dy. Programimi Arduino.
Hyrja dixhitale e tabelës Arduino nr. 3,4 përdoret për të kthyer kthesat majtas dhe djathtas. Pini numër 5 - ndizni dritën e frenave, kunja numër 6 - ndizni anën e pasme. Pini numër 8 - shiriti i sinjalit të kontrollit WS2812B.
Në Arduino IDE, ngarkoni skicën (lidhja më lart). Dy opsione skica - një për pjesën e përparme të makinës, tjetra për pjesën e pasme. Përdorni çfarëdo që ju nevojitet. Në fillim të skicës, mund të vendosni numrin e LED-ve që ju nevojiten. Ju gjithashtu mund të rregulloni shpejtësinë e sinjaleve të kthesës sipas makinës suaj. Ju gjithashtu mund të ndryshoni ndriçimin e LED-ve me parametrin strip.Color(103,31,0) - ndryshoni dy shifrat e para nga 0 në 255. Kjo do të thotë, mund të eksperimentoni pak.
Kur shtypni butonin e dëshiruar, ne japim një sinjal për të aktivizuar parametrin e dëshiruar. Me montimin e saktë të qarkut, zakonisht fillon të punojë menjëherë.
Fotografi në vazhdim.
Një eksperiment i mirë doli me dizajnin e kësaj fundjave. Ishte interesante
Konsideroni krijimin e një sinjali rrotullues që funksionon si në një Audi, duke përdorur shembullin e një feneri nga një makinë Renault Clio. Le të bëjmë sinjale kthese dhe DRL në një pajisje.
Çfarë ju nevojitet për këtë: shirit LED i përbërë nga LED ws2812b Nano kontrollues Arduino(mund të përdoret në çdo formë tjetër) Karikues makinash për telefona celularë me dalje USB. Meqenëse kontrolluesi Arduino ka nevojë për një tension prej 5V, ne do ta përdorim këtë karikues si një konvertues tensioni nga 12V në 5V. Stabilizues i tensionit për 5V KR142EN5V (KREN5V) ose çdo analog tjetër të importuar. 3 rezistorë 10 kΩ si rezistencë tërheqëse.
Diagrami i lidhjes
Kontrolluesi arduino duhet të lidhet me rrjetin e makinës nëpërmjet një konverteri 12V -> 5V në mënyrë që voltazhi në qark të vijë nga ndezja e "ndezjes". Me stabilizuesin e tensionit KREN5V duhet të lidhni telin pozitiv nga sinjali aktual i kthesës. Ky artikull diskuton lidhjen dhe firmuerin e vetëm një sinjali kthese, për të bërë sinjalin e dytë të kthesës, duhet të lidhni në mënyrë të ngjashme shiritin e dytë LED me çdo dalje dixhitale falas Arduino (për shembull, 7), dhe gjithashtu të shtoni kodin për atë në firmware sipas shembullit tonë.
firmware i kontrolluesit
Për të punuar me LED pixel, do t'ju duhet një bibliotekë
#përfshi
// përfshijnë bibliotekën
Shiriti Adafruit_NeoPixel = Adafruit_NeoPixel(22, 8, NEO_GRB + NEO_KHZ800);
int t,t1,t2,t3,t4,p2,p1 = 0;// ndryshorja e kohës
konfigurimi i zbrazët ()(
pinMode (2, INPUT);
pinMode (3, INPUT);
pinMode (4, INPUT);
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (4, LOW);strip.begin();
strip.show();}
void loop() (
nëse (DixhitalLeximi (2) == LOW) ( //Nëse sinjali i kthesës është i fikur
për (int i = 0; i< 23; i++) {
strip.setPixelColor(i, strip.Color(255,255,255)); // R=255, G=255, B=255 - ngjyra e bardhë e LED, ndizni dritat kur ndizni
}
strip.show();
}nëse ((DixhitalLeximi (2) == I LARTË) & (t == 1)) ( // kontrolloni nëse sinjali i kthesës është i ndezur
për (int i = 0; i< 23; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // shuaj të gjitha diodat
}
strip.show();
për(int k = 0; k< 3; k++){ // цикл до трех - сигнал «перестроения» , при кратковременном включении мигает 3 раза,për (int i = 0; i< 23; i++){
nëse (DixhitalLeximi(2) == LARTË) (k = 0;) // nëse marrim një sinjal tjetër pozitiv ndërsa sinjali i kthesës pulson, atëherë rivendosni numëruesin në mënyrë që sinjali i kthesës të pulsojë të paktën 3 herë të tjera
strip.setPixelColor(i, strip.Color(255, 69, 0)); // R=255, G=69, B=0 - Ngjyra LEDvonesë ((t4)/22);
strip.show();}
nëse (DigitalRead(2) == LARTË) (t4=t4+20;) // nëse të gjitha diodat janë ndezur me ngjyrë të verdhë, por sinjali nga stafeta është ende i ndezur, atëherë ne rrisim kohën e djegies
nëse (DigitalRead(2) == LOW) (t4=t4-20;) // nëse të gjitha diodat janë ndezur në të verdhë, por sinjali nga stafeta është ende i ndezur, atëherë ne rrisim kohën e djegiespër (int i = 0; i< 23; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - Ngjyra LED
vonesë ((t3)/22);
strip.show();}
nëse ((lexim dixhital (2) == ULËT)) (t3=t3+20;)
nëse ((lexim dixhital (2) == I LARTË)) (t3=t3-20;)
}nëse ((lexo dixhitale (2) == LARTË) & (t == 0)) ( // kontrolloni nëse sinjali i kthesës është i ndezur
t1 = millis(); // mbani mend në cilën orë është ndezur
për (int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(255, 69, 0)); // herën e parë që ndizni sinjalin e kthesës, ne i ndezim të gjitha diodat në të verdhë
}
strip.show();
ndërsa (lexim dixhital (2) == I LARTË) ()
t2 = millis(); // mbani mend se në cilën orë u fikur sinjali i kthesës
t4=t2-t1;për (int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // shuaj diodat kur humbet sinjali nga releja e kthesës
}
strip.show();
ndërsa (lexim dixhital (2) == ULËT) (
nëse ((millis ()-t2)> 2000) (ndërprerje;)
}
nëse ((millis()-t2)<2000) {
t3 = millis()-t2; // koha për të cilën fiken sinjalet e drejtimit
t = 1; // flamur, ne e dimë se vlera e kohës është ruajtur.
}
}nëse (DixhitalLeximi (4) == I LARTË) ( //sinjalet speciale
për(int j = 0; j< 16; j++) {
për (int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(255, 0, 0)); // R=255, G=0, B=0 - Ngjyra LED
}
strip.show();
vonesë (20);
për (int i = 0; i< 22; i++){
}
strip.show();
vonesë (20);
}për(int j = 0; j< 16; j++) {
për (int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 255)); // R=0, G=0, B=255 - Ngjyra LED
}
strip.show();
vonesë (20);
për (int i = 0; i< 22; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - Ngjyra LED
}
strip.show();
vonesë (20);
}
}nëse (DixhitalLeximi (3) == I LARTË) ( //strobe
për(int j = 0; j< 24; j++) {
për (int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(255, 255, 255)); // R=255, G=255, B=255 - Ngjyra LED
}
strip.show();vonesë (15);
për (int i = 0; i< 22; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - Ngjyra LED
}
strip.show();
vonesë (15);
}
vonesë (500);
Bëni të njëjtën gjë për sinjalin e dytë të kthesës.
Video se si funksionon feneri ynë
Projektuesi i dritave të drejtimit nga Aliexpress është një tabelë e qarkut të printuar dhe një grup përbërësish radio. E tëra çfarë ju duhet të bëni është të bashkoni komponentët në tabelë.
Por prej saj mund të merrni efekte më interesante të dritave të drejtimit. Për shembull, për sinjalet e kthesës së makinave ose në një sinjal ndalimi ose thjesht në kurora për pushime.
Ky qark mund të funksionojë në rangun e tensionit të furnizimit prej 3-15 Volt. Gjeneratori i pulsit është mbledhur në një çip NE555, më pas pulset futen në një numërues dhjetor me një dekoder - një çip CD4017 (ose K561IE8), në daljet e të cilit LED janë të lidhura përmes rezistorëve kufizues të rrymës.
Shpejtësia e kalimit të dritave të drejtimit rregullohet nga një rezistencë akorduese. Shtoni një qark me rrokullisje dhe ndërprerës të transistorit në dalje. Nuk kërkohet programim, etj. Si rezultat, mund të merren efekte më interesante të ndriçimit të dritave të drejtimit. Duhet të bëni një tabelë tjetër qarku të printuar me këmbëza K561TM2 dhe çelësat e ndezjes në KT815. Një impuls nga çdo dalje K561IE8 futet në hyrjen e këmbëzës sipas parimit "shul", domethënë, sinjali në daljen e këmbëzës mbetet konstant derisa pulsi i rivendosjes të arrijë nga pini 11 i çipit CD4017 (K561IE8). 9 kanale janë të ndezura për cikël.
Të gjithë ata që panë një makinë pak a shumë moderne dhe jo herën e dytë, dhe nëse ishte ende çështje drejtimi, kanë vërejtur prej kohësh për veten e tyre një nga opsionet e dobishme ... Njerëzit e quajnë atë një sinjal kthese dembel ose një i sjellshëm sinjali i kthesës. I gjithë thelbi i tij zbret në faktin se kur kthehet djathtas ose majtas, shoferi vetëm një herë prek levën e sinjalit të kthesës, duke mos e rregulluar atë. Kjo do të thotë, ai thjesht lejon që qarqet e treguesit të kthesës të funksionojnë, por nuk e ndez të njëjtin çelës. Si rezultat, pasi të lëshohet leva, treguesit e drejtimit funksionojnë 3-4 herë të tjera, dhe shoferi në këtë kohë tashmë mund të bëjë biznesin e tij, domethënë të dorëzohet plotësisht në rrugë. Opsioni është shumë i dobishëm kur duhet të ndërroni korsi. Në fund të fundit, kur leva e treguesit të drejtimit është plotësisht e ndezur, mbyllja automatike nuk do të ndodhë, për shkak të këndit të parëndësishëm të rrotullimit të timonit, që do të thotë se do të jetë e nevojshme të shtyhet përpara dhe mbrapa me vetë treguesin ose të mbështetet vazhdimisht. me dorën tuaj në prag të ndezjes për të simuluar funksionimin e treguesit të drejtimit. Dhe nëse ekziston një opsion i tillë, atëherë thjesht preku pak levën dhe harroi. Në përgjithësi, ne mendojmë se thelbi i punës është zbuluar plotësisht, por tani vlen të përmendet zbatimi i mundshëm i një opsioni të tillë në makinën tuaj.
Cilat qarqe elektrike janë të përshtatshme për një sinjal rrotullues të sjellshëm në Arduino
Para se të futeni në të gjitha problemet serioze në lidhje me prodhimin e një sinjali kthese të sjellshëm, duhet të kuptoni se për cilat skema të lidhjes elektrike është i përshtatshëm pa modifikuar qarkun elektrik në makinë.
Këtu na paraqiten dy opsione kryesore, të ndryshme në parim. E para është kur sinjalet e kthesës ndizen kur lidhen si ngarkesë. Kjo do të thotë, përfshirja ndodh për shkak të ndërrimit të qarkut të llambave të treguesit të drejtimit, në të cilin ndodhet vetë leva e treguesit të drejtimit, është ai që mbyll qarkun, pas së cilës ndodh operimi. Në këtë rast, nuk do të funksionojë të përdorim opsionin tonë, sepse kur leva hap qarkun me llamba, ne çaktivizojmë menjëherë mundësinë e treguesit të dritës, edhe nëse një sinjal vjen në vetë levë, thjesht nuk do të shkojë më tej.
Opsioni i dytë është i yni, kur ka sinjale kontrolli dhe ka sinjale të fuqisë dalëse. Në këtë rast, në vend të një stafetë të rregullt, mund të vendosni vetëm qarkun që ne dëshirojmë t'ju sjellim në vëmendje.
Moduli i fuqisë rele që mund të blihet në internet për të kontrolluar ngarkesën e energjisë
Skica dhe diagrami i një sinjali kthese dembel (të sjellshëm) në Arduino
Pra, përdorimi i Arduino si një njësi kokë si sinjale kthese dembel mund të argumentohet, pasi kjo nuk është gjithashtu një zgjidhje ideale, e cila ka të metat e saj. Le të themi se do të jetë e nevojshme të kemi fuqi konstante pasi ndezja të jetë ndezur, për të siguruar shpejtësinë, do të jetë e nevojshme të lidhni qarqet e energjisë. Në të njëjtën kohë, vetë rripi nga komponentët e panevojshëm të radios është, në parim, i padobishëm këtu, sepse në këtë rast thjesht mund të programoni mikrokontrolluesin dhe ta përdorni vetëm atë. Por ky minus është gjithashtu një plus, sepse kushdo që e ka mund të përballojë të programojë Arduino, dhe për mikrokontrolluesit do t'ju duhet edhe një programues.
Thjesht shkrimi i një programi do të jetë një nga detyrat më të vështira. Këtu, një fillestar do të duhet të kalojë më shumë se një orë nga koha e tij e lirë dhe të studiojë funksionimin e algoritmeve, por për fat të mirë ekziston interneti dhe ne jemi. Pra, këtu është skica.
int switchPinR=8; int switchPinL=7; intledPinR=11; intledPinL=12; boolean ledOn = false; int i=0; intz=0; void setup() ( // vendosni kodin tuaj të konfigurimit këtu, për të ekzekutuar një herë: pinMode(switchPinR, INPUT); pinMode(switchPinL, INPUT); pinMode(ledPinR, OUTPUT); pinMode(ledPinL, OUTPUT); Serial.begin(9600 ); ) void loop() ( // vendosni kodin tuaj kryesor këtu, që të ekzekutohet në mënyrë të përsëritur: //2 etiketa: if (DixhitalLeximi(switchPinR) == LARTË &&DixhitalLeximi(switchPinL) == LARTË) (DixhitalWrite(ledPinR, LARTË) ; dixhital Shkruaj (ledPinL, LARTË); i=0; ndërsa (i<7) { ledOn = !ledOn; digitalWrite(ledPinR, ledOn); digitalWrite(ledPinL, ledOn); delay(400); i++; z++; if (digitalRead(switchPinL) == LOW && digitalRead(switchPinR) == LOW && z>=7) ( break; ) ) ) other ( digitalWrite(ledPinR, LOW); digitalWrite(ledPinL, LOW); z=0; ) // Lloko alarmin nëse (DigitalRead(switchPinR) == LARTË && DigitalRead(switchPinL) = = LARTË) (goto label;) //Shenjal kthese djathtas. nëse (DixhitalRead(switchPinR) == LARTË) (DixhitalWrite(ledPinR, HIGH); i=0; ndërsa (i<7) { ledOn = !ledOn; digitalWrite(ledPinR, ledOn); delay(400); i++; z++; if (digitalRead(switchPinR) == LOW && z>=7) ( break; ) ) ) other ( digitalWrite (ledPinR, LOW); z=0; ) //Sinjal kthese majtas. nëse (DixhitalLeximi(SwitchPinL) == LARTË) (DixhitalWrite(ledPinL, HIGH); i=0; ndërsa (i<7) { ledOn = !ledOn; digitalWrite(ledPinL, ledOn); delay(400); i++; z++; if (digitalRead(switchPinL) == LOW && z>=7) ( thyej; ) ) ) tjetër (DixhitalWrite(ledPinL, LOW); z=0;))
Shkurtimisht, mund të përmbledhim se skica ka 2 hyrje dhe 2 dalje. Në të njëjtën kohë, në hyrjen e një pozitiv, domethënë një nivel të lartë sinjali në hyrje (8.7), marrim një numër të caktuar ndezjesh (z ose i) në daljen përkatëse (11.12). Me pak fjalë, diçka e tillë. Kjo do të thotë, nëse dëshironi të ndryshoni diçka në skicë në lidhje me numrin e ndezjeve dhe daljeve të hyrjeve, atëherë kushtojini vëmendje këtyre variablave. Nëse do të jetë e nevojshme të ndryshoni gjatësinë e pulsimeve, atëherë vëmendja juaj duhet t'i kushtohet funksionit të vonesës.
Një veçori tjetër e programit është një dalje disi e pazakontë alarmi. Së pari, përpunohen treguesit majtas dhe djathtas, pastaj ndizet alarmi i dritës së urgjencës. Kjo për faktin se mund të ndizet vetëm nëse hyrja është e lartë në të njëjtën kohë në hyrjet 8 dhe 7. Dhe ky kusht do të plotësohet vetëm për ciklin e dytë, sepse shtypja e dy butonave në të njëjtën kohë nuk do të funksionojë. vetëm fizikisht. Shpejtësia e mikrokontrolluesit do t'ju lejojë të lexoni më shpejt daljen e lartë nga një buton dhe të vendosni që ky është ende një kusht që sinjali i kthesës të funksionojë dhe jo një alarm. Edhe pse nuk duhet të shqetësoheni për këtë, përveç se të thoni faleminderit në rrugë do të jetë problematike.
Karakteristikat e lidhjes së një sinjali kthese dembel (të sjellshëm) me Arduino në një makinë
Nuk duhet të përdorni pinin 13 si dalje, pasi sa herë që ndizet dhe fiket energjia, treguesit që do të lidhen me këtë dalje mund të dridhen.
Kur kaloni nga sinjalet e kontrollit në sinjalet e energjisë, përdorni blloqet e duhura të blera në internet ose të montuara nga ju. Ne kemi folur tashmë për blloqe të tilla - module.
Kur merrni sinjalin 1 nga një tension prej 12 volt, vendosni një rezistencë 10 kΩ përpara hyrjes.
Këto janë në fakt të gjitha fjalët ndarëse kur bëni një sinjalizim kthesash dembel për një makinë në një mikrokontrollues Arduino, dhe tani pothuajse e njëjta gjë në video ...