marți, 21 aprilie 2020

Lumini stroboscopice fara comanda "delay" (2)

   Am facut mici modificari la programul luminilor stroboscopice pentru a avea 10 pasi, nu 8 ca inainte, de aseemenea am schimbat si ledul galben din articolul anterior, cu unul albastru, pentru a simula luminile politiei.
    Schema este, bineinteles identica: 
    Folosim aceeasi metoda ca in articolul anterior, care a fost prezentata mai bine in articolul Clipire led fara comanda "delay" adica ne folosim, in primul rand de functia millis(), care indica in milisecunde timpul de la pornirea microcontrorului de pe placa Arduino. Creem o variabila care va fi un numar mic, daca impartim millis() la 1000 aflam timpul in secunde, daca impartim la un numar mic sunt parti de secunda.
   Pentru a avea 10 pasi de aprindere, ne folosim de calculul restului unei impartiri la numarul de pasi, daca avem 10 pasi, ca in programul stroboscopic_wo_delay2.ino, restul poate fi 0, 1, 2, 3, 4, 5, 6, 7, 8 sau 9.
- pasul 1: restul e 1, adica stare%10 = 1, exemplu: 21%10 = 1, se aprinde ledul 1
- pasul 2: restul e 2, adica stare%10 = 2, ambele leduri stinse
- pasul 3: restul e 3, adica stare%10 = 3, se aprinde ledul 1
 - pasul 4: restul e 4, adica stare%10 = 4, ambele leduri stinse
 - pasul 5: restul e 5, adica stare%10 = 5, ambele leduri stinse
- pasul 6: restul e 6, adica stare%10 = 6, se aprinde ledul 2
- pasul 7: restul e 7, adica stare%10 = 7, ambele leduri stinse
- pasul 8: restul e 8, adica stare%10 = 8, se aprinde ledul 2
- pasul 9: restul e 9, adica stare%10 = 9, ambele leduri stinse
 - pasul 0: restul e 0, adica stare%10 = 0, ambele leduri stinse
    In filmuletele urmatoare s-a folosit si programul stroboscopic_wo_delay.ino. cel in 8 pasi prezentat in articolul anterior:
lumini stroboscopice (2)
stroboscopic lights (2)


Lumini stroboscopice fara comanda "delay"

    In continuarea articolului Clipire led fara comanda "delay" am ales sa prezint lumini stroboscopice (gen politie, ambulanta, pompieri, etc) cu acelasi sistem de a ne folosi de timpul de cand a pornit microcontrolerul, ma refer la functie millis().
    Schema este foarte simpla;
   Am ales 8 timpi in programul (sketk-ul) stroboscopic_wo_delay.ino:
1) stare%8 = 1 (restul impartirii la 8), de exemplu 9%8 = 1
2) stare%8 = 2, de exemplu 10%8 = 2
3) stare%8 = 3
4) stare%8 = 4
5) stare%8 = 5
6) stare%8 = 6
7) stare%8 = 7
8) stare%8 = 0
    Cem mai bine se vede in filmuletele de mai jos:
stroboscopic lights (lumini stroboscopice)
lumini striboscopice
stroboscopic lights


luni, 20 aprilie 2020

Clipire led fara comanda "delay"

   O solutie mai simpla de aprinde led cu intermitenta sau a afisa un text cu intermitenta se poate face cu functia millis(), dar nu cum e prezentat in exemplul aplicatiei Arduino IDE,
 ci mult mai simplu.
    Ne folosim de functia millis() care numara numarul de milisecunde de cand e pornita placa Arduino (de fapt microcontrolerul de pe ea). O impatim la 1000, de exemplu sa stim in secunde. Daca secundele sunt numar impar aprindem led-ul, iar daca e numar par il stingem.
   Schema este simpla
   Am doua versiuni de program:
- mai multe linii, blink_wo_delay.ino
- mai putine linii de cod, blink_wo_delay2.ino
    Am facut si 2 filmulete:
- cu comentarii in romana
- cu comentarii in engleza


duminică, 19 aprilie 2020

Indicare durata apasare buton (apasare scurta sau lunga)

   Anul trecut am postat un articol similar, numit Masurare timpi apasare butoane folosind functia millis().
   In general, pot citi starea unui buton si stiu ca a fost apasat sau nu, dar pentru anumite aplicatii e bine ca sa nu se schimbe ceva daca am apasat din greseala butonul, ci doar daca apas un timp destul de lung, de exemplu 3 secunde.
   Am realizat repede un montaj care are un buton fara retinere (pe breadboard sunt 2 butoane, dar ma folosesc doar de unul) si 2 leduri, fiecare inseriate cu cate o rezistenta de 220ohmi fiecare, pentru limitare curent prin ele si prin pinii microcontrolerului de pe placa.
   Un led galben indica faptul ca butonul este apasat (aprindere stroboscopica, doar pentru efect placut), iar ledul rosu se aprinde doar daca butnul a fost apasat suficient de mult (3 secunde).
   Schema este foarte simpla:
   Din program (pushtime1button.ino) pinul alocat butonului este in starea HIGH, deoarece am activat rezistenta interna de pull-up (de cca 10kOhmi).
   Pentru a fi mai usor de inteles ce am scris mai sus, va recomand vizionarea unuia din cele 2 filmulete:
- cu comentarii in romana
- cu comentarii in engleza:

sâmbătă, 18 aprilie 2020

Masurare consum afisaj de 32x8 leduri controlate cu MAX7219

    Pentru masurarea consumului am ales ceasul animat complex cu date de pe net, care are doar o placa de dezvoltare WeMos D1 Mini cu ESP8266 si afisajul cu 32x8 leduri, compus din 4 module de 8x8 leduri controlate fiecare cu un MAX7219.
   Modulul de 8x8 leduri are o schema de genul:
si dupa cate se constata, comanda se poate face doar prin multiplexare, deci consumul este destul de redus, mai ales ca se controleaza si intensitatea, nu e folosita cea maxima.
    Intai am scos afisajulul de pe modul pentru a masura rezistenta de regleaza consumul:
   Pentru a fi mai clara valoarea am folosit un microscop cu afisaj:
si am si masurat-o valoarea inscrisa de 103 corespunde valorii de 10kohmi dupa cum se poate verifica si cu un calcultor online:
   Afisajul ceasului meu este alimentat la 3,3V, dar masuratorile le-am facut si la 5V.
   Am ales ceasul asta pentru ca el poate fi controlatat de pe o pagina locala web si imi e usor sa modific intensitatea.
  Am selectat intensitatea la 0, cea folosita uzual pe timp de noapte sau cand e innorat afara si consumul mediu este de 16mA la 3,3V si 28mA la 5V:
  Am selectat intensitatea la 4, cea folosita uzual pe timp de zi foarte luminoasa si consumul mediu este de 46mA la 3,3V si 66-73mA la 5V:

vineri, 17 aprilie 2020

Detectie bidirectionala cu senzori ultrasonici

   In vederea realizarii unui proiect care necesita detectia unei persoane in apropierea unei incinte cu 2 intrari, m-am gandit sa ma "joc" cu 2 senzori ultrasonici HC-SR04 conectati la o placa Arduino.
   Acum 7 ani am testat un senzor ultrasonic si am descri si totul in articolul Senzorul ultrasonic de distanta HC-SR04 si Arduino.
   Schema actuala este simpla:
   Programul testat si rescris este bidirectional_detection_ultrasonic.ino si, in mare, Arduino masoara distantele cu cele 2 senzori si daca cel putin una e mai mica de 25cm (atat am pus eu de teste), se aprinde ledul pentru cca 3 secunde.
    Am facut si niste filmulete demonstrative:
- in romana:
- in engleza: