duminică, 30 decembrie 2018

Test indicator tensiune, curent, temperatura pe OLED folosind arduino

La sugestia lui George Dacin am testat un indicator pentru o sursa de laborator folosind un arduino cu afisare pe OLED I2C 128x64. Materialul de baza a constat in articolul lui Nicu Florica, la care am modificat afisarea pe OLED si am adaugat un pseudo termostat.
A iesit ca mai jos (clampmetrul din poza e folosit doar pentru fixare):
Rezultind o afisare patratoasa "patratoasa" am modificat codul initial introducind fonturi conform materialului prezentat de adafruit, iar dupa incarcarea codului a iesit ca mai jos: (prima poza e de la mine, cea de jos a alui George)


Asupra masurarii temperaturii parerile au fost diferite, George dorea sa foloseasca DS18B20 , iar eu doream o simpla dioda (metoda descrisa in detaliu de Nicu), tinind cont ca aceasta urma sa masoare temperatura unui radiator si actioneze un ventilator la depasirea unui anumit prag.
Ca sa nu fie discutii am realizat un test cu DS18B20 si un test cu dioda
Apoi a aparut un comentariu al lui Cristi Vasilache vis-a-vis de precizie, asa ca am luat o sursa de la un copiator defect ce scoate 35V/5A, si modul cu XL4016. Divizorul testat de mine e format dintr-o rezistenta de 100K si una de 470 Ohm, cu 0,1Ohm pentru curent. Valorile rezistentelor le-am masurat cu un AMPROBE 35XP-A, cel ce apare in poze, iar la rezistenta de 0,1Ohm am luat de buna valoare inscrisa pe ea. Referinta interna la mine arata 1,11V
Imagini de la teste sint mai jos:




Concluzia este (asa cum se poate vedea din imagini) ca precizia este cumva relativa, fiind afectata de rezolutia de 10 biti a lui Atmega328 si precizia masurarii rezistentelor din divizor si a tensiunii de referinta. 
Cind va finaliza si George cu testele de la el voi reveni cu detalii.

Update 22-feb-2019
Pe scheletul codului anterior am testat adaugarea unui modul convertor analog/digital cu interfata I2C ADS1115 .

In cod eu am ales sa afisez doar 5 zecimale.
In poza de mai jos, U masoara tensiunea de 3,3V iar I masoara tensiunea de 5V la un modul arduino nano alimentat din USB-ul macbook-ului, iar T este temperatura furnizata de un DS18B20.
Precizia este superioara celei oferite de 8 biti ai lui Atmega328.

Modulul de sursa cu LM2576 este de aici.




marți, 25 decembrie 2018

DDS cu Attiny85

Zilele trecute, cautind un generator sinusoidal la 50Hz cit mai simplu si stabil, am dat de articolul de aici cu update aici. Parea sa fie ceea ce cautam si i-am facut un test rapid. Omul prezinta un generator de functii in gama 1Hz- 5KHz cu reglajul frecventei din encoder. Formele de unda se aleg printr-o apasare scurta.
Schema preluata mai jos este foarte simpla:
Atentie la pinii lui Attiny85:

La iesire eu am folosit rezistente de 3K3 in locul celor de 4K7, si condensatori de 1nF in locul celor de 4,7nF
Terminalele encoderul traduse pentru encoderul meu arata astfel:

x = GND
Y = SW
C = +5V
A = DT
B = CLK (inversarea lui A cu B afecteaza doar sensul)

Codul pentru varianta finala in care exista si semnalul sinusoidal este aici. Eu nu am facut decit sa dau copy/paste si apoi sa incarc codul in ATTINY85. Initial am pus pe pe Attiny85 bootloaderul cu clock intern 8MHz.

A iesit ca mai jos:
Frecventa si forma de unda implicita se seteaza ca mai jos:
void setup() {
  Wire.begin();
  // Is it a power-on reset?
  if (MCUSR & 1) {
    Wave = 0; Freq = 100;     // Start with 100Hz Sine

Eu am ales sa porneasca cu 50Hz pentru ca voi renunta la encoder si oled. Urmeaza sa fie adaptat intr-un invertor sinusoidal caruia i-a explodat circuitul original. Partea de defazare este pe placa invertorului si este functionala, fiind anterior testata cu semnal de pe un generatorul de mai jos:

Update 28-IUL-2019
Semnale in antifaza obtinute cu ajutorul a trei inversoare (3/4 MMC4011)



duminică, 18 noiembrie 2018

Fake ATX cu WT7520

Zilele astea am fost solicitat sa repar si apoi sa modific sursa de mai jos la tensiunea maxima ce o poate scoate. Cred ca e cea mai "subnutrita" sursa pe care am desfacut-o.



Surpriza a fost sa constat ca din fabrica s-au omis foarte multe componente. Problema ei era de fapt ca nu tinea in sarcina, calculatorul oprindu-se brusc fiind nevoie de intreruperea alimentarii pentru a porni. Asa cum se poate vedea mai jos transformatorul principal si radiatoarele fiind foarte mici.


Am lipit un bec de 220V cu filament in locul sigurantei si dupa inlocuirea a doua condensatoare "bombate" de 10micro/25  a reusit sa porneasca. La testul cu becul de far pe bara de 5V intra protectia trebuind intrerupta alimentarea pentru a reporni (acest bec consuma cca 4,5A la alimentare de 5V). Circuitul de comanda de pe placa este WT7520. Am inceput sa studiez foaia de catalog ca sa ma prind ce-i cu el, in paralel masurind tensiunile de pe placa,si am vazut ca sint niste diferente mari fata de informatiile de la pagina 5. Asa ca am eliminat divizoarele de pe pinii 1,2,3 si am lipit 2 semireglabili intre masa si +5V (firul violet)  ajustind tensiunile din foaia de catalog. Surpiza nu a vrut sa porneasca deloc. Apoi am ajustat semireglabilii la valorile masurate initial (1,8V, 5V, 3,1V, corespunzator pinilor, 1, 2, 3) si astfel a pornit. De la pinul 16 (responsabil cu modificarea factorului de umplere a impulsurilor, implicit tensiunea de iesire), am eliminat rezistentele ce duceau la +3V,5V,12V si le-am lasat doar pe cele ce duc la masa (ca sa pot obtine valoarea maxima). Astfel am obtinut pe bara de 12V o tensiune de 24,13V.
In poza de mai sus se observa cei 2 semireglabili lipiti pe pinii circuitului integrat cu care am "pacalit" prezenta celor 3 tensiuni.


Am lipit un semireglabil de 50K intre masa si "bara de 12V" ca sa vad la ce tensiune minima se duce si am obtinut 5,79V  : 

La  testul cu becul auto a esuat. Apoi am pus in paralel becuri de semnalizare pina cind a inceput sa scada tensiunea de iesire, astfel am ajuns la un consum de 4,5A, peste aceasta valoare incepind sa scada tensiunea. Astfel am eliminat extraprotectiile circuitului, respectiv, pinul 4 si 12 le-am lasat in aer, si acelasi rezultat, la peste 5A scadea tensiunea de iesire (desi pe eticheta este scris altceva). Banuind circuitul integrat cu bube, l-am inlocuit cu altul de pe o placa ce functiona in parametri, acelasi rezultat. Am trecut la inlocuirea diodei duble, si rezultatul a fost acelasi. Asa ca  vinovat a ramas doar transformatorul care fizic este foarte mic.(Nu am mai avut rabdare sa incerc si inlocuirea acestuia, deoarece se dorea max. 4A cu protectie la scurt).
Am cuplat si ventilatorul pe care l-am alimentat din sursa permanenta de 5V care mai avea o infasurare aditionala de 12,8V pentru alimentarea celor 2 tranzistori de comanda, acesta fiind cu adevarat silentios.Se poate alimenta si de pe bara de +5V care are in jur de 11V la maxim), dar am vrut ca acesta sa raceasca radiatoarele si in cazul declansarii protectiei).
Lasata in sarcina cu cca 4A pe 24V a functionat relativ rece, singurul element evident mai cald fiind radiatorul cu cei 2 tranzistori de putere (cei alimentati la 400v) care comanda trensformatorul.
In conditii normale pinul 4 sta in cca 0.4V, si pe masura ce curentul creste tensiunea urca, iar cind depaseste 0,83V blocheaza oscilatorul. Testele finale le-am facut eliminind becul de balast pus in locul sigurantei.

Cel ce mi-a adus sursa la modificat urmeaza sa inlocuiasca dioda dubla cu o punte redresoare din diode schottky, dorind sa obtina 2x20V/3A pentru alimentarea unui amplificator. La 4A riplul era de 9mV cu 2x2200micro/35V.


sâmbătă, 20 octombrie 2018

Test display LCD 6 digiti, 7 segmente cu HT1621

Dupa o relativa ratacire mi-a sosit si mie display-ul. Lui Nicu Florica i-a sosit mai devreme, si a reusit sa faca munca cea mai grea de studiu si a pus o sinteza la el pe blog, asa ca nu am mai inventat o alta roata ci am preluat munca lui. 
Initial am realizat testul lui ca sa-l testez si pe cel ajuns la mine, dupa care am adaugat un senzor DHT11, si un DS1307 pentru a vedea cum se misca cu date reale. Am pastrat schema lui la care DHT-ul l-am legat la D3, la A4 si A5, SDA si SCL de la modulul cu DS1307. Am adaptat codul lui si a iesit ca in imaginile de mai jos (varianta mea de test este disponibila pe github):

Afisare ora si minut

 Afisare temperatura


 Afisare umiditate


 Imaginea cu montajul de test


Am vrut sa sting LED-ul de fundal si am descoperit ca acesta era legat direct la +5V, ca in imaginea urmatoare:

Am folosit o tresa de dezlipit pentru a scoate puntea de cositor din stinga si am facut-o in dreapta. Astfel pinul LED disponibil in dreapta display-ului a devenit functional.


Ca dimensiune se poate vedea mai jos:


In curind urmeaza ca in combinatie tot cu arduino si prescalerul M506 (descris foarte frumos de Nicu Florica aici) sa se transforme in frecventmetru.

Am folosit doar DHT11 cu attiny85 si functioneaza perfect. Codul modificat pe github.

marți, 9 octombrie 2018

Termometru cu DS18B20 cu ATTINY85-digispark pe 7segmente 2 digiti cu74HC595 programat pe MACOS

Am reluat proiectul anterior de data asta cu scopul de a testa programarea unui modul digispark cu Attiny85 pe MACOS (pe windows10  nu a mai vrut sa munceasca driverul micronucleus).
Am folosit acelasi display cu 7segmente si 2 digiti cu 74HC595, iar ca senzor de temperatura am folosit un DS18B20 (tocmai au sosit mai multe).
Testul pe breadboard arata ca mai jos:


Modulul cu Attiny85 este ca in figura:
Din codul postat pe github se deduce foarte usor schema, P0, P1, P2 se duc la display, iar la PB3 senzorul cu o rezistenta de 4k7 la +5V.

Pe MACOS instalarea si programarea acestui modul a fost foarte simpla, trebuie doar scris in arduino IDE la Preferences:
http://digistump.com/package_digistump_index.json

 Apoi din Board Manager se instaleaza pachetul cu drivere (cel corespunzator cursorului de la mouse).


Astfel am reusit sa vad modulul meu:


Si programatorul micronucleus:

Diferenta fata de programarea modulelor arduino este ca modulul digispark nu trebuie sa fie conectat pe USB in momentul cind se da UPLOAD, acesta se va conecta in momentul cind apare mesajul generat de arduino IDE, in partea de jos unde este scris cu portocaliu. De asemenea apare mesaj cind se termina incarcarea. In acest moment se deconecteaza de la USB si se pune pe breadboard.

marți, 25 septembrie 2018

Termometru cu LM335 cu ATTINY85 pe 7segmente 2 digiti cu74HC595

A  aparut necesitatea unui teremometru foarte simplu cu afisare pe 7 segmente cu 2 digiti. Dupa un pic de documentare m-am oprit asupra display-ului de mai jos care are inaltimea de 1,8mm, este compact, si comandat de catre 2x74HC595.

Abuzind de google am gasit un tutorial pentru arduino. Dupa ce m-am imprietenit cu modul de lucru, i-am atasat un LM335, acesta avind si posibilitatea de corectie ( de fapt era singurul tip disponibil acum).
Dupa ce l-am testat pe arduino, am considerat ca e prea puternic pentru un lucru simplu, si am decis sa folosesc un ATTINY85. Codul rezultat este pe github.
O poza din faza de test mai jos:

La partea de masurare cu LM335 m-am inspirat din articolul lui Nicu Florica.
Pentru partea de corectie am folosit schema de mai jos: ( eu folosit un semireglabil de 100K in locul celui de 10K)
Dispunerea pinilor la ATTINY85 se pot observa din figura urmatoare:

Schema de conexiuni (se poate deduce foarte usor si din cod) este:





Update: am adaptat codul si pentru senzor DS18B20:

Cel de jos este realizat cu acelasi senzor in jurul lui arduino nano pe un display 3x7 segmente

Amplificator ultra simplu cu MOS 40W/8Ohm la 2x30V

 Am început construcția unui amplificator cu tranzistori MOS după o schemă proiectată de Ionel Epure , care se împacă foarte bine cu boxele ...