sâmbătă, 28 septembrie 2019

Voltmetru dual cu AD7705 pe OLED I2C

Am testat funcționarea pe arduino nano a unui modul convertor analog digital  pe 16 biți cu AD7705 cu interfață SPI ca cel din poza de mai jos:


Modul de conectare la arduino se găsește aici, către finalul fișierului: https://github.com/kerrydwong/AD770X/blob/master/AD770X.h  :

pinMOSI = 11; //MOSI
MISO = 12; //MISO
SPIClock = 13; //SCK
CS = 10; //CS
RST=RST arduino

După ce am verificat (pe serial monitor) exemplul din lib, am conectat un OLED I2C 128x32, am pus V- (de la modulul CAN) la GND și am aplicat tensiune pe ambele V+ dintr-o sursă dublă cu reglaj independent, a ieșit ca mai jos:
 Aici se poate vedea valoarea sursei de semnal ce am aplicat-o pe cele două intrări V+:
Precizia si liniaritatea (pe o plajă de 0-1,5V) par să fie destul de bune, cel puțin comparativ cu aparatul de măsură folosit.
Codul testat este pe github.

vineri, 27 septembrie 2019

Radio with TEA5767 on ATTINY85 with 7 segments HT16K33

Pentru un viitor proiect  am testat un radio foarte simplu cu TEA5767 ce m-a inspirat de aici: http://forklg.ru/viewtopic.php?f=98&t=1173
Testat pe arduino uno nu am reușit (pe display-urile ce le aveam disponibile) să-l fac să aprindă virgula decât în situația când frecvența afițată era mai mare de 100. Având o rezervă de module cu HT16K33 (drive LED cu interfață I2C) am înlocuit afișorul  cu TM1637, cu acesta pe I2C. Astfel a început să funcționeze normal. În plus i-am pus limite la frecvența minimă și maximă.  Unul din butoane incrementeză frecvența pozitiv, celălalt negativ.

if(f_ini<87.5) f_ini=87.5;
if(f_ini>108) f_ini=108;

Văzând gradul mic de ocupare a codului  și numărul mic de legături, am portat codul pentru ATTINY85.
Mai jos este poza cu modulul folosit.

Acesta din urmă are logica intrărilor pe invers, asa ca am legat rezistentele la plus pentru a nu mai face modificari in cod .
Am pus pe onedrive și un filmuleț scurt: https://1drv.ms/v/s!Ag3156arz2JqlTUW6c5FQ5a7g244?e=4wTOje

Încă mai există loc pentru a implementa și memorarea ultimului post, însă deocamdată nu mă interesează.

luni, 23 septembrie 2019

Statie meteo cu Esp8266 pe TFT 2,8 240X320 ILI9341

Am testat funcționarea unei stații meteo pe display TFT cu rezoluția de 240x320 ce are ca driver ILI9341 legat la un  ESP8266. Sursa de inspirație a fost https://www.instructables.com/id/ESP8266-Colored-Weather-Station/ .
Mai multe detalii se găsesc pe site-ul de inspirație, iar mai departe fac doar un rezumat scurt.
TFT-ul la ESP8266 l-am legat astfel:
CS-GPIO5, RST-RST, DC-GPIO16, MOSI-GPIO13, SCK-GPIO14, LED-+3,3V, MISO-GPIO12
Partea de touch am lasat-o deocamdata în aer, iar LED-ul TFT-ului l-am legat direct la +3,3V 
Definițiile pentru DC și CS le-am pus direct aici în tab-ul principal:
ILI9341_SPI tft = ILI9341_SPI(5, 16); pentru că nu a vrut să le ia din settings.h.
Apoi mi-am facut un cont free pentru a obține un api_key pentru  meteo: https://docs.thingpulse.com/how-tos/openweathermap-key/ , iar aici am căutat ID-ul pentru Iași: https://openweathermap.org/city/675810. În linia 65 de la settings.h am modificat :
#define UTC_OFFSET +1
înlocuind 1 cu 2 pentru a obține ora României.
Tot aici, în liniile:
#define WIFI_SSID "your-ssid"
#define WIFI_PASS "your-wifi-password" 
am trecut setările mele de wifi.
Apoi am început să caut lib-urile necesare. Pe github am pus o arhiva ce contine folderul Arduino cu codul si lib-urile necesare, folosite de mine. Practic trebuie redenumit dosarul curent, și copiat conținutul arhivei în locul acestuia. În poza de mai jos este screen-ul de la macbook unde am testat din nou proiectul, verificând astfel daca nu mi-a scăpat ceva la arhivarea de pe Ubuntu.

După compilarea finală  a ieșit ca mai jos:

sâmbătă, 21 septembrie 2019

Ceas cu afisare pe TFt cu ILI7575 cu reglaj

La solicitarea unei cunoștințe, pornind de la materialul de aici: https://simple-circuit.com/arduino-ds3231-st7735r-color-tft/ , am adaptat codul pentru un shield TFT de 2,8" cu ILI7575.
Din nefericire acest display TFT nu a vrut să se aprindă decât cu lib-ul lui JoaoLopesF . La acest lib încă nu m-am prins cum să-i adaug alte fonturi.
Ca să pot folosi A4 si A5 de la Arduino UNO pentru I2C-ul lui DS3231, am eliminat pinul reset de la TFT și l-am legat la reset-ul lui Arduino,
In cod modificarea este: 

#define LCD_RESET 0 // Can alternately just connect to Arduino's reset pin

De la TFT am eliminat și cei 4 pini corespunzatori conectarii SD-ului, pentru a face loc la cele 2 butoane și pentru senzorul DHT11.
Modificările se pot vedea în imaginea de mai jos:
După adaptarea codului (conform "caietului de sarcini") a ieșit ca mai jos:
Funcționalitățile butoanelor au ramas aceleasi, adică la apasarea lungă a butonului 1 se intră in mod programare situație în care fileaza câmpul de reglat, din butonul 2 se incrementează pozitiv după care  este reluat de la 0. După reglarea minutelor, apăsarea butonului 1 resetează secundele și iese din mod programare.
Pun și un link către un filmuleț scurt ce arată modul de reglaj.
Codul adaptat este pe github.

duminică, 15 septembrie 2019

Ceas matricial NTP cu ESP8266 pe matrice I2C 2x8

Cu ceva timp in urma am luat din greseala citeva placute cu HT16K33 (driver I2C) ce voiam sa le folosesc cu un display 4x7 segmente. Placuta arata ca cea de mai jos:
iar cea dorita de mine pentru 7 segmente trebuia sa fie asa:

Abuzind de google am gasit utilizarea si pentru cele luate gresit. Acestea se folosesc pentru conectarea a doua matrici de 8x8 LED-uri. In link sint detalii despre acestea.
Eu am folosit doua matrici de 8x8 LED-uri (ceva mai mari decit cele propuse de Adafruit ) ce le-am lipit pe o placa de test si am facut legaturile cu fire, ca in schema de mai jos:
Aici A0 se duce la A2 si invers (posibil eroare de redactare).
A iesit ca mai jos:

Tot abuzind de google am gasit un mod de a utiliza alte fonturi mai mici decit cele din lib-ul lui HT16K33, astfel incit sa incapa 4 cifre si sa pot face un ceas sincronizat cu NTP bazat pe ESP8266 fara RTC.
Am facut citeva mici modificari la afisare (i-am pus puctele despartitoare, am modificat ora pentru fusul orar din Romania si afisarea orelor fara AM/PM) iesind ca mai jos:
 Desi luminozitatea aici este setata la 1, ( matrix.setBrightness(1);) este foarte vizibil ziua pe lumina, iar noaptea nu deranjeaza.

Si un mic filmulet cu functionarea, in linkCodul meu cu modificarile facute este tot pe github. Fisierul WiFi_Network.h (aici pune SSID-ul si parola de WIFI) trebuie copiat in acelasi folder cu Feather_Matrix_NTP_Clock.ino
consumul este nesemnificativ (0.01A , nu am reusit sa-l prind poza)
 La ESP8266, I2C-ul este pe GPIO5 si GPIO4 (D2, D1)

.



duminică, 8 septembrie 2019

Statie meteo cu ESP8266 pe TFT

Am folosit informatiile de aici, pentru a testa functionarea unui TFT de 2" cu ILI9225 cu rezolutie 160x220 pe un modul cu ESP8266-12. Mai jos sint imaginile cu ESP-ul si TFT-ul. TFT-ul testat pe Atmega 328 este enervant de lent, insa aici legat cu ESP8266-12 mi s-a parut ceva mai rapid.


Pentru programare am folosit informatiile de aici, iar pinout-ul este mai jos:
Programarea se face ca in schema de mai jos:

iar ideea este urmatoarea: pentru a intra in modul programare se leaga GPIO0 la masa apoi se pune reset la masa, se revine  cu resetul apoi cu GPIO0, acum se poate face upload la cod, cind se termina de incarcat se apasa din nou reset dupa care ruleaza codul incarcat.
Display-ul este legat astfel, conform liniei de cod
UTFT myGLCD ( ILI9225B, 13, 14, 15, 2, 12 );//SDI (MOSI), SCK, CS, RESET, DC / GPIO13,14,15,2,12
Am evitat conectarea la GPIO0 (asa cum este pe blogul de inspiratie) deoarece la punerea sub tensiune intra automat in mod programare (cel putin asa se comporta modulul testat acum).
TFT-ul meu avind rezolutia mai mica (160x220 fata de 240x320) a trebuit sa redimensionez afisarea.
Informatiile meteo se iau de pe site-ul https://yandex.ru/pogoda/omsk/informer , iar pentru Iasi a rezultat 15090 conform cu ceea ce se vede mai jos:
Nr este util in linia de aici:

Link = "/bar/reginfo.xml?region=15090";

<a href="https://clck.yandex.ru/redir/dtype=stred/pid=7/cid=1228/*https://yandex.ru/pogoda/15090" target="_blank"><img src="https://info.weather.yandex.net/15090/1_white.ru.png?domain=ru" border="0" alt="Яндекс.Погода"/><img width="1" height="1" src="https://clck.yandex.ru/click/dtype=stred/pid=7/cid=1227/*https://img.yandex.ru/i/pix.gif" alt="" border="0"/></a>
Codul meu modificat pentru ILI9225, si lib-urile utilizate sint pe github.
A iesit ca mai jos:
 T_loc este temperatura furnizata de catre DS3231 (GPIO4=SDA, GPIO5=SCL), celelalte date sint culese de pe site-ul rusesc.
ESP-ul actual l-am folosit tot cu o placa adaptoare recuperata de la un alt test unde a decedat ESP-ul.
Am adoptat  lipirea firelor, datorita uzurii avansate a breadboard-urilor din dotare.
La ceea ce se vede mai sus consumul de resurse se poate vedea mai jos:


duminică, 30 iunie 2019

Indicator V-A cu ATTINY85 si ADS1015 pe LCD 8X2

La sursa din articolul anterior, am facut upgrade indicatorului de tensiune și curent. Indicatorul utilizat a fost descris tot anterior însa marele neajuns era viteza de masurare și precizia scăzută.
Astfel i-am adaugat un convertor analog digital pe I2C de tip ADS1015  . Link-ul duce către un modul  identic unde este foarte bine documentat
La schema de conectare anterioară aveam ocupați pinii pentru I2C asa că i-am relocat ca să pot conecta ADS-ul.
Schema de baza îi aparține lui Nicu Florica eu doar am modificat-o.

Din cod se deduce ușor noua configurație. La ADS1015 am pus  pinul ADR la GND  pentru a obține adresa 0x48 . La A0 am legat un divizor cu 100K si 0,47K. iar A1 l-am legat direct la ieșirea rezistenței de 0,1Ohm care e folosită ca senzor de curent pentru TL494.
În cod la linia
tensiune=(0.0043*Voltage);

0,43 este factorul de divizare rezultat dupa ce am masurat rezistențele.

Testat off-line precizia a fost super bună, însă după ca l-am introdus în cutia sursei am constatat în sarcina o abatere a indicației tensiunii de iesire datorată căderii de tensiune pe rezistența de 0,1Ohm. Indicatorul are masa comuna cu circuitul lui TL494, așa că urmează ori să înlocuiesc rezistența de 0,1Ohm cu una mai mică (aceasta "manâncă" 1V la 10A), și să recalculez protecția lui TL494, ori să pun un șunt separat indicatorului cu modificarea codului.
Codul ocupă relativ puțin, așa că dacă voi folosi un LCD16X2 voi putea să dau o utilitate și celorlalte două intrari ale lui ADA1015 care acum au ramas nefolosite.

Mai jos câteva imagini de la teste.






Voltmetru dual cu AD7705 pe OLED I2C

Am testat funcționarea pe arduino nano a unui modul convertor analog digital  pe 16 biți cu AD7705  cu interfață SPI ca cel din poza de mai ...