ArduShop.ro

ArduShop.ro
cod tehnic.go.ro_02 reducere 5%, pentru vizitatorii paginilor mele !

joi, 12 aprilie 2018

Actualizare ora si data la ceas RTC

   La ceasurile cu RTC (DS3231 sau DS1307) care nu au meniu de reglat ora si data, din diferite motive, si folosesc libraria RTClib sau ceva asemanator, putem face urmatorul artificiu: in bucla de setup sa avem linie de genul (cel mai bine se vede in exemplele librariei)
 //RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));

sau ceva similar.
 //RTC.adjust(DateTime(__DATE__, __TIME__));


pentru a actualiza data scoate cele 2 linii de comentare // si incarcam programul (sketch-ul):
astfel ceasul RTC (DS3231 sau DS1307) preiau ceasul si data din calculator.
Comentam iar linia si incarcam iar:
asta e tot...

Copiere bucati de schema in EAGLE Layout Editor

   Un dezavantaj major al programului de desenat scheme si cablaje Eagle Layout Editor este ca nu are explicita functia de copiere a unor bucati de schema... in articolul EAGLE Tutorial: Copy and Paste este prezentat cum se face.
   Avand o schema desenata sau o mare parte si trebuie desenate parti identice:
apasam butonul din stanga GROUP (cel din stanga cheii)
apasam pe butonul din stanga al mouselui si il tinem apasat pana incadram toata zona de vrem s-o copiem
la eliberarea butonului de la mouse apar piesele desene cu culori mai vii
apasam pe butonul COPY din stanga
si apoi dam click dreapta in zona pieselor marcate si selectam optiunea aparuta COPY: GROUP
si apare o copie a acelei zone, care se poate muta ata timop cat e apasat butonul stanga al mouseului
la eliberarea butonului apar si piesele
   Daca vrerm sa mutam o zona, procedura e similara, doar ca selectam sagetile (in stanga copierii)
   Trebuie un pic de antrenament, dar merita 😎.
   In filmuletul EAGLE copy block se vede cum am procedat eu:


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).