joi, 22 martie 2018

Comenzi, date de la tastatura calculatorului, executate de Arduino

   Un mod interesant de executare a unor comenzi de catre o placa Arduino este acela cand acele comenzi se dau de la tastatura calculatorului de care este legata placa.
   Am realizat un test in care ma folosesc de ledul intern de pe o placa Arduiono Uno (cel pus la D13). Prin comenzi pot controla numarul de clipiri, timpii dintre clipiri si pauza intre "salva" de clipiri ale ledului.
   La pornire, ledul se aprinde o data la 1 secunda, timpul cat sta aprins este de 100ms:
   Daca scriu comanda @n3 voi avea 3 aprinderi de 100ms cu stingeri de 100ms si pauza intre "salve" de 1 secunda
    Daca scriu comanda @n3 voi avea 3 aprinderi de 300ms cu stingeri de 300ms si pauza intre "salve" de 1 secunda
    Daca scriu comanda @n3 voi avea 3 aprinderi de 300ms cu stingeri de 300ms si pauza intre "salve" de 3 secunde
   Programul (sketck-ul), care face tot posibil, se numeste serial_control_flashes_0d.ino si, cel mai bine se vede in filmuletele urmatoare:
comenzi de la tastatura PC catre Arduino prin USB
control Arduino thru USB commands
Arduino controlled thru commanda from PC using USB

vineri, 16 martie 2018

Corectare eroare de compilare 'prog_uchar' does not name a type

   Pentru cei ce folosesc programele Arduino IDE mai noi (verstiuni >1.5.6) apar erori de compilare cand se foloseste PROGMEM, care stocheaza datele in memoria flash in loc de SRAM. Pentru detalii despre PROGMEM, puteti citi articolul de la www.arduino.cc.
  Eroare aparuta este 'prog_uchar' does not name a type si se poate elimina daca se inlocuieste PROGMEM prog_uchar cu PROGMEM const unsigned char.

 PROGMEM l-am folosit, mai ales la afisajele matricele comandate cu MAX7219, deci acolo trebuie sa faceti modificarea...

luni, 12 martie 2018

Inel 16 leduri multicolore controlabile

    Am intrat in posesia, pentru teste, a unui "inel 16 neopixeli", achizitionat de la Ardushop.ro.
   El are 4 zone de conectare +5V si GND pentru alimentare DI pentru comanda si D0 pentru legarea in serie a altui inel.
   Comanda am facut-o similar ca in articolul Benzi de leduri multicolore cu control independent pentru fiecare led (ca si atunci, nu am mai pus rezistenta de la pinul D6) si am folosit libraria Adafruit_Neopixel:
   Prima data am folosit exemplul STANDTEST modificand la 16 numarul de leduri

si rezultatul se vede in filmuletele urmatoare:


   Pentru o functionare independenta, se alimenteaza si placa Arduino la 5V-ul de la inelul de leduri
sau se foloseste un modul stabilizator in comutatie reglat la 5V pentru alimentarea inelului si se ia tensiunea din stabilizator de 9V din jack...
 daca alimentati din ramura de 5V de pe placa Arduino, in cateva minute se va arde stabilizatorul de tensiune de pe placa si ... 😈
   La teste, am folsit o sursa serioasa
   Ulterior, am testat si exemplul BUTTONCYCLER al librariei. Am facut mici modificari la program si am obtinut efectele din filmuletul inel 16 leduri multicolore (3)

Pentru a trece la alta animatie trebuie sa avem un buton fara retinere intre D2 si GND (sau ca mine atingeti cu un fir ce vine de la D2 la masa / GND).

Control temperatura incinta (sera) prin comanda 2 ferestre electrice

   Dupa cum am prezentat in 2 articole anterioarte (1 si 2), putem comanda sensul de rotatie al unui motor cu 2 relee, asa ca daca am o placa cu 4 relee pot comanda 2 motoare, care pot actiona ferestre electrice pentru o sera, de exemplu.
   Pentru inceput, am realizat doar un program de test pentru comanda pe rand a celor 4 relee, comanda fiind cu logica negativa (inversa), vezi programul (sketch-ul) 4relaysmodule_test.ino.
  Schema de test este urmatoarea (desenata din 2 parti, partea de comanda si cea de forta, unde sunt desenate contactele celor 4 relee):
    De fapt, eu am intercalate pe rigleta si limitoatoare (doar ca sunt puse strapuri - sarme, sa fie circuitul inchis, fiind cu contact normal inchis, dar nu am gasit un simbol mai ok si am lasat ca un intrerupator):
   In repaus, motorul nu este alimentat:
daca este comandat primul releu, motorul se invarte intr-un semn, dupa cum se vede cu aparatul de masura, 
iar daca este comandat al doilea releu, motorul s einvarte in sens opus, dupa cum s evede cu aparatul de masura
   Am realizat si 2 filmulete, care prezinta cum functionaeaza programul de test (4relaysmodule_test.ino)

   Am adaugat si un modul cu senzor DS18B20 pentru a realizat partea pentru care a fost proiectat tot ansamblul, de a deschide ferestrele la depasirea unei temperaturi si inchiderea lor cand temperatura scada, deschiderea se face pe rand, deoarece alimentarea se face dintr-un acumulator auto si curentul ar fi prea mare:
   Sketch-ul, care face ce am zis mai sus, este 2windows_temperature_control_1.ino si functionarea se face cum apare in filmuletele:
  Ulterior, am adaugat si un afisaj pe i2c, pentru a vedeam temperatura si care sunt comenzile date de Arduino, deoarece nu am monitorizare seriala la indemana 😄
  Sketch-ul devine 2windows_temperature_control_2.ino si functionarea se vede in filmuletele urmatoare:

31.05.2018
   Schema a fost modificata pentru a functiona cu motoare de stergator de parbriz ce au minusul legat la masa..
   Am realizat teste de functionale a partii de comanda, fara placa Arduino si fara comutatoare, dupa cum se vede in filmuletul automatizare sera
07.06.2018
   Dupa  ce am costatat ca placile chinezesti pot avea probleme cu iesirile (nu toate "scot" 5V ci un 3,5V cand sunt in 1 logic), am schimbat pinii de comanda
   Acum exista si un comutator, cu 3 pozitii (deschis, automat, inchis), care are are montate  rezistente (capat 1 - rezistenta 1k - mijloc - rezistenta 1k - GND) ca divizor rezisitiv (daca comutatorul este pe mijloc tensiunea este la jumate - 2,5V, la o extremitate e 5V, iar in celalalt capat 0V.

    Am montat automatul in sera si am facut cateva teste, dupa cum se vede in filmuletul test real automatizare deschidere ferestre sera, care foloseste programul 2windows_temperature_control_4b1.ino
      Am scris separat articolul Control temperatura incinta (sera) prin comanda 2 ferestre electrice (partea a 2-a) despre aceste modificari.

miercuri, 7 martie 2018

Sistem de comanda automata sau manuala sens rotatie motor de c.c. (2)

   Fata de articolul anterior, o sa folosesc pentru comanda motorului module cu optocuploare, care se gasesc la magazinele cu componente Arduino, de genul celui din imaginea de mai joc, care are 4 relee:
care se comanda cu logica negativa (0V comanda aprinderea ledului corespunzator intrarii si alimentarea bobinei releului), iar o schema, pentru cazul cu 2 relee, este
   Am desenat schema de comanda cu o placa de dezvoltare Arduino, comutator de functionare AUTOMAT sau MANUAL cu butoane de comanda locale, modul cu 2 relee (ceva mai simplificat) si motorul de c.c. (cum ar fi un motoras de stergator de parbriz alimentat de la un acumulator).
   La trecerea pe pozitia MANUAL, a comutatorului si nici un buton apasat, schema arata asa:
Dupa cum se observa, legaturile si conexiuni cu rosu sunt la 1 (plus), iar cele cu verde la 0 (minus, masa).
    Daca se apasa butonul de comanda inchidere SW4, ledul din optocuplor este alimentat si astfel bobina releului REL1 este alimentata si motorul este alimentat si se roteste in sensul acelor de ceasornic (dupa cum o sa vedeti in animatia de mai jos)
  Daca fereastra sau poarta (depinde de aplicatier) ajunge la capat, limitatorul LIM1 (SW1) intrerupe circuitul si motorul se opreste
   Daca se apasa butonul fara retinere SW5 pentru coborare, se alimenteaza ledul din optocuplor, care comanda tranzistoarele si implicit alimenteaza bobina releului REL2, astfel contactul acestuia alimenteaza motorul, care se invarte in sens trigonometric (sens invers acelor de ceasornic)
Daca limitaotrul este atacat (actionat) se intrerupe circuitul si motorul se opreste
   Mai e o situatiem, care nu prezinta interes, cea in cares e apasa simultan cele 2 butoane... releule sunt ambel;e alimentate si motorul ramane oprit, fiind conectat cu ambele borne la plus (si nu cu ambele la minus cand e in repaus).
   Similar, daca se trece comutatorul pe AUTOMAT, motorul este, in mod obisnuit in repaus cand intrarile sunt in 1 logic (5V)
  Daca pe pinul 0 (desenat asa in simulare) apare 0 logic, ledul din optocuplorul de sus este alimentat si astfel se comanda bobina releului REL1 si mootrul se roteste in sensul acelor de ceasornic
  Daca in acerst timp, fereastra ajunge la capat, limitatorul LIM1 (SW1) este actionat, circuitul de alimentare ledului se intrerupe si motorul se opreste.
  Daca se da comanda de 0 logic pe pinul 1 de la placa de dezvoltare, se alimenteaza ledul de jos, ceea ce face ca motorul sa se invarta in sens trigonometric.

Daca limitoatorul LIM2 (SW2) este actionat la atingerea capatului de cursa a ferestrei, ledul nu s emai alimenteaza si motorul se opreste
    Deoare e mult mai usor de inteles cu o animatie, am folosit programul Livewire si am facut 2 filmulete:
Automatic control for window motor (automatizare comanda motoare)
Automatic control for window motor (automatizare comanda motoare) 2