Vizualizarea semnalului telecomenzilor IR pe computer

 Autor:   Publicat pe:    Niciun comentariu
Comunicarea folosind semnale luminoase în spectrul infraroșu (IR) este utilizată pe scară largă la majoritatea dispozitivelor care pot fi controlate prin telecomandă. Există mult protocoale, iar comenzile trimise sub formă de șiruri de octeți diferă de la un producător la altul, de la un dispozitiv la altul. Acest articol prezintă o metodă simplă de vizualizare a semnalului infraroșu emis de o telecomandă. Deoarece semnalul este transmis la frecvențe joase, pentru vizualizarea lui poate fi utilizată placa de sunet a calculatorului și mai multe aplicații gratuite.

Într-un articol anterior am descris cum poate fi identificată existența unui semnal IR folosind un modul receptor și un LED. Acum, în loc să folosim semnalul captat de receptor pentru a aprinde un LED, îl vom trimite pe una din intrările audio ale plăcii de sunet.
Vizualizarea semnalului telecomenzilor IR pe computer

Dispozitiv simplu pentru verificarea funcționării telecomenzilor

 Autor:   Publicat pe:    Niciun comentariu
Comunicarea folosind semnale luminoase în spectrul infraroșu este utilizată pe scară largă la majoritatea dispozitivelor care pot fi controlate prin telecomandă. De cele mai multe ori, problemele care apar sunt datorate consumării bateriilor telecomenzii. În continuare este prezentat un circuit simplu de construit care ajută la verificarea stării de funcționare a unei telecomenzi. Mai exact, la apăsarea oricărui buton de pe telecomandă, un LED se aprinde. Telecomenzile pot fi verificate de asemenea folosind camere foto/video. Acestea sunt sensibile la lumina IR.

Pentru construirea circuitului veți avea nevoie de un receptor inforaroșu de tipul TSOP1738, SFH506 etc. Acestea pot fi găsite în orice dispozitiv care putea fi controlat prin telecomandă. Mai dificilă este identificarea pinilor integratului. Receptorul este construit într-o capsulă cu 3 pini (2 pini de alimentare și unul de semnal). Puteți identifica pinii analizând placa de circuit de unde ați luat receptorul. Iar dacă ați cumpărat unul, puteți căuta fișa tehnică după tipul lui.
Dispozitiv simplu pentru verificarea funcționării telecomenzilor

Calculare indice de confort termic cu senzor DHT

 Autor:   Publicat pe:    Niciun comentariu

Indicele de confort termic (ICT) sau indicele temperatură umezeală (ITU) este un parametru strâns legat de confortul termic. Indicele coroborează temperatura aerului cu umiditatea relativă, utilizând o formulă ce va fi descrisă în continuare. Pragul critic, peste care apare disconfortul, este considerat 80 de unități. Relevanța acestui indice este cel puțin discutabilă, deoarece chiar într-o lună considerată normală din punct de vedere meteorologic, toate zilele se pot afla peste pragul de alertă (65 unități). Formula de calcul a indexului poate fi găsită în articolul [PDF] Thermal Comfort (E. Teodoreanu, I. Bunescu).

După cum îi spune și numele, pentru calcularea ITU sunt necesare temperatura și umiditatea relativă. Măsurarea lor este chiar ușoară folosind senzori digitali de tipul DHT11, DHT22, SHT11, AM2302. Acești senzori măsoară atât temperatura cât și umiditatea, pe care le comunică digital unui microprocesor. Nu necesită calibrare, dar nici acuratețea nu este totdeauna cea mai bună. Se recomandă un senzor DHT22/AM2302 în locul unui DHT11. De asemenea, Bosch produce senzorul BME280 care costă ceva mai mult, dar măsoară inclusiv presiunea atmosferică. Și acesta poate fi folosit pentru calcularea ITU, cu mențiunea că este un dispozitiv care funcționează la 3,3 V, nu mai mult.

Calculare indice de confort termic cu senzor DHT

Montajul cu senzor DHT22 pe placă de test

Termometru cu senzor DS18B20 și afișaj 16x2

 Autor:   Publicat pe:    Niciun comentariu
Folosind o placă de dezvoltare cu microcontroller ATmega, un LCD cu 2 rânduri de 16 caractere și un senzor digital de temperatură de tipul DS18B20 se poate construi cu ușurință un termometru. Senzorul utilizat este unul digital, ce poate măsura temperaturi cuprinse între -55 și +125 grade Celsius, cu o rezoluție maximă de 0,044 grade (12 biți). În ciuda rezoluției ridicate, acuratețea senzorului este de +/-0,5 grade. Temperatura măsurată este comunicată procesorului digital, prin protocolul 1-Wire.

DS18B20 este un integrat programabil ce include memorie EEPROM. Această memorie poate fi utilizată pentru programarea unor praguri de alarmă. La fiecare citire a temperaturii, DS18B20 compară valoarea cu pragul de alarmă, și dacă este cazul setează un bit ce poate fi citit de procesor.
Termometru cu senzor DS18B20 și afișaj 16x2

Driver și cod Arduino pentru motoare pas cu pas unipolare

 Autor:   Publicat pe:    Niciun comentariu

Motoarele pas cu pas sunt motoare fără perii care efectuează mișcări de rotație discrete în pași incrementali, spre deosebire de rotația continuă a unui motor electric obișnuit. Numărul de pași este determinat de controller și unghiul unui pas este cunoscut. Astfel, motoarele pas cu pas pot efectua rotații precise, necesare în diverse aplicații mecanice de precizie. Pentru rotirea în pași, motorul conține mai multe bobine care sunt activate secvențial de impulsuri generate de un controller. Rata de succesiune a impulsurilor determină viteza de rotație iar ordinea de succesiune determină sensul rotației. Chiar dacă se găsesc circuite integrate specializate pentru acest scop, în acest articol vom vedea cum putem construi un driver cu tranzistoare și vom folosi o placă de dezvoltare pentru a genera impulsurile necesare rotirii axului motorului.

Există două tipuri de motoare pas cu pas. Motoarele bipolare conțin două bobine separate și au 4 fire de conexiune. Pentru a roti un astfel de motor bobinele sunt alimentate una după alta, apoi polaritatea este inversată și bobinele sunt iarăși alimentate. În acest caz, driver-ul trebuie să fie mai complex. Se folosesc două punți H. Celelalte motoare pas cu pas sunt unipolare. Au tot două bobine, dar aceste bobine prezintă o priză mediană. Prizele mediane sunt conectate la sursa de alimentare și celelalte 4 terminale primesc impulsurile. Aceste motoare au 5 fire. Driver-ul se simplifică în acest caz, fiind necesari doar 4 tranzistori. Mai există și motoare pas cu pas ce pot fi folosite fie ca bipolare, fie ca unipolare. Acestea nu au prizele mediane de la bobine conectate între ele (motoare cu 6 fire sau cu 8 fire). Astfel, dacă vei conecta motorul la un driver bipolar folosești doar terminalele celor 2 bobine, nu și prizele mediane.

Driver pentru motoare pas cu pas unipolare cu tranzistoare

Driver pentru motoare pas cu pas unipolare cu tranzistoare

Acest articol va prezenta metode de acționare a motoarelor unipolare. Impulsurile pot fi generate destul de ușor cu orice microcontroller (platforma Arduino vine inclusiv cu biblioteci pentru acest lucru). Problema este că microcontroller-ul nu poate fi conectat direct la o sarcină inductivă și de curent mare. Așadar, este nevoie de un driver. Poți folosi un circuit integrat specializat sau îți poți construi un driver cu 4 tranzistoare. Reține că majoritatea driverelor integrate conțin mai mult decât cele 4 tranzistoare de putere, deci și semnalele de intrare pentru acționarea motorului sunt diferite.

Driver cu tranzistoare

Pentru a construi driverul, am ales 4 tranzistoare N-FET (am avut la îndemână un tip vechi, 2SK2382). Tranzistoarele care provin din surse de alimentare sunt o alegere bună deoarece suportă curenți mari și include diode de protecție. Atât timp cât pragul de grilă (gate threshold) este mai mic de 5 V (tensiunea ieșirilor digitale ale Arduino), poți folosi tranzistorul. Tranzistoarele bipolare NPN pot fi de asemenea folosite.

Schemă driver motoare unipolare cu tranzistoare N-FET

Schemă driver motoare unipolare cu tranzistoare N-FET

Poți alimenta un motor pas cu pas de la o sursă de tensiune constantă. O opțiune mai bună este folosire unei surse de curent constant. Mai ales dacă nu cunoști specificațiile unui motor găsit prin vreun dispozitiv. Schema prezentată conține o sursă de curent constant construită cu integratul LM317, setată la 500mA. Dacă nu cunoști curentul nominal pentru motor, încearcă cu valori diferite, crescânde astfel încât, în regim normal de funcționare, motorul poate să se încălzească, dar nu atât de mult încât să nu poți ține mâna pe el. Dacă se încălzește foarte tare, micșorează curentul.

Identificarea pinilor unui motor pas cu pas fără documentație poate fi o provocare. În funcție de numărul de fire (conexiuni) poți afla ce tip de motor ai. Apoi, cu un multimetru poți identifica bobinele. Dacă motorul pe care îl ai are 4 fire, acesta este bipolar și nu poate fi folosit cu driverul prezentat.

Conectarea motoarelor pas cu pas la un driver unipolar

Conectarea motoarelor pas cu pas la un driver unipolar

Uneori, dezasamblarea motorului poate aduce informații suplimentare despre conectarea bobinelor. În imaginea de mai jos poți vedea prizele mediane (CT, center tap) ale unui motor NEMA17 cu 6 fire. Apoi, cu un multimetru am reușit să identific următoarele fire ca fiind terminale ale aceleiași bobine (A și A# este una din bobine cu priza mediană din stânga, iar B și B# este a doua bobină, cu priza mediană din dreapta).

Conexiunile interne ale unui motor pas cu pas cu 6 fire

Conexiunile interne ale unui motor pas cu pas cu 6 fire

Schema driverului de mai sus este completă. Pentru majoritatea motoarelor, diodele de protecție pot fi diode redresoare ultrarapide, din surse în comutație, ca de exemplu UF4004 sau BA157. Dacă folosești tranzistoare N-FET cu diode incluse, diodele externe de protecție nu mai sunt necesare. De asemenea, în cazul tranzistoarelor FET, poți conecta grila (gate) direct la pinii microcontroller-ului, fără rezistoare înseriate. Rezistoarele sunt necesare dacă vei folosi tranzistoare bipolare NPN. Și acestea pot fi utilizate în acest scop, dar se recomandă tranzistoare Darlington deoarece au un factor de amplificare mult mai mare. Asigură-te că tranzistoarele folosite suportă amperajul necesar motorului (curentul drenă-sursă, respectiv curentul colector-emitor) și dacă pot fi activate de microcontroller (tensiunea prag a grilei, respectiv factorul de amplificare mare).

Rezistorul conectat între pinul OUT și pinul ADJ al LM317 determină curentul prin motor, conform formulei 1,25/R. În cazul meu, 1,25/2,4 = 0,5 A. Se va folosi un rezistor adecvat ca putere (2-3 W). Tensiunea la intrarea LM317 nu poate depăși 35 V. Un radiator este necesar pentru LM317. Dimensionarea acestuia se va face în funcție de caz (puterea disipată calculată ca produs între căderea de tensiune pe LM317 și curentul constant stabilit prin motor). Driverul poate fi construit chiar și pe o placă de test.

Secvența de impulsuri

Bobinele trebuie activate într-o ordine precisă: se începe cu jumătatea unei bobine (de exemplu A), apoi o jumătate a celeilalte (B). Apoi se continuă cu jumătățile rămase (prima A# și apoi B#). Ordinea determină direcția de rotație. Reține că nu poți alimenta o jumătate a unei bobine urmată de cealaltă jumătate a aceleiași bobine (de exemplu A urmat de A#). Motorul va face un pas într-o direcție și pasul următor înapoi, deci nu vei observa axul rotindu-se. Secvențe valide sunt A-B-A#-B# și A-B#-A#-B. A-A#-B-B# nu este corectă (se va avea în vederea denumirea conexiunilor de mai sus). Secvențele inversate își mențin validitatea (B#-A#-B-A și B-A#-B#-A sunt bune).

În cazul motoarelor unipolare ai 4 bobine de alimentat secvențial. Sunt trei moduri în care poți face acest lucru. Primul mod prezentat este wave drive. În orice moment, doar o jumătate de bobină este alimentată prin diferența de potențial aplicată între priza mediană și firul specific bobinei. Modul acesta determină un cuplu și un consum de energie mai mici. Iată cum arată secvența de impulsuri.

Acționare motor unipolar în mod wave drive

Acționare motor unipolar în mod wave drive

Putem crește durata impulsului și să lăsăm jumătatea bobinei activă în timp ce o activăm pe următoarea. Jumătate din timp, două bobine adiacente sunt active. Modul se numește half drive și determină un cuplu ceva mai mare decât modul anterior. Produce de asemenea o dublare aparentă a numărului de pași necesari unei rotații complete.

Acționare motor unipolar în mod half drive

Acționare motor unipolar în mod half drive

Dacă menținem tot timpul două jumătăți de la fiecare bobină activate (A și B) obținem cel mai mare cuplu posibil pentru motor, în modul full drive.

Acționare motor unipolar în mod full drive

Acționare motor unipolar în mod full drive

Biblioteca Arduino

Biblioteca Stepper este inclusă în mediul de dezvoltare Arduino IDE. Pentru a vedea cum funcționează am declarat un obiect Stepper după cum urmează și am analizat semnalul digital cu un analizor logic.

Stepper motor(STEPSPERREV, 8, 9, 10, 11);

unde STEPSPERREV este numărul de pași pe rotație completă (200, specific motorului meu). Mă așteptam să obțin un set de impulsuri similar cu unul din graficele de mai sus, dar nu a fost chiar așa.

Impulsurile generate de biblioteca Stepper

Impulsurile generate de biblioteca Stepper

Sunt într-adevăr impulsuri full drive, dar ordinea pinilor este diferită (conform legendei graficului). Documentația Arduino nu ne spune nimic despre cum ar trebui să declarăm pinii motorului. Se observă că prima pereche de pini din declarația Stepper trebuie să aparțină aceleiași bobine (deci, A și A#), iar cea de-a doua, celeilalte bobine (B și B#). Reține acest lucru dacă folosești biblioteca.

Cod sursă

Chiar dacă Arduino vine cu biblioteci pentru aproape orice, putem scrie propriul cod care să acționeze motoare pas cu pas. La urma urmei nu este atât de greu. După cum se vede, biblioteca suportă numai modul full drive.

Am ales să generez impulsurile scriind direct în registrul portului de ieșire. Comutarea rapidă și simultană a tuturor pinilor cuprinși de registru este un mare avantaj. Dar codul este mai greu de înțeles și pinii motorului sunt determinați de atribuirea specifică portului. Microcontrollerul ATmega328 de pe platforma Arduino oferă pinii portului D sub forma ieșirilor digitale D0...D7 și cei ai portului B la pinii D8...D13. Tot ce trebuie să facem în schiță este să atribuim un număr de 8 biți portului și starea pinilor se va modifica asemeni biților numărului atribuit. Dar, D0 și D1 sunt pinii portului serial. Iar ultimii biți (7 și 6) ai portului B sunt conectați la oscilatorul cu quartz. Deci trebuie să nu le modificăm starea.

Începem prin a scrie registrul DDRB ce modifică tipul pinilor (intrare sau ieșire). Am ales să setez doar primii 4 biți ai portului B ca ieșiri. Între valoarea actuală a DDRB și 0x0F (adică B00001111 binar) am aplicat operatorul OR (sau) la nivel de biți. Singura linie de cod este echivalentul a 4 apelări ale funcției pinMode().

DDRB |= 0x0F;

Cu siguranță cei 4 biți vor fi setați în DDRB. Starea celorlalți nu se modifică. Biții modificați, 3-0 corespund pinilor digitali D8-D11. Iată cum putem genera impulsurile pentru modul wave drive.

const int wavePulse[4] = { B0001, B0010, B0100, B1000 };

void waveDrive() {
  byte port = 0;

  for (int i = 0; i < 4; i++) {
    port = PORTB & 0xF0; // se păstrează biții 4-7
    port |= wavePulse[i];
    PORTB = port;
    delay(5);
  }
}

Funcția de mai sus determină efectuarea de 4 pași, cu un timp de 5 milisecunde pe pas. Half drive este diferit pentru că numărul de pași se dublează.

const int halfPulse[8] = { B0001, B0011, B0010, B0110, B0100, B1100, B1000, B1001 };

void halfDrive() {
  byte port = 0;

  for (int i = 0; i < 8; i++) {
    port = PORTB & 0xF0; // se păstrează biții 4-7
    port |= halfPulse[i];
    PORTB = port;
    delay(5);
  }
}

Deși motorul face 8 pași la o apelare a funcției de mai sus, aceștia sunt mai mici (pe jumătatea celor din funcția anterioară). Modul full drive este similar celui wave drive.

const int fullPulse[4] = { B0011, B0110, B1100, B1001 };

void fullDrive() {
  byte port = 0;

  for (int i = 0; i < 4; i++) {
    port = PORTB & 0xF0; // se păstrează biții 4-7
    port |= fullPulse[i];
    PORTB = port;
    delay(5);
  }
}

Fiecare din funcțiile de mai sus citește întâi starea portului, apoi modifică doar cei 4 pini aferenți motorului. Funcțiile sunt simple și ușor de implementat. Dar generează 4 pași la fiecare apelare și nu permit schimbarea direcției de rotație. Voi încerca să adaug aceste caracteristici într-un articol viitor.

Aprecierea distanței cu senzorul ultrasonic HC-SR04

 Autor:   Publicat pe:    Niciun comentariu

Senzorul HC-SR04 este un modul complex care permite aprecierea distanțelor cuprinse între 2 centimetri și 4 metri cu o acuratețe de 3 milimetri. Senzorul se bazează pe principiul reflexiei ultrasunetelor. Astfel, HC-SR04 conține un generator piezoelectric de ultrasunete, pe frecvența de 40 kHz. Semnalul sonor se reflectă pe suprafețele cu care vine în contact, și este apoi preluat de receptorul aflat pe aceeași placă de circuit.

Modulul în sine este un circuit complex, ce conține un microprocesor, un convertor de tensiune pentru alimentarea emițătorului de ultrasunete și mai multe amplificatoare operaționale care amplifică și filtrează semnalul captat de receptorul ultrasonic. Senzorul se alimentează la 5V și necesită un curent de 15 mA, putând fi astfel utilizat cu diverse plăci de dezvoltare (de exemplu, Arduino).

Aprecierea distanței cu senzorul ultrasonic HC-SR04

Releu activat de lumină sau întuneric cu Arduino

 Autor:   Publicat pe:    Niciun comentariu
Un releu activat de lumină sau întuneric este un dispozitiv util pentru pornirea automată a luminilor sau a altui dispozitiv electric în funcție de iluminarea unui senzor. În general, un astfel de dispozitiv se poate construi cu un fotorezistor și mai multe rezistoare care sunt conectate pentru a forma divizoare de tensiune. Un amplificator operațional compară tensiunea unui divizor cu tensiunea de pe fotorezistor și acționează releul printr-un tranzistor.

Dar, folosind un microcontroller se poate proiecta un dispozitiv cu mai multe funcții și comportament ușor de modificat. De exemplu acest dispozitiv, nu acționează releul la modificări rapide ale luminii care cade pe senzor. De asemenea, printr-o apăsare de buton, dispozitivul se transformă din releu acționat de întuneric în releu acționat de lumină.

Dispozitivul prezentat pe bazează pe o placă de dezvoltare cu microcontroller (MCU) ATmega328 și câteva module ce fac parte dintr-un kit de senzori pentru Arduino. Modulele nu sunt necesare - se pot construi, fiind circuite simple.
Releu activat de lumină sau întuneric cu Arduino

Instalare HP LaserJet Pro MFP M130a în Ubuntu Linux

 Autor:   Publicat pe:    Niciun comentariu

HP LaserJet Pro MFP M130a este un multifuncțional laser cu conexiune USB. Pe distribuțiile Linux actualizate, dispozitivul este recunoscut de sistem și adăugat la imprimante, respectiv scannere. Dar, nici imprimarea, nici scanarea nu funcționează. Ștergerea imprimantei și adăugarea din nou nu par să rezolve problema. Nici instalarea interfeței grafice pentru HPLIP nu a rezolvat problema. Am încercat și să instalez ultima versiune HPLIP de pe site-ul HP, în locul celei disponibile în depozitele software. Fără rezultat.

Se pare că, pentru a funcționa pe Linux, multifuncționalul M130a are nevoie de un plugin care este descărcat la cerere, de pe serverele HP. Lista imprimantelor HP care necesită acest plugin poate fi găsită în CUPS (a se vedea mai jos). În continuare voi detalia procedura de instalare a acestui multifuncțional pe Linux. Am folosit o distribuție actualizată Ubuntu 18.04.

Instalare HP LaserJet Pro MFP M130a în Ubuntu Linux

Realizare PCB prin metoda transferului termic al tonerului

 Autor:   Publicat pe:    Niciun comentariu

Procedura transferului termic de toner este o metodă rapidă și ieftină de a realiza cablaje imprimate (PCB-uri) acasă. Proiectul unui PCB va fi imprimat folosind o imprimantă laser pe hârtie specială. Hârtia este așezată cu fața printată pe fața cu cupru a plăcii și apoi este încălzită cu ajutorul unui laminator. Însă majoritatea amatorilor folosesc cu succes un simplu fier de călcat. Când este încălzit, tonerul devine lichid și aderă de suprafețe. În acest caz, trebuie să adere la foița de cupru. După încălzire, placa cu hârtia imprimată vor fi scufundate în apă. Hârtia ar trebui să se desprindă ușor de foița de cupru. Dacă transferul a reușit, tonerul va fi dispus numai pe cupru, nu și pe hârtie. Acum, placa poate fi corodată prin metodele obișnuite (de exemplu: clorura ferică).

Realizare PCB prin metoda transferului termic al tonerului

PCB cu silkscreen făcut acasă

Conectarea mai multor receptoare la un singur LNB

 Autor:   Publicat pe:    Niciun comentariu

Instalația tipică de recepție prin satelit este formată dintr-o antenă cu LNB și un receptor. LNB-ul universal, simplu este proiectat pentru a fi conectat la un singur receptor. Dar, în anumite situații ce țin de transponderele care vor fi recepționate, semnalul de la un LNB poate fi distribuit mai multor receptoare. Totuși, soluția cea mai bună rămâne folosirea unui LNB cu ieșiri multiple. Dar acesta are dezavantajul limitării numărului de receptoare la numărul ieșirilor. Și, cu cât are mai multe ieșiri, cu atât prețul este mai mare.

Conectarea mai multor receptoare la un singur LNB

Recepții DRM folosind un stick RTL-SDR

 Autor:   Publicat pe:    Niciun comentariu

DRM (Digital Radio Mondiale) este un standard folosit pentru transmisii digitale în benzile de unde lungi, medii și scurte. Receptoarele dedicate care pot demodula acest standard sunt destul de costisitoare. În continuare este prezentată o metodă simplă prin care pot fi recepționate posturi de radio DRM folosind un stick RTL-SDR și un computer cu aplicațiile software potrivite.

Stick-urile RTL-SDR sunt de fapt stick-uri destinate recepției de semnale DVB-T. Aceste stick-uri sunt speciale pentru că folosesc demodulatorul Realtek RTL2832U. Acest recepționează nu numai DVB-T. Datorită faptului că poate trimite prin portul USB semnalul brut de la tuner, nedemodulat, stick-ul poate fi folosit în aplicații de tip SDR (software defined radio). În acest caz, demodularea se produce prin procesarea digitală a semnalului.

Pe acest principiu se bazează și metoda de recepție a semnalelor DRM. Stick-ul va fi acordat pe frecvența postului DRM, iar acest semnal va fi trimis către un demodulator software. Emisiile pot conține atât stream-uri audio dar și imagini sau alte date.

Fereastra principală a programului SDRSharp, cu stickul setat pe un program DRM

Fereastra principală a programului SDRSharp, cu stickul setat pe un program DRM