Taula de continguts:

CONTADOR ENERGÈTIC ARDUINO: 10 passos (amb imatges)
CONTADOR ENERGÈTIC ARDUINO: 10 passos (amb imatges)

Vídeo: CONTADOR ENERGÈTIC ARDUINO: 10 passos (amb imatges)

Vídeo: CONTADOR ENERGÈTIC ARDUINO: 10 passos (amb imatges)
Vídeo: ЗЛО ЕЩЕ ЗДЕСЬ ЖУТКАЯ НОЧЬ В СТРАШНОМ ДОМЕ / EVIL IS STILL HERE A TERRIBLE NIGHT IN A TERRIBLE HOUSE 2024, Desembre
Anonim
Image
Image
MEDIDOR ENERGÈTIC ARDUINO
MEDIDOR ENERGÈTIC ARDUINO
MEDIDOR ENERGÈTIC ARDUINO
MEDIDOR ENERGÈTIC ARDUINO

[Reprodueix vídeo]

Pertanyo a un poble d'Odisha, a l'Índia, on és freqüent que es produeixi un freqüent tall de subministrament elèctric. Impedeix la vida de cadascú. Durant la meva infantesa, continuar els estudis després del capvespre era un veritable repte. A causa d’aquest problema, vaig dissenyar un sistema solar per a casa meva de manera experimental. Vaig utilitzar un panell solar de 10 watts i 6 V per il·luminar pocs LED brillants. Després d’afrontar moltes dificultats, el projecte va tenir èxit. Aleshores vaig decidir controlar el voltatge, el corrent, la potència i l’energia del sistema. Això va portar la idea de dissenyar un ENERGY METER. Vaig utilitzar ARDUINO com a centre d’aquest projecte perquè és molt fàcil escriure codi al seu IDE i hi ha un gran nombre de biblioteques de codi obert disponibles a Internet que es poden utilitzar segons He experimentat el projecte per a un sistema solar nominal molt petit (10 Watts), però es pot modificar fàcilment per utilitzar-lo en un sistema de classificació superior.

Podeu trobar tots els meus projectes a:

Funció: Monitorització de l’energia mitjançant pantalla 1. LCD 2. a través d’Internet (pujada Xively) 3. Registre de dades en una targeta SD

Podeu veure el meu nou CONTROLADOR DE CÀRREGA SOLAR ARDUINO MPPT (versió-3.0)

També podeu veure els meus altres instructius a

CONTROLADOR DE CÀRREGA SOLAR ARDUINO (versió 2.0)

CONTROLADOR DE CÀRREGA SOLAR ARDUINO (versió-1)

Pas 1: parts necessàries:

Parts necessàries
Parts necessàries

1. ARDUINO UNO (Amazon) 2. ARDUINO ETHERNET SHIELD (Amazon)

3. LCD de 16x2 CARÀCTERS (Amazon)

4. SENSOR ACTUAL ACS 712 (Amazon) 4. RESISTORS (10k, 330ohm) (Amazon) 5. POTENCIOMETRE 10K (Amazon) 6. JUMPER WIRES (Amazon) 7. CABLE ETHERNET (Amazon) 8. PAU (Amazon)

Pas 2: Potència i energia

Potència: la potència és el producte de la tensió (volt) i el corrent (Amp) P = VxI La unitat de potència és Watt o KW Energia: L’energia és producte de la potència (watt) i el temps (Hora) Hora (kWh) Per la fórmula anterior queda clar que per mesurar l’energia necessitem tres paràmetres: 1. Voltatge. 2. Corrent. 3. Temps

Pas 3: mesura de la tensió

Mesura de la tensió
Mesura de la tensió
Mesura de la tensió
Mesura de la tensió
Mesura de la tensió
Mesura de la tensió

La tensió es mesura amb l’ajut d’un circuit divisor de tensió. Com que el voltatge d’entrada del pin analògic ARDUINO es limita a 5V, he dissenyat el divisor de tensió de manera que la tensió de sortida d’aquest sigui inferior a 5 V. La meva bateria que s’utilitza per emmagatzemar la la potència del panell solar té una qualificació de 6v, 5,5 Ah. Per tant, he de baixar aquest 6,5v a una tensió inferior a 5V. He utilitzat R1 = 10k i R2 = 10K. El valor de R1 i R2 pot ser inferior, però el problema és que, quan la resistència és baixa, el flux de corrent és més elevat a través d’ella com a resultat, una gran quantitat de potència (P = I ^ 2R) es dissipa en forma de calor. Per tant, es pot escollir un valor de resistència diferent, però cal tenir cura de minimitzar la pèrdua de potència a la resistència. Vout = R2 / (R1 + R2) * Vbat Vbat = 6,5 quan està completament carregat R1 = 10 k i R2 = 10 k Vout = 10 / (10 + 10) * 6,5 = 3,25 v que és inferior a 5 v i és adequat per al pin analògic ARDUINO NOTA I he mostrat una bateria de 9 volts al circuit de la placa de barres, per exemple, per connectar els cables. Però la bateria real que he utilitzat és una bateria de plom àcid de 6 volts i 5,5 Ah. a Vout = 3,25 v i valor inferior per a altres tensions de bateria més baixes. AEDUINO ADC converteix el senyal analògic a la corresponent aproximació digital. Quan la tensió de la bateria és de 6,5v, he obtingut 3,25v del divisor de voltatge i sample1 = 696 al monitor sèrie, on sample1 és el valor ADC correspon a 3,25v. Per a una millor comprensió, he adjuntat la simulació en temps real mitjançant un circuit de 123D. 3.25v equivalent a 696 1 equival a 3.25 / 696 = 4.669mv Vout = (4.669 * sample1) / 1000 volts Tensió real de la bateria = (2 * Vout) volt CODI ARDINO: // presa de 150 mostres del divisor de voltatge amb un interval de 2 segons i, a continuació, prometeu les dades de mostres recollides per a (int i = 0; i <150; i ++) {sample1 = sample1 + analogRead (A2); // llegiu la tensió del retard del circuit divisor (2); } mostra1 = mostra1 / 150; voltatge = 4.669 * 2 * mostra1 / 1000;

Pas 4: Mesura actual

Mesura actual
Mesura actual
Mesura actual
Mesura actual

Per a la mesura de corrent he utilitzat un sensor de corrent ACS 712 (20 A) de Hall Effect. Hi ha diferents sensors de corrent ACS712 disponibles al mercat, així que trieu segons el vostre requisit. Al diagrama de la placa de pa, he mostrat el LED com a càrrega, però la càrrega real és diferent. un camp magnètic perpendicular al corrent. Per obtenir més informació sobre el sensor d’efecte Hall, feu clic aquí. El full de dades del sensor ACS 712 es troba aquí. A partir del full de dades 1. ACS 712 mesura 20A positius i negatius, corresponent a la sortida analògica 100mV / A. VCC / 2 = 5v / 2 = 2,5V Calibració: la lectura analògica produeix un valor de 0-1023, que equival a 0v a 5v Així que la lectura analògica 1 = (5/1024) V = 4,89mv Valor = (4,89 * Valor de lectura analògica) / 1000 V, però, segons les fulles de dades, l’offset és de 2,5 V (quan el zero actual obtindrà 2,5 V de la sortida del sensor) Valor real = (valor-2,5) V Corrent en amp = valor real * 10 CODI ARDINO: // prenent 150 mostres de sensors amb un interval de 2 segons i, a continuació, mitjana de les dades de mostres recollides per a (int i = 0; i <150; i ++) {sample2 + = analogRead (A3); // llegir el corrent del retard del sensor (2); } mostra2 = mostra2 / 150; val = (5,0 * mostra2) / 1024,0; actualval = val-2.5; // la tensió de desplaçament és de 2,5 v amperes = actualval * 10;

Pas 5: mesura del temps

Per a la mesura del temps no cal cap maquinari extern, ja que ARDUINO té un temporitzador incorporat. La funció millis () retorna el número de mil·lisegons des que la placa Arduino va començar a executar el programa actual. // calcular el temps en mil·lisegons llarg temps = milisec / 1000; // converteix mil·lisegons en segons

Pas 6: Com ARDUINO calcula la potència i l'energia

totamps = totamps + amps; // calcular el total d’amperis avgamps = totamps / temps; // amperes mitjanes amphr = (avgamps * time) / 3600; // amp-hora watt = voltatge * amplificadors; // potència = tensió * energia actual = (watt * temps) / 3600; Watt-seg es torna a convertir a Watt-Hr dividint 1 hora (3600 seg) // energia = (watt * temps) / (1000 * 3600); per llegir en kWh

Pas 7: sortida visual

Sortida visual
Sortida visual

Tots els resultats es poden visualitzar al monitor sèrie o mitjançant una pantalla LCD. He utilitzat un LCD de 16x2 caràcters per mostrar tots els resultats obtinguts en els passos anteriors. Per als esquemes, consulteu el circuit de la placa de pa que es mostra més amunt. Connecteu el LCD amb ARDUINO com es mostra a continuació: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + Resistor or Potentiometer 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino - No connectat 8. D1 -> Arduino - No connectat 9. D2 -> Arduino - No connectat 10. D3 -> Arduino - No connectat 11. D4 -> Pin Arduino 5 12. D5 -> Pin Arduino 4 13. D6 -> Pin Arduino 3 14. D7 -> Arduino pin 2 15. A -> Arduino Pin 13 + Resistor (retroiluminació) 16. K -> Arduino GND (Backlight ground) CODI ARDUINO: Per a monitor sèrie:

Serial.print ("TENSIÓ:"); Serial.print (voltatge); Serial.println ("Volt"); Serial.print ("ACTUAL:"); Serial.print (amplificadors); Serial.println ("amplificadors"); Serial.print ("POWER:"); Serial.print (watt); Serial.println ("Watt"); Serial.print ("ENERGIA CONSUMIDA:"); Serial.print (energia); Serial.println ("Watt-Hour"); Serial.println (""); // imprimeix els següents conjunts de paràmetres després d'un retard de línia en blanc (2000); per a LCD: per a la pantalla LCD, primer heu d'importar la biblioteca "LiquidCrystal" al codi. Per obtenir més informació sobre la biblioteca LequidCrystal, feu clic aquí Per obtenir informació sobre el tutorial LCD, feu clic aquí. int Llum posterior = 9; void setup () {pinMode (backLight, OUTPUT); // estableix el pin 9 com a sortida analogWrite (backLight, 150); // controla la intensitat de la llum de fons 0-254 lcd.begin (16, 2); // columnes, files. mida de la pantalla lcd.clear (); // neteja la pantalla} void loop () {lcd.setCursor (16, 1); // configureu el cursor fora del recompte de visualització lcd.print (""); // imprimeix un retard de caràcter buit (600); //////////////////////////////////////////// imprimeu energia i energia a una pantalla LCD / ///////////////////////////////////////////////// lcd.setCursor (1, 0); // configureu el cursor a la primera col i a la primera fila lcd.print (watt); lcd.print ("W"); lcd.print (voltatge); lcd.print ("V"); lcd.setCursor (1, 1); // estableix el cursor a la primera col i a la segona fila lcd.print (energia); lcd.print ("WH"); lcd.print (amplificadors); lcd.print ("A"); }

Pas 8: càrrega de dades a Xively.com

Càrrega de dades a Xively.com
Càrrega de dades a Xively.com
Càrrega de dades a Xively.com
Càrrega de dades a Xively.com
Càrrega de dades a Xively.com
Càrrega de dades a Xively.com

Consulteu les captures de pantalla anteriors per obtenir una millor comprensió. Per carregar dades a xively.com la següent biblioteca que es descarregarà primer HttpClient: feu clic aquí Xively: feu clic aquí SPI: Importar des de IDE arduino (croquis -> Importa biblioteca …..) Ethernet: Importar des d’arduino IDE ((croquis -> Importa biblioteca …). Obriu un compte a https://xively.com (abans pachube.com i cosm.com) Registreu-vos per obtenir un compte de desenvolupador gratuït a

Trieu un nom d'usuari, una contrasenya, configureu l'adreça i la zona horària, etc. Rebreu un correu electrònic de confirmació;

a continuació, feu clic a l'enllaç d'activació per activar el vostre compte. Després d’obrir el compte amb èxit, es desviarà a la pàgina de dispositius de desenvolupament

  • Feu clic a la casella + Afegeix dispositiu
  • Poseu un nom al vostre dispositiu i la descripció (per exemple, SEGUIMENT ENERGÈTIC) ·
  • Trieu dades privades o públiques (jo trio privades) ·
  • Feu clic a Afegeix dispositiu

Després d'afegir el dispositiu, se us desviarà a una pàgina nova on hi ha molta informació important

  • Identificador de producte, secret de producte, número de sèrie, codi d'activació ·
  • Identificador de feed, FeedURL, punt final de l'API (l'identificador de feed s'utilitza al codi ARDUINO)
  • Afegiu canals (seleccioneu ENERGY i POWER, però podeu triar segons la vostra elecció) Indiqueu la unitat i el símbol del paràmetre ·
  • Afegeix la teva ubicació ·
  • Claus API (utilitzades al codi ARDUINO, eviteu compartir aquest número) ·
  • Activadors (ping a la pàgina web quan es produeix un esdeveniment, com quan el consum d'energia supera un límit determinat)

Pas 9: Codi Xively i ARDUINO

Aquí he adjuntat el codi complet (versió beta) per al comptador d’energia, excepte el registre de dades de la targeta SD, que s’adjunta per separat al següent pas. / ** Pujada de dades de control de l'energia a xively ** / #include #include #include #include #define API_KEY "xxxxxxxx" // Introduïu la vostra clau d'API Xively #define FEED_ID xxxxxxxxx // Introduïu el vostre ID de feed Xively // Adreça MAC per al vostre Mac de bytes de protecció Ethernet = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Pin analògic que estem supervisant (el blindatge Ethernet utilitza 0 i 1) int sensorPin = 2; unsigned long lastConnectionTime = 0; // l'última vegada que ens vam connectar a Cosm const unsigned long connectionInterval = 15000; // retard entre la connexió a Cosm en mil·lisegons // Inicialitzeu la biblioteca Cosm // Definiu la cadena per al nostre ID de transmissió de dades char sensorId = "POWER"; char sensorId2 = "ENERGIA"; XivelyDatastream datastreams = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Emboliqueu el flux de dades en un canal XivelyFeed (FEED_ID, datastreams, 2 / * nombre de flux de dades * /); Client EthernetClient; XivelyClient xivelyclient (client); configuració nul·la () {Serial.begin (9600); Serial.println ("Inicialització de la xarxa"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Error en obtenir l'adreça IP mitjançant DHCP, provant de nou …"); retard (15000); } Serial.println ("Xarxa inicialitzada"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // enviar dades a xively getData (); // llegeix el flux de dades de xively lastConnectionTime = millis (); // actualitzeu el temps de connexió, així que esperem abans de connectar-vos de nou}} void sendData () {int sensor1 = watt; int sensor2 = energia; datastreams [0].setFloat (sensor1); // power power datastreams [1].setFloat (sensor2); // valor energètic Serial.print ("Potència de lectura"); Serial.println (datastreams [0].getFloat ()); Serial.print ("Llegiu l'energia"); Serial.println (datastreams [1].getFloat ()); Serial.println ("Càrrega a Xively"); int ret = xivelyclient.put (feed, API_KEY); Serial.print ("Codi de retorn PUT:"); Serial.println (ret); Serial.println (); } // obtingueu el valor del flux de dades de xively, imprimint el valor que hem rebut void getData () {Serial.println ("Lectura de dades de Xively"); int ret = xivelyclient.get (feed, API_KEY); Serial.print ("Codi de devolució GET:"); Serial.println (ret); if (ret> 0) {Serial.print ("Datastream és:"); Serial.println (feed [0]); Serial.print ("El valor de potència és:"); Serial.println (feed [0].getFloat ()); Serial.print ("Datastream és:"); Serial.println (feed [1]); Serial.print ("El valor energètic és:"); Serial.println (feed [1].getFloat ()); } Serial.println ();

Pas 10: registre de dades en una targeta SD

Per emmagatzemar dades en una targeta SD, heu d’importar la biblioteca SD. Per fer un tutorial, feu clic aquí Per obtenir més informació sobre la biblioteca SD, feu clic aquí. codi d’escriptura per a pantalla LCD i càrrega de dades xively.com. Però estic intentant millorar el codi de la versió beta perquè un codi únic pugui contenir totes les funcions (pantalla LCD, càrrega de dades Xively i emmagatzematge de dades en una targeta SD). El codi per al registre de dades s’adjunta a continuació. millor codi modificant el meu codi, si us plau, comparteix-lo amb mi. Aquesta és la meva primera instrucció tècnica. Si algú hi troba algun error, no dubti a fer comentaris.. perquè pugui millorar-me. o envieu-me un missatge, de manera que el projecte serà més potent. Crec que serà útil tant per a altres com per a mi.

Concurs de circuits 123D
Concurs de circuits 123D
Concurs de circuits 123D
Concurs de circuits 123D

Tercer premi al concurs de circuits 123D

Recomanat: