Mircea Postat August 27, 2022 Partajează Postat August 27, 2022 Acum 11 ore, Mircea a spus: Formula fiind: 5x1024x?=valoarea dorita cap de scala. ? este raportul de divizare al divizorului format din R1 si R2. Inainte sa ma corecteze cineva, si pe bune, in loc de 1024 trebuie 1023. Sunt 1024 de valori, de la 0 la 1023. D-aia 1023. Link spre comentariu
nico_2010 Postat August 27, 2022 Partajează Postat August 27, 2022 Acum 40 minute, Mircea a spus: Inainte sa ma corecteze cineva, si pe bune, in loc de 1024 trebuie 1023. Sunt 1024 de valori, de la 0 la 1023. D-aia 1023. Tocmai ai gresit cu valoarea 1023! Sunt 1024 de valori (inclusiv 0 este o valoare), deci trebuie impartit la 1024. Link spre comentariu
Mircea Postat August 27, 2022 Partajează Postat August 27, 2022 Daca citesti la ce formula m-am referit, ai sa intelegi de ce 1023. Hint: e o inmultire acolo. Link spre comentariu
nico_2010 Postat August 27, 2022 Partajează Postat August 27, 2022 Mea culpa! Am inteles despre ce vorbesti. Link spre comentariu
mihai 7 Postat August 31, 2022 Autor Partajează Postat August 31, 2022 Mulțumesc tuturor celor care m-au ajutat, montajul funcționează, sunt mulțumit de rezultat. Link spre comentariu
aetius Postat August 31, 2022 Partajează Postat August 31, 2022 Pune un cod , poate mai exista doritori...eventual o schema. Multumesc. Link spre comentariu
vijelie02 Postat August 31, 2022 Partajează Postat August 31, 2022 Proiectul o fi pe bani ... schema si codul trebuiau postate cand s-a afirmat buna functionare. Link spre comentariu
nico_2010 Postat Septembrie 1, 2022 Partajează Postat Septembrie 1, 2022 Pentru @aetius si @vijelie02: schema se regaseste in link-ul pus de initiator in prima postare. Dar asa se intampla cand nimeni nu citeste cap-coada topicul. Pentru cod, sunt suficiente informatii ca sa-l rescrieti, sau cumva vreti mura-n-gura? Link spre comentariu
Vizitator Postat Septembrie 1, 2022 Partajează Postat Septembrie 1, 2022 La 31.08.2022 la 16:49, mihai 7 a spus: Mulțumesc tuturor celor care m-au ajutat, montajul funcționează, sunt mulțumit de rezultat. Eu cred ca normal era sa postezi ceva de genul: "In urma celor discutate cu voi am ajuns la urmatoarea varianta de hard si soft: ..." Cam asa se procedeaza pe alte "eforumuri". Link spre comentariu
aetius Postat Septembrie 1, 2022 Partajează Postat Septembrie 1, 2022 @nico_2010 iti urmaresc postarile nu numai aici dar si in afara forumului , respect pentru ceia ce faci... Sunt un programator de weekend ,dar nu mi se pare corect s-a citesc 10 pagini s-a vad ce modificari a facut initiatorul topicului ,atit la schema electrica cat si in soft. Daca urmaresti topicurile deschise de mine (putine )la final am atasat codul la care am ajuns si functional asa cum vreau eu si este liber fiecare sa-l modifice cum doreste Eu asa cred ca este un forum in care ar trebui s-a beneficiem toti de experienta fiecaruia,... Multumesc de citire. Link spre comentariu
mihai 7 Postat Septembrie 19, 2022 Autor Partajează Postat Septembrie 19, 2022 (editat) Bună seara tuturor! Revin cu informațiile cerute și îmi cer iertare pentru că nu am postat aceste informații mai devreme, încălcând în felul acesta regulile de bună-purtare pe un forum. Nu am dorit să păstrez secretul în ceea ce le privește, proiectul nu este comercial, l-am realizat doar pentru mine. Doar să vă fie de folos, pentru ca eu am realizat o îmbinare între softul de încărcare acumulatori discutat la pagina: și o variantă simplificată la maxim a programului propus de domnul @Liviu.Mihaiu la pagina 2 din această postare. Menționez că am folosit microcontroller-ul Attiny85, dar fără aschimba referința de tensiune la 1.1 V , așa cum mi-a sugerat domnul @Mircea și alți colegi, pentru că nu am mai dispus de timp și am preferat să mă opresc aici. În schimb, am compensat eroarea de citire a tensiunii pe un acumulator de 1.2V folosind în cod valoarea de 860mV în loc de cea de 900mV, la care doresc să se oprească descărcarea. În felul acesta, descărcarea se oprește de fapt la o valoare apropiată de 900mV: if ((voltageProbe >= 860) && (voltageProbe < 1600) || (voltageProbe >= 6300) && (voltageProbe < 10000)) /* NiMh Charger / Discharger with AtTiny85 @ 1Mhz Suitable for NiMh and NiCD battery pack. Default is for charging 7 cells 280mAh ( charging 7.5 hours/ 56mAh) Discharging for 1 cell and 7 cells 280mAh Need some hardware/software adjustment for changing current / cells number See http://arduinoelettronica.wordpress.com/ */ #include "ATtinySerialOut.hpp" float valueProbe; //variable to store the value of analogPin float voltageProbe; //calculated voltage at analogPinOne float R1 = 32800.00; // valoarea masurata a resistorului R2 (ohmi) float R2 = 14800.00; // valoarea masurata a resistorului R1 (ohmi) float cutoffTemperatureC =37; //maximum battery temperature that should not be exceeded 35 (in degrees C) long cutoffTime =27000000; //maximum charge time of 7.5 hours that should not be exceeded (27000000) long milliscutoff; float rawvoltage; float millivolts; float celsius; float kelvin; const int inputPin_incarcator = A1; const int outputPin_incarcator = 0; const int inputPin_descarca = A3; const int outputPin_descarca = 1; const int outputPin_temperatura= A2; const int numReadings = 30; // number of analog read before checking battery status const int multi = 1614; // multi coefficent for obtaining millivolts from analogread long interval = 1000; // interval for pulse charging and analog read - don't change this long interval2 = 920; // pulse off interval - you can adjust power with this. Use 100 for 2-4Ah battery packs, 500 for 1-2Ah battery pack long interval2b=interval2; long previousMillis,currentMillis,currentMillis2,trickleMillis = 0; unsigned int readingtemp; unsigned int total = 0; unsigned int average,medium,maxmedium = 0; boolean executed,endcharge,trickle=false; // booleans for controlling various activities (for example "end of charge") unsigned int myarray [7]; // array for keeping last 7 readings int index,i = 0; void setup() { Serial.begin(9600); pinMode(outputPin_incarcator ,OUTPUT); pinMode(outputPin_descarca, OUTPUT); pinMode(inputPin_descarca, INPUT); // Some readings for initial check for (i=0;i<10;i++) { readingtemp = analogRead(inputPin_incarcator); total=total+readingtemp; } average = (((float)total / 1023.0) * (float)multi) / 10.0 + 0.5; if (average<=70) endcharge=true; // If there is no battery, end charge Serial.println(average); total=0; average=0; } void pusharray() { // push the array for (i=0;i<=5;++i) { myarray[i]=myarray[i+1]; } myarray[6]=average; } void voltread() { readingtemp = analogRead(inputPin_incarcator); // read analog input total= total + readingtemp; index++; // if numReadings reached, calculate the average if (index==numReadings) { index=0; average = (((float)total / 1023.0) * (float)multi) / numReadings + 0.5; if (average<=70) endcharge=true; // stop charge if battery is detached total=0; pusharray(); // insert new average in array medium=(float)(myarray[6]+myarray[5]+myarray[4]+myarray[3]+myarray[2]+myarray[1]+myarray[0])/7.0+0.5; // calculate the average of the last 7 readings if (medium>maxmedium) maxmedium=medium; // save the value of highest medium in "maxmedium" } } void temperatureread() { rawvoltage= analogRead(outputPin_temperatura); millivolts= (rawvoltage*5000) /1024; kelvin= (millivolts/10); celsius= kelvin - 273; } void loop() { valueProbe = analogRead(inputPin_descarca); // read analog input voltageProbe = ((valueProbe* 5000)/1024) * ((R1+R2)/R2); //calculate voltage at probe in mV milliscutoff=millis(); temperatureread(); currentMillis = millis(); // executed every "interval" millis if(currentMillis - previousMillis > interval) { voltread(); // call reading and check volts function digitalWrite(outputPin_incarcator,LOW); // temporaly stop charging previousMillis = currentMillis; executed=false; // boolean for setting and checking if has been yet turned ON charge if ( (milliscutoff > cutoffTime) || (celsius > cutoffTemperatureC) ) endcharge=true; // if final trickle charge end, end charge Serial.print("Voltage Probe (mV): "); //display voltage at probe Serial.println(voltageProbe); if ((voltageProbe >= 860) && (voltageProbe < 1600) || (voltageProbe >= 6300) && (voltageProbe < 10000)) digitalWrite(outputPin_descarca, HIGH); else digitalWrite(outputPin_descarca,LOW); } currentMillis2 = millis(); // executed "interval2" millis after turning OFF charge) if ((currentMillis2 - previousMillis > interval2) && (!executed)) { executed=true; if (!endcharge) { digitalWrite(outputPin_incarcator,HIGH); // if battery is not charged, re-enable charging } } } Eu mă declar pe deplin satisfăcut, întrucât am reușit să realizez atât încărcarea, cât și descărcarea folosind un singur Attiny85. Este adevărat că montajul nu funcționează ireproșabil (de exemplu, eu am setat ca încărcarea să se oprească după 7.5 ore, dar aceasta se oprește cu aprox. 15 minute mai devreme), dar nu sunt dispus să investesc mai mult timp în proiect, iar acesta este util și în starea actuală. Atașez și o fotografie cu panoul frontal, care știu că nu arată tocmai grozav. Aici se pot observa un led verde care indică alimentarea montajului, unul roșu care indică încărcarea acumulatorului, precum și un led albastru care indică faptul că un acumulator se descarcă. Am folosit două comutatoare On-Off-On: 1) primul pentru a schimba intensitatea curentului de încărcat (corespunzător unui acumulator de 8.4V, unuia de 1.2V tip AA și altuia de 1.2V tip AAA) 2) cel de-al doilea pentru a comuta între trei valori de rezistențe, necesare descărcării unui acumulator de 8.4V, unuia de 1.2V tip AA și altuia de 1.2V, tip AAA. Deasemenea, am folosit o sursă variabilă, care-mi oferă tensiuni în plaja 1.2V - 10.9 V, precum și tensiunea de 12.5V separat, pe care o folosesc pentru a încărcă acumulatori de 8.4V reglabilă din potențiometrul de pe panoul frontal, Și nu în ultimul rând, am folosit și un voltmetru de panou pentru a afișa tensiunea de încărcare în Volți (calculată după formula n*1.2+5, unde n reprexintă numărul de celule are se încarcă). Spor celor care doresc să îmbunătățească acest proiect! Editat Septembrie 19, 2022 de mihai 7 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