vineri, 25 mai 2018

Priza programabila utilizind arduino

Deoarece mi-a cedat priza programabila luata din magazin, am hotarit sa mi-o fac singur. In cazul meu aceasta sta de regula in aer liber, si datorita mediului cedeaza ori butoanele care nu mai fac contact, ori display-ul caruia ii crapa banda de cauciuc cu contacte. Cele din comert sint ceva mai stufoase, insa eu am nevoie doar sa porneasca zilnic un releu pe un interval orar stabilit.
Nu am avut chef sa inventez alta roata asa ca mai intii am cautat sa vad ce au facut si altii. Solutii sint multe (mai mult sau mai putin complicate), dar de lene am ales varianta cea mai simpla, unde puteam utiliza arduino.
Am pornit de la un acest proiect de ceas cu alarma caruia i-am adaptat codul la ceea ce am gasit in sertar.
Pentru teste am folosit un LCD 16x2 cu I2C, un arduino nano si un modul cu DS1307.
Initial am mers pe varianta omului cu 3 butoane pe 3 intrari separate . Ulterior in speranta de a folosi un ATTINY85, am modificat codul pentru 3 butoane legate la aceasi intrare adaptind la cele 3 butoane 3 rezistente de 10K dupa informatiile din link. Din pacate aceasta versiune de cod nu incape in ATTINY si va ramine in studiu.
Codul ocupa destul de mult:

Fazele de testare arata ca mai jos:
In dreapta sus este ora de pornire (P), iar sub el ora de oprire (O)
In stinga sus ora curenta, iar mai jos data, desi in acesta aplicatie informatia este inutila.
La apasare butonului "-" se poate porni releul manual
 La apasarea butonului SET ( cel ce pune la masa intrarea A3) se trece in modul setup (cel din mijloc este + iar capatul -)
 La apasari succesive cursorul ">" se deplaseaza in stinga fiecarui element de reglat, cu celelate 2 butoane "+" si  "-" se executa reglajul.
 Setare ora si minut pornire
 Setare ora si minut oprire
 Se salveaza datele in EEprom
Releu pornit
In curind cind vor sosi circuitele DS1307 voi utiliza un LCD16x2 fara I2C, cu un 328 simplu, puse toate pe un circuit imprimat, adaptat la cutia folosita.

Trebuind neaparat o bucata functionala l-am pus intr-o doza PT (pe tencuiala):
De data asta am folosit un RTC mai mic ca dimensiune cu un LCD fara I2C, si am pus un ATMEGA328. Releul l-am lipit peste priza, iar linga el am pus o sursa de 5v/700mA.





joi, 17 mai 2018

Sursa de tensiune 1,2-30V 0-8A cu XL4016

De curind mi-au sosit citeva circuite XL4016 care pot furniza un curent pina la 8A, asa ca am hotarit ca trebuie neaparat un reglaj de curent.
Deci 0,77USD/buc

Nu aveam timp sa reinventez roata, asa ca am abuzat dn nou de google pentru materiale ajutatoare. Astfel am descoperit ca exista un modul chinezesc ce foloseste acelasi circuit, cu reglaj de tensiune si curent, iar un rus i-a scos schema si la el pe blog furnizeaza foarte multe detalii .

Schema gasita este mai jos:
I-am "calcat" un cablaj imprimat ca mai jos

Traseele de masa si alimentare le-am dublat cu sirma de la cablu UTP pentru a suporta curentul de 8A

 Bineinteles ca au fost necesare si citeva punti pe fata cu componente:
Bobina are 18 spire CUEm 1mm pe un tor recuperat dintr-o sursa de ATX care masurata are 62microH
I-am atasat si un V/A cu ATTINT85  caruia i-am modificat codul pentru rezistenta de 0,01 Ohm ce este folosita ca traductor de curent, unde se poate vedea tensiunea maxima, in cazul meu 25V ca atit scotea sursa ATX ce o modificasem.
Pe radiator este XL-ul, dioda dubla si stabilizatorul de 5V
 Test limitare curent
 La aproape 6A a stat circa jumatate de ora, cu radiatorul din imagine care s-a incalzit in limite accepabile, in sensul ca puteam sa tin mina pe el. Cablurile de legatura (0,7mm) au fost singurele ce s-au incins binisor datorita sectiunii mici. Ca sarcina am folosit un bec de far auto. 
Spre final ma declar foarte multumit de modul in care munceste, mai ales faptul ca nu necesita un radiator foarte mare, mai ales ca pe viitor va fi folosit la maxim 4A limitare data de transformatorul folosit.
In timpul testelor am mai facut niste mici modificari in schema pentru ca led-ul de scurt cel de pe pinul 7 al AO functiona pe invers. Modificarile le-am facut pe spatele cablajului si voi tine cont de ele la urmatorul proiect. Schema am gasit-o desenata, eu doar mi-am aplicat modificarile mele. In link este si o alta varianta de cablaj, dupa chema initiala.
Cablajul dupa schema mea este pe OneDrive.- versiunea toner, manual si dispunere componente Este urcat si fisierul sursa creat cu PcbWizard .

sâmbătă, 12 mai 2018

Radio cu TEA5767 comandat de ATTINY85 afisare pe OLED

Am testat un radio foarte simplu, cu TEA5767, comandat de ATTINY85 cu afisarea frecventei pe un OLED. Pentru cautarea posturilor am folosit o singura intrare cu 2 butoane.
Schema este urmatoarea:
Iar modulul cu TEA5767 este:

Deorece resursele lui ATTINY85 sint reduse am abuzat de google pentru a cauta ceva similar. Astfel am gasit aici un library minimal pentru TEA5767,  si aici pentru OLED.
Codul testat este pe github.
Initial am testat cu un OLED 128x64 apoi amgasit un 128x32.
Viteza de reactie este destul de buna, insa afisarea frecventei este putin intirziiata, refresh-ul se face la cca 2-3 secunde.
Imagini de la teste:
 In poza apar trei butoane pentru ca initial am vrut sa-i pun un buton pentru MUTE, insa codul actual ocupa 99%


duminică, 6 mai 2018

Sursa 0-30V 0-3A PSU KIT

Cu ceva timp in urma a sosit un kit de sursa 0-30V/0-3A si m-am apucat sa-l testez. Anterior mai luasem unul de la alt chinez care avea o problema in sensul ca la pornire intra direct in protectie, trebuind oprit si pornit din nou ca sa revina la normal. Acesta este deja pus intr-o cutie, iar utilizatorul s-a obisnuit cu el asa. 
Dupa plantarea tuturor componentelor am observat ca si acesta se comporta similar. Asamblat arata ca mai jos:
Alimentarea am facut-o din transformatorul din imagine (24V/63VA):
Cautind schema am mai gasit pe cineva care  a sapat la rezolvarea problemei, si dupa cum se poate vedea la el pe blog a studiat in amanunt problema, scutindu-ma pe mine de studiu.
Schema originala este mai jos:

Asa ca am eliminat Q1, R13 si R14, si am trecut la teste. Problema initiala cea cu pornire in protectie parea ca se rezolvase. Insa desi pe condensatorul de filtraj aveam 35V iesirea nu se regla peste 21V, pentru asta am masurat tensiunea pe iesirea lui U1 care era de 6,2V. Am inlocuit R4 care initial era de 4K7 cu una de 1K2, astfel am obtinut o tensiune constanta (imuna la consum) de 11,8V, rezultind reglajul iesirii pina la 27V. Valoarea minima a tensiunii pleca de la valori negative problema rezolvata din reglajul lui RV1. Stabilizatorul 7824 l-am inlocuit cu 7812 pentru a folosi un ventilator de 12V caruia i-am atasat  un mic radiator pentru ca functiona suficient de fierbinte (ventilatorul folosit lua 0,12A la 12V). Testele le-am facut cu un bec auto de semnalizare care la 12V consuma 1,6A, iar la 5V consuma 1A. TL081 venite cu kit-ul au primit alta destinatie si in locul lor am pus niste LM741 recuperate de pe niste placi mai vechi.

Dupa circa o ora de teste la 12V/1,6A diodele din puntea redresoare  au cedat impreuna cu Q4.

Am trecut la un mic upgrade. Am inlocuit diodele cu 10A10 care conform catalog ar avea 10A, iar in locul lui Q4 am pus doua 2N3055 la care pe fiecare emitor am inseriat cite un rezistor de 0,1/5W, am inlocuit R7 cu una de 0,22/5W care ma lasa pina la 4,5A. A iesit ca mai jos:


De data asta a stat vreo 3 ore in teste  si a rezistat cu succes, diodele din punte fiind foarte putin calde, Probabil se vor incinge mai tare la curenti mai mari, dar in caseta ce va fi montat va avea un ventilator chiar deasupra placii care sper sa-i asigure o racire suficienta, sau voi renunta la ele pentru o punte monobloc ce o voi monta pe radiatorul 2N-urilor. Radiatorul din imagine (fara ventilatie) abia s-a incalzit dupa trei ore desi cele doua 2N3055 au disipat aproape 37W. Q2 a ramas rece.
Micsorind valoarea lui R7 ar trebui crescuta valoarea lui R17 dar mie mi-a fost lene s-o mai scot, mai ales ca nu ma deranja foarte tare. In aceata situatie pozitia de curent minim a lui P2 determina intrarea in protectie, insa cursa potentiometrului este foarte mica pentru a iesi din protectie. 
R2 si R3 ar mai trebui inlocuite cu altele de putere mai mare pentru ca se incalzesc semnificativ.

sâmbătă, 21 aprilie 2018

Display 7 segmente/8digiti cu 74HC164

Aveam luat de test un display cu 7 segmente 8 digiti, cu 74HC164, serial pe 2 fire, si mi-am facut un pic de timp pentru teste.
Acesta arata  ca mai jos:


Dupa ceva studiu, m-am oprit pe 2 articole cu tematica similara de aici si de aici, iar dupa citeva incercari am reusit sa-l aprind cum vreau eu. De mare ajutor a fost datasheet-ul circuitului.
Am definit cei 2 pini:

const int clock = 3; //CP
const int data = 2;  //DAT

iar logica de comanda este:

shiftOut(data,clock,LSBFIRST,B10011101); // 1SEGMENT STINS //ABCDEFGdp
shiftOut(data,clock,LSBFIRST,B00000010);// 1 DIGIT ACTIV
delay(1); //necesar pentru transfer (daca este mai mare de 10 devine evident transferul datelor)

curatarea display-ului 

shiftOut(data,clock,MSBFIRST,B11111111);
shiftOut(data,clock,MSBFIRST,B00000000);

Dupa ce am verificat aprinderea fiecarui digit cu numarul dorit, am atasat doua bucati LM35 ca sa vad cum se misca. Codul de test este pe github.


 Pentru teste am folosit un arduino nano:



Dar apare un flicker foarte obositor ce nu se vede in poza. Afisarea unor informatii statice este ok, in sensul ca nu deranjeaza ochiul, insa citind cele doaua intrari analogice flicker-ul este deranjant, problema ce ramine in studiu.
Tinta lui este sa-l leg la un ATTINY85 ce urmeaza sa soseasca si voi face un voltmetru/ampermetru iar atunci voi mai lucra la reducerea tremuratului.

La sugestia lui Nicu Florica, pentru diminuarea tremuratului am incercat sa micsorez delay-ul de transfer folosind functia delayMicroseconds(j); insa timpul era prea scurt ca sa reuseasca sa aprinda LED-ul, acesta fiind mai mult stins. Cum tremuratul apare doar in cazul citirii intrarilor analogice, am pus partea de afisare intr-o bucla ca sa-l fortez sa citeasca mai rar cele 2 intrari:

int i;
 for (i=50;i>0;--i)
 {
shiftOut(data,clock, LSBFIRST, value[second_digit]); //delay(5);//NR
  shiftOut(data,clock, LSBFIRST, digit[3]);
  delay(2);
// delayMicroseconds(4000);
  shiftOut(data,clock, LSBFIRST, value[third_digit]); //delay(5);//NR
  shiftOut(data,clock, LSBFIRST, digit[2]);
  delay(2);
................................etc..................
  }

delay(2); reuseste sa asigure o luminozitate decenta, iar i=50 reduce semnificativ tremuratul fara a afecta valoarea citita si afisata.
Am facut si un filmulet cu telefonul iar in prima parte apare un tremurat datorita lampii cu neon, in realitate este insesizabil, insa ceea ce se vede era vizibil inainte de a pune bucla in cod. Spre finalul filmului am stins neonul, in film apare un usor tremurat dar este cauzat de camera video a telefonului. 

luni, 9 aprilie 2018

Ceas cu raspberry pi zero si TM1637

Pentru a ma obisnui cu programarea in python pe raspberry pi am inceput cu ceva simplu, un ceas sincronizat pe internet care afiseaza pe un display cu 7 segmente comandat cu TM1637.
Am folosit un raspberry pi zero cu un adaptor WIFI pe care am instalat raspbian. i-am facut update-urile si am instalat wiringpi si wirinpi2 conform datelor din link. Celelalte pachete erau deja instalate.
Cautind exemple mi-a atras atentia codul de aici pentru simplitatea lui. 
Am modificat codul anulind partea de afisare IP care nu ma interesa, si am redefinit pinii pentru DIO si CLK ai lui TM1637 iar dupa executare mi-a afisat imediat ora sistemului


Insa la acest exemplu nu m-am prins cum sa modific luminozitatea, asa ca am mai "sapat" un pic si am ajuns aici unde aveam posibilitatea de a umbla la luminozitate. In cod am redefinit  din nou pinii pentru a nu mai umbla la conexiuni. Astfel dupa citeva incercari am reusit sa gasesc luminozitatea dorita.
Pentru a porni la start am editat /etc/rc.local adaugind linia de mai jos:

python /home/pi/clock/clock-zero.py

Am dat reboot si ceasul a pornit automat. Astfel, atita timp cit va fi conectat la internet va arata tot timpul ora sistemului
Display-ul folosit s-a nimerit sa aiba aceasi dimensiune cu placuta de raspberry pi zero si s-a potrivit perfect si la gauri.


sâmbătă, 24 martie 2018

Step-down de casa cu LM2576

Din motive similare cu cele descrise in articolul anterior, m-am "suparat" si mi-am facut singur un step-down cu LM2576 care sa functioneze rece. La modulele chinezesti cu componente SMD, dioda este cam la limita avind un curent maxim de 3A, care la consumuri de peste 1,5A topeste cositorul cu care a fost lipita. La fel bobinele tip SMD se "scurg" de pe placa.
Am pornit de la schema de baza din datasheet-ul lui LM2576, unde am mai adaugat o punte redresoare, un Led pentru prezenta tensiune si o rezistenta de descarcare pe iesire. Daca rezista cu succes la teste ii va fi atasat un transformator  si o caseta.
Schema la care m-am gindit este cea de mai jos:
Pentru probe l-am realizat pe o placa de test.


In locul diodei D2 am folosit o dioda dubla pusa in paralel recuperata dint-o sursa pc, la iesire am folosit 2 condensatori de 1000microF. Dioda dubla si LM-ul le-am fixat pe un radiatorul din poza cu dimensiunile 55/30/10. Bobina are 30 spire CuEm de 1mm bobinate pe un tor recuperat tot dintr-o sursa PC.
La teste am folosit un transformator recuperat de un UPS care scotea la iesire 18V pe un secundar bobinat cu CuEm de 2mm. Dupa puntea redresoare avea 26Vcc.
La teste am folosit mai multe becuri auto de semnalizare pina am ajuns la un curent de 2,8A la o iesire de 5V, si l-am lasat sa se manifeste circa 2 ore, timp in care mai testam temperatura radiatorului. 
Initial ma gindeam ca radiatorul este mic, insa temperatura lui era foarte putin sesizabila. Bobina s-a incalzit ceva mai bine, dar nu suficient cit sa topeasca cositorul de la borne, de fapt putea fi atinsa cu mina fara a face rani. Puntea redresoare (KBU808 am folosit eu) era usor calda desi nu a fost fixata pe radiator.
Au urmat testele de scurt circuit care l-au lasat rece. Firele de legatura care erau cam subtiri au fost singurele evident mai calde, dar aveau si motiv.
Citeva imagini de la teste: pe osciloscop se poate vedea riplul la 15V/1.5A


Urmeaza sa gasesc citeva radiatoare identice si functie de acesta sa "calc" si citeva cablaje cu si fara punte redresoare.
Un test de cablaj imprimat + silk calcat.


 Partea cu silk-ul cred ca mai trebuie studiata.
Schema facuta cu kicad, iar cablajul cu pcb wizard.



Priza programabila utilizind arduino

Deoarece mi-a cedat priza programabila luata din magazin, am hotarit sa mi-o fac singur. In cazul meu aceasta sta de regula in aer liber, s...