vineri, 15 ianuarie 2016

Module radio NRF24L01 (2)

   In articolul precedent am transmis pozitia unui joystick (axele x si y), inclusiv pozitia butnonului de pe el (apasat sau liber). Datele transmise si primite se puteau vedea in ecranele de monitorizare seriala.
   Am zis sa termin sketch-ul din articolul RadioLink-Joystick-To-Servos de pe site-ul arduino-info.wikispaces.com in care se transmitea pozitia joystick-ului catre 2 servomotoare montate, dar nu implementase aprinderea unui led cand se apasa butonul de pe joystick.
   Schema de conectare a joystick-ului la placa Arduino Uno si a modulului radio NRF24L01 ramane identica cu cea prezentata anterior:
iar receptoprul are schema de conectare astfel:
   Am folosit o sursa externa de 5V/1A pentru alimentarea celor 2 servomotoare, decoarece alimentarea prin USB de la calculator nu ar fi fost suficienta.
   Cateva imagini cu montajul in functiune:
- in repaus:
- buton apasat:
- joystick la stanga:
joystick la dreapta:
joystick in sus:
joystick in jos:
   Am facut si 2 filmulete:

 
   Pe https://github.com/tehniq3/ am postat cele 2 sketch-uri:
- pentru emitator: nrf24l01_tx_2servo_sw.ino
- pentru receptor: nrf24l01_rx_2servo_sw.ino

joi, 14 ianuarie 2016

Benzi de leduri multicolore cu control independent pentru fiecare led

   In ultimul timp se gasesc la preturi acceptabile benzi de leduri multicolore cu control independent pentru fiecare din leduri, adica fiecare led multicolor este comandat de un integrat (gen registru de deplasare).
   In articolul Difference between WS2801, WS2811 and WS2812 se prezinta foarte bine diferenta intre benzile de leduri multicolore contorlate de WS2801 si WS2812 (care are in interiorul ledului circuitul de control WS2811).
   In imaginea urmatoare se vede diferenta, in sensul ca banda cu WS2812 are 60 leduri multicolore pe o lungime de 1m, iar cea cu WS2801 are 32 leduri multicolore pe o lungime de 1m.
   In imaginea de mai jos se vede un led multicolor 5050 si un led WS2812:
   Diferenta este si in modul de comanda al circuitelor de comanda:
   Pentru teste, am avut 3 leduri multicolore controlate de WS2801, primite de la ARelectronics. Le-am conectat in cascada si le-am comandat cu libraria Adafruit-WS2801-Library, dupa ce m-am documentat din articolul https://learn.adafruit.com/12mm-led-pixels, iar schema de conectare la placa Arduino este, in mod uzual:
   Eu am avut doar 3 leduri multicolore, asa ca am alimentat din mufa USB a calculatorului.
   Pentru comanda, am folosit exemplul numit "strandtest" pe care l-am modificat pentru 3 leduri multicolore si am adaugat niste "cazuri particulare", cum e tricolorul Romaniei:
   Sketch-ul folosit se numeste ws2801_3leds_2m4a.ino !
 
 
 
 
dupa cum se vede si filmuletele:
   Ulterior, am achizitionat o banda de leduri multicolore WS2812 in lungime de 1m de pe www.banggood.com.
   Pentru ea, am folosit libraria Neopixel. Modul de conectare a impus un alimentator separat, deoarece consumul benzii cu 60 de leduri multicolore este destul de mare.
   La testele initiale am folosit exemplu "stantest" al librariei Neopixel..
apoi am modificat sketch-ul, care devine ws2812B_test.ino
   Cand testam sketch-uri, schema a fost ca cea din articolul Difference between WS2801, WS2811 and WS2812
iar cand l-am folosit independent
   Eu nu am folosit rezistenta inseriata cu pinul de comanda cand am incarcat sketch-uri.
   Cateva exemple de combinatii de culori si variatii de intensitate realizate cu sketch-ul meu ws2812B_test.ino, in poze se vede si consumul (in amperi):
 
 
 
 
 
 
 
 
 
 
si cateva filmulete:

miercuri, 13 ianuarie 2016

Module radio NRF24L01

   Avand o pereche de tranceiver-e NRF24L01, adica emitatoare/receptoare, care lucreaza pe frecventa de 2,4GHz, am zis sa fac si eu niste probe de transmitere date si receptie a lor.
   Pinii modulului radio 24L01 vazut de sus sunt:
   Alimentarea maxima este de 3,6V, dar pentru alimentarea de pe placa Arduino se foloseste ramura de +3,3V (uneori pot apare erori de transmisie si trebuie conectat un condensator electrolitic de maxim 10uF catre masa sau mai bine se foloseste o sursa externa).
 Pinii de comanda permit nivele logice de 5V.
   Din multitudinea de informatii de pe net, m-am oprit la articolul Complete Guide for nRF24L01 – 2.4GHz RF Transceiver Module With Arduino scris de Rui Santos, care foloseste libraria RadioHead, despre care puteti citi mai multe la RadioHead Packet Radio library.
   In articol o placa Arduino, conectata la un modul radio NRF24L01, este pe post de client si transmitre un salut, iar alta placa Arduino, conectata la alt modul radio NRF24L01, pe post de server, primeste mesajul si ii raspunde clientului. Schema de conectare este simpla:
   
   Am redesenat si eu cu programul Eagle PCB schema emitatorului, care este aceeasi cu a receptprului:
   Sketch-urile se gasesc in articol, dar si in exemplele din librarie.
   Am facut si eu un filmulet numit trimitere si receptie date radio cu NRF24L01 si Arduino
   Daca apar erori in ecranele de monitorizare seriala a emitatorului sau a receptorului, trebuie pun un condensator de maxim 10uF si minim 6,3V intre pinul 3.3V si GND, pentru a atenua caderile de tensiune, care apar la variatii ale consumului modulului radio, cand emite. Daca nici asa nu se rezolva erori, trebuie sa folositi o sursa externa de alimentare de 3,3..3,6V/min. 0,5A pentru modulul radio.
   In articolul nRF24L01 2.4GHz Radio/Wireless Transceivers How-To se prezinta diverse librarii pentru acest modul radio si cum se conecteaza:
   In articolul RadioLink-Joystick-To-Servos se foloseste un joystick ale carui coordonate sunt transmise de un Arduino Uno conectat la un modul NRF24L01 catre un receptor tot cu NRF24L01 conectat la un Arduino Uno, care controleaza 2 servomotorase.
   Eu am "scos" partea de servomotoare, deoarece vreau sa verific cum sunt transmise datele pe ecranul de monitorizare seriala.
   Un joystick pentru Arduino, arata asa:

   Schema interna a unui joystick de genul asta este:
si consta in 2 semireglabile (potentiometre) conectate fiecare intre +5V si masa GND) si, astfel, pe cursoare VRX si VRY se citeste o tensiune proportionala cu deplasarea axului respectiv. In repau, pe cele 2 curseoare se gaseste jumatate din valoarea tensiunii de alimentare, adica 2,5V. Cand axul este impins maxim in stanga, rezistanta fata de masa (GND) este zero, deci si tensiunea pe cursorul VRX este 0V, daca axul este deplasat maxim la dreapta, rezistenta fata de masa este maxima, deci tensiunea pe cursorul VRX este maxima (5V); la fel, se intampla si pentru impingerea la maxim a axului in fata, tensiunea pe cursorul VRY este maxima (5V), iar daca axul este tras maxim, tensiunea pe cursorul VRY este 0V. In plus, acest joystick are si un buton fara retinere, care face contact la masa, cand este apasat.
   Conform sketch-urilor, schemele de conectare sunt:
- emitator:

- receptor:
   Sketch-urile pentru acest test se gasesc la https://github.com/tehniq3/NRF24L01/tree/master/joystick.
   Cateva çapturi de ecran (print screen-uri):
- joystick in repaus, pe ecranul de monitorizare seriala a emitatorului
joystick in repaus, pe ecranul de monitorizare seriala a receptorului
joystick in repaus, pe ecranul de monitorizare seriala a receptorului
- joystick in jos
 - joystick in sus
 - joystick spre stanga
 - joystick la dreapta:
 - joystick in jos, la dreapta:
 - joystick in jos, la stanga
 - joystick in sus si spre dreapta
 - joystick in sus si spre stanga
   Am facut si un filmulet numit trimitere si receptie date radio cu NRF24L01 si Arduino (2)
  Ulterior, am adaugat si ce incepuse Nouah King, adica starea butonului de pe joystick, iar sketch-urile se gasesc la https://github.com/tehniq3/NRF24L01/tree/master/joystick_switch.
  Schema emitatorului devine:
  In repaus, in ecranul de monitorizare al receptorului vedem:
iar la apasarea butonului de pe joystick:
  Am facut si un filmulet numit trimitere si receptie date radio cu NRF24L01 si Arduino (3)
  Montajul emitatorului meu cu NRF24L01 conectat la o placa Arduino Uno si un joystick, pentru ultima versiune arata asa:
iar receptorul:
14.01.2016
   In documentatia librariei RadioHead se explica cum putem pune canalul (0..125), puterea de emisie si viteza de transmisie a datelor. Am pus intr-un sketch ca note:
   Din testele mele, apar erori cand se foloseste si libraria RHReliableDatagram.h, cum a fost cazul pentru joystick, deci ramamn momentan la "setarea din fabrica".