Bandi Szasz Postat Februarie 12, 2024 Partajează Postat Februarie 12, 2024 (editat) Da, fix la aia ma refeream, acum stateam si eu sa-l caut cum se numeste. Poti incerca sa vezi daca face la fel sau nu, macar te convingi daca e din cauza memoriei sau nu. Editat Februarie 12, 2024 de Bandi Szasz Link spre comentariu
modoran Postat Februarie 12, 2024 Partajează Postat Februarie 12, 2024 Alt procesor si ai rezolvat p[roblema definitiv. Nu cred ca faci astea pentru vanzare astfel incat fiecare leu sa conteze. Arduino costa 10 lei, cu 20 de lei poti sa folosesti esp32, rpi pico, cred ca si stm32. Link spre comentariu
fratello Postat Februarie 12, 2024 Autor Partajează Postat Februarie 12, 2024 (editat) Pot folosi Wemos D1 ? Rezultatul compilarii pt acesta in poza. Sau sa iau o placa ESP8266 cu 32M Flash ? Editat Februarie 12, 2024 de fratello Link spre comentariu
Bandi Szasz Postat Februarie 12, 2024 Partajează Postat Februarie 12, 2024 (editat) La tine nu Flash-ul e problema, ci RAM-ul, Flash are destul si nano. ESP8266 are 64KB RAM vs Nano care are 2kB. Nu iti trebuie nici 32M flash, in idea daca gasesti cu 4-8-16M si e mai ieftin este arhisuficient pentru ce vrei tu sa faci acolo. Si da, probabil ar rezolva problemele, daca nu te grabesti poti lua de la Ali, e vro 17 lei buc si de ceva vreme a aparut "Choice", cauti produse marcate cu "Choice", iei de 45 de lei si ai transport gratuit, vine cu curierul la usa. Iei 3 bucati cu acelasi bani pe care iai de pe ala de 30 lei + vro 25 transport Editat Februarie 12, 2024 de Bandi Szasz Link spre comentariu
fratello Postat Februarie 12, 2024 Autor Partajează Postat Februarie 12, 2024 (editat) Am "mutat" proiectul pe un Wemos D1 mini. Functioneaza, dar .... bineinteles ca partea de voltmetru este total aiurea :(. Se pare ca A0 la Wemos nu este egal cu A0 la Nano. Deci ... reluare ; vad ce placi mai gasesc prin casa (/magazine). Asa ceva ar fi OK ? Editat Februarie 12, 2024 de fratello Link spre comentariu
zvonacfirst Postat Februarie 12, 2024 Partajează Postat Februarie 12, 2024 In ce sens este aiurea partea de voltmetru? Link spre comentariu
fratello Postat Februarie 12, 2024 Autor Partajează Postat Februarie 12, 2024 " The Wemos boards have a voltage divider consisting of 220K & 100K, so that it can accept voltages up to 1.0*(220+100)/100 = 3.2V. If you want to increase this range, you can just put another resistor in series with the Wemos analog pin. ...Using a 1M resistor in series on the ADC pin I can accept up to 40.26V input, but anything over 13.2v will read as 13.2v" Cu divizorul meu arata ... niste valori total aiurea ; si, oricum, nu va arata peste 13.2 volti (?!). Din ce vad eu: -renunt la partea de termometru -incerc sa rescriu codul folosind o alta librarie pentru fonturi, mai mica -renunt de tot, problema, oricat de mult ajutor as primi, ma depaseste. Link spre comentariu
fratello Postat Februarie 12, 2024 Autor Partajează Postat Februarie 12, 2024 (editat) Cu libraria greiman / SSD1306Ascii asa arata displayul, cu cel mai mare font : Insuficient, pentru mine .... din pacate ! Dar, intr-adevar, acum functioneaza corect, fara blocaje. Codul : #include <Wire.h> #include "SSD1306Ascii.h" #include "SSD1306AsciiWire.h" #include <OneWire.h> #include <DallasTemperature.h> #define I2C_ADDRESS 0x3C #define ONE_WIRE_BUS 2 // Pinul la care este conectat senzorul DS18B20 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress tempDeviceAddress; SSD1306AsciiWire oled; int analogInput = 0; float vout = 0.0; float vin = 0.0; float R1 = 100000.0; // resistance of R1 (100K) float R2 = 10000.0; // resistance of R2 (10K) int value = 0; double temp; //------------------------------------------------------------------------------ void setup() { Wire.begin(); oled.begin(&SH1106_128x64, I2C_ADDRESS); // oled.set2X(); oled.setFont(fixed_bold10x15); oled.clear(); pinMode(analogInput, INPUT); sensors.begin(); sensors.setResolution(tempDeviceAddress, 12); } void loop() { // read the value at analog input value = analogRead(analogInput); vout = (value * 5.0) / 1024.0; // see text vin = vout / (R2/(R1+R2)); if (vin<0.09) { vin=0.0;//statement to quash undesired reading ! } sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); if (tempC != DEVICE_DISCONNECTED_C) { temp=tempC; } else { temp= 99.9; //aici mesajul de eroare senzor !!!! } oled.setCursor(24,0); oled.println("Temp C:"); oled.setCursor(35,2); oled.println(tempC,1); oled.setCursor(26,4); oled.println("Volts:"); oled.setCursor(35,6); oled.println(vin,1); delay(1000); } Editat Februarie 12, 2024 de fratello Link spre comentariu
zvonacfirst Postat Februarie 12, 2024 Partajează Postat Februarie 12, 2024 Am facut acum vreun an o sursa reglabila pentru un amic iar panelmetrul era cu Arduino NANO si Oled de 1.3". Am afisat pe oled mult mai multe informatii, inclusiv elemente grafice, si a functionat fara probleme. Filmuletul de mai jos este tot ce mai am, recuperat dintr-o conversatie pe WhatsApp cu amicul meu. Am pierdut restul din pacate. Poate voi reconstitui cand voi avea timp si voi avea nevoie. Nu inteleg cum un softulet ca cel scris de @fratello poate sa sufoce un uC Atmega328. NANO folosit de mine a fost tot clona China. Link spre comentariu
fratello Postat Februarie 12, 2024 Autor Partajează Postat Februarie 12, 2024 Cu acelasi display am facut si eu o statie de lipit... Si, la fel, afiseaza o multime de informatii ; pe deasupra mai foloseste si libraria u8glib... Link spre comentariu
fratello Postat Februarie 12, 2024 Autor Partajează Postat Februarie 12, 2024 Plecand de la ideea ca cineva a reusit totusi sa inghesuie in Arduino Nano un program atat de complicat (vezi exemplul de mai sus, cu statia de lipit), am luat la puricat acel cod si .... Am reusit sa rescriu codul meu astfel incat am urmatoarele valori : Din pacate, tot se blocheaza... Chiar nu mai stiu ce as putea face/incerca. Am folosit alta placa Arduino, alt senzor DS18B20, alimentarea e din USB. Codul rescris : #include <OneWire.h> #include <DallasTemperature.h> #include <SPI.h> #include <U8glib.h> // https://github.com/olikraus/u8glib #define ONE_WIRE_BUS 2 //Pin DS al senzorului DS18B20 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress tempDeviceAddress; U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); int analogInput = 0; float vout = 0.0; float vin = 0.0; float R1 = 100000.0; // resistance of R1 (100K) float R2 = 10000.0; // resistance of R2 (10K) int value = 0; double temp; void setup() { pinMode(analogInput, INPUT); sensors.begin(); sensors.setResolution(tempDeviceAddress, 11); } void loop() { value = analogRead(analogInput); vout = (value * 5.0) / 1024.0; vin = vout / (R2/(R1+R2)); if (vin<0.09) { vin=0.0;//statement to quash undesired reading ! } sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); if (tempC != DEVICE_DISCONNECTED_C) { temp=tempC; } else { temp= 99.9; //aici mesajul de eroare senzor !!!! } u8g.firstPage(); do { u8g.setFont(u8g_font_helvB24r); u8g.drawRFrame(0, 30, 128, 32, 10); // draws frame with rounded edges if (vin>9.99) { u8g.setPrintPos(20,25); } else { u8g.setPrintPos(38,25); //rand copiat } u8g.println(vin,1); //Prints the voltage u8g.setPrintPos(84,25); u8g.println(" V"); if ((temp<0)&& (abs(temp)<9.9)){ u8g.setPrintPos(28,60); u8g.println(temp,1); //Prints the temperature u8g.drawCircle(87,40,4); u8g.drawCircle(87,40,3); u8g.println(" C "); } else if (temp<0) { u8g.setPrintPos(10,60); } else if (temp>9.99){ u8g.setPrintPos(20,60); } else{ u8g.setPrintPos(38,60); } u8g.println(temp,1); //Prints the temperature u8g.drawCircle(88,40,4); u8g.drawCircle(88,40,3); u8g.println(" C"); } while(u8g.nextPage()); } Ce as mai putea face ??? Sa incerc cu alt display ? Sa incerc alt mod de alimentare a acestui display (ca in poza de mai jos) ? Chiar nu mai stiu ... am obosit. Link spre comentariu
Bandi Szasz Postat Februarie 13, 2024 Partajează Postat Februarie 13, 2024 (editat) Acum 15 ore, fratello a spus: Plecand de la ideea ca cineva a reusit totusi sa inghesuie in Arduino Nano un program atat de complicat (vezi exemplul de mai sus, cu statia de lipit), am luat la puricat acel cod si .... Am reusit sa rescriu codul meu astfel incat am urmatoarele valori : Cu 15% DRAM ocupat nu are cum sa faca buffering la OLED. Asta e diferenta intre codul tau si cel original, in al tau nu se face pixel buffering in DRAM ci se scrie on the fly in controllerul de la OLED, fix cea ce face si libraria aia "Ascii". Merge si fara buffering treaba, e putin mai lent la afisari complete, nu prea merg fonturi custom, etc.. Editat Februarie 13, 2024 de Bandi Szasz Link spre comentariu
fratello Postat Februarie 13, 2024 Autor Partajează Postat Februarie 13, 2024 Multumesc. Sincer ...nu prea am inteles...dar ce as putea face pentru corectie? Link spre comentariu
nico_2010 Postat Februarie 13, 2024 Partajează Postat Februarie 13, 2024 Salut, Am incercat sa reproduc proiectul tau si functioneaza fara probleme de ceva timp. Codul este asta: #include "U8glib.h" // U8glib library for the OLED #include <OneWire.h> #include <DallasTemperature.h> #include <SPI.h> #define ONE_WIRE_BUS 2 //Pin DS al senzorului DS18B20 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress tempDeviceAddress; U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // Atentie! Afisajul este SSD1306, nu SSD1106! const int analogInput = 0; float vout = 0.0; float vin = 0.0; float R1 = 100000.0; // resistance of R1 (100K) float R2 = 10000.0; // resistance of R2 (10K) int value = 0; double temp; void setup() { Serial.begin(38400); pinMode(analogInput, INPUT); sensors.begin(); sensors.setResolution(tempDeviceAddress, 12); } void loop(){ // read the value at analog input value = analogRead(analogInput); vout = (value * 5.0) / 1024.0; vin = vout / (R2/(R1+R2)); if (vin<0.09) { vin=0.0;//statement to quash undesired reading ! } sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); if (tempC != DEVICE_DISCONNECTED_C) { temp=tempC; } else { temp= 99.9; //aici mesajul de eroare senzor !!!! } u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); Serial.println(tempC); delay(500); } void draw(void) { u8g.setFont(u8g_font_helvB24r); // select font // u8g.setFont(u8g_font_profont29r); // u8g.setFont(u8g_font_fub20r); // u8g.setFont(u8g_font_fur20r); u8g.drawRFrame(0, 30, 128, 32, 10); // draws frame with rounded edges if (vin>9.99) { u8g.setPrintPos(20,25); } else { u8g.setPrintPos(38,25); } u8g.println(vin,1); //Prints the voltage u8g.setPrintPos(84,25); u8g.println(" V"); if ((temp<0)&& (abs(temp)<9.9)){ u8g.setPrintPos(28,60); u8g.println(temp,1); //Prints the temperature u8g.drawCircle(87,40,4); u8g.drawCircle(87,40,3); u8g.println(" C "); } else if (temp<0) { u8g.setPrintPos(10,60); } else if (temp>9.99){ u8g.setPrintPos(20,60); } else{ u8g.setPrintPos(38,60); } u8g.println(temp,1); u8g.drawCircle(88,40,4); u8g.drawCircle(88,40,3); u8g.println(" C"); } Si rezultatul este asta: Verifica fuse-bits inca odata si vezi daca sunt corecti. Senzorul este cumparat de la Co...ex. Am folosit Arduino IDE1.8.9 Link spre comentariu
fratello Postat Februarie 13, 2024 Autor Partajează Postat Februarie 13, 2024 Multumesc ! Voi incerca si eu cu displayul din dotare. De curiozitate ... lasati montajul sa functioneze ; al meu s-a blocat peste noapte... Fuse trebuie sa fie : low FF, high DA, ext FD ? Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum