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