sâmbătă, 31 martie 2018

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

   In completarea schemei de control pozitie ferestre de aerisiere pentru o sera in functie de temperatura (prezentata in articloul de AICI, am introdus si partea de comanda manuala.
   Partea de comutare de pe automat pe manual a fost gandita ca AICI, doar ca beneficiarul lucrarii mi-a adus un alt tip de comutator
care are in pozitia de mijloc pozitia de repaus (OFF) si pe stanga, respectiv dreapta contacte, asa ca am modificat schema, care devine
   Programul de simulare (Livewire) este dintr-o generatie veche si nu are acest comutator, dar l-am adaptat ca fiind 2 comutatoare, ca in schema...
   Daca comutatorul este pe pozita OFF (SW2 deschis, din simulare), schema functioneaza ca si ce am prezentat in materialele anterioare:
- ambele intrari in 0 logic, motor in repaus (stare nefolosita in cazul de fata, deoarece modulele de relee lucreaza cu logica inversa)
- comanda 0 logic pe primul canal, al doilea e in 1 logic, motorul se invarte in sens trigonometric (invers acelor de ceasornic, dupa cum se va vedea in simularea video) 
- comanda 0 logic pe al doilea canal, primul in 1 logic, motorul se invarte in sensul acelor de ceasornic
- comenzi de 1 logic pe ambele canale, pozitie de repaus
   Dupa cum se observa, prin ledurile din optocuploare, cat si pe iesirile placii Arduino sunt cca 3mA (R1 inseriat cu R3 = 1k51 sau R2 inseriat cu R4 = 1k51).
   Daca motorul ajunge la capat de cursa, este atacat fie limitatorul LIM1, fie limitatorul LIM2, si si crcuitul de comanda se intrerupe.si indiferent ce comenzi da placa Arduino (saiu orice alt sistem de comanda) motorul ramane in repaus.
   Daca se trece comutatorul in stanga, de exemplu, ce ar corespunde inchiderii intrerupatorului SW2 si trecerea comutatorului SW1 in partea de jos, comanda logica catre relee e similara, doar ca curentul prin ledul din optocuplor este 4,3mA (in circuit ledului doar R1 = 510 ohmi, respectiv R2 = 510 ohmi).
  Similar, daca se trece comutoatorul in dreapta, cea ce corespunde in simulare inchiderii intrerupatorului SW2 si trecerea comutatorului SW1 in partea de sus, motorul se invarte in sensul acelor de ceasorinic.
  Rolul limitatoarelor de cursa este acelasi ca si in cazul comenzii pe automat, de aceea, daca se doreste deschiderea fortata sau inchiderea fortata, indiferent de temperatura din incinta, se trece comutatorul pe stanga sau dreapta. Pentru reglajul automat, se trece comutatorul pe pozitia OFF.
  Dupa cum se observa, pe schema am conectat 4 ampermetre, deoarece la trecerea pe pozitia de comanda manuala, curentii de pe iesirile placii arduino sunt diferiti de cei prin optocuploare.
  Dupa cum am scris mai sus, curentul prin optocuplor este de cca 4,3mA circuitul fiind: +5V - led - rezistenta R1 (sau R2) - masa (GND).
  La placa Arduino, functie de comanda logica 1 (+5V) sau 0 logic (0V, GND), in circuit este doar R1 sau R2 de 50 ohmi, curentul avand valori de -9,6mA, 0mA sau +9,6mA.Valoarea curentului nu e periculoasa pentru iesirile digitale ale placii Arduino.
  Cel mai bine se vede in filmuletele realizate ca o captura de ecran:


marți, 27 martie 2018

Comenzi, date din interfata grafica Python, executate de Arduino

   Fata de cele prezentate in articolul anterior, cand dadeam comenzi din ecranul de monitorizare seriala, acum ma folosesc de o interfata grafica realizata in limbajul Python.
   Pentru a instala si configura Python 2.7.x am urmat indicatiile din articolul A Guide To Building Python Apps For Controlling Your Robot, instaland programul de la https://www.python.org/downloads/, alegand versiunea 2.7.x
Dupa instalare, am, facut modificare pentru a deschide aplicatiile .py cu Python
verificand asta

   Dupa ce am facut diverse teste cu exemplele de acolo, am adaptat unul si pentru a comanda modul de aprindere cu intermitenta a ledului de la pinul D13, sketch-ul actual fiind pyton_serial_control_flashes_1a1.ino
si dupa incarcare, vom modifica in programul Pyton com-ul folosit, in cazul de fata COM3.
   Incarcam fisierul pyton_serial_control_flashes_1a1.py
si modificam daca calculatorul ne aloca alt port
   Dupa aceasta dam comanda RUN -> RUN MODULE si va apare
asta ca folosim interfata grafica a programului (GUI), daca dam dublu clic pe fisier se va deschide sub "DOS"si nu mai apare programul Python aferent.
     Acum pot controla modul de clipuire, de la o data la 5 ori, timpii de aprindere/stingere (50ms..250ms, in 5 trepte) si timpul de pauza intre "salve" de la 1 la 5 secunde (in 5 trepte), dupa cum se vede si in filmuletele:
control Arduino cu interfata Python
control Arduino with Python
control Arduino with Python (2)
control Arduino cu interfata Python (2)
control Arduino with Python (3)

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.