Sistem de monitorizare productie energie verde(eoliana si fotovoltaica) realizat cu Arduino Uno

1. Arduino Uno;
Arduino Specificatii :
Microcontroler: ATmega328
Tensiune de lucru: 5V
Tensiune de intrare (recomandat): 7-12V
Tensiune de intrare (limita): 6-20V
Pini digitali: 14 (6 PWM output)
Pini analogici: 6
Intensitate de iesire: 40 mA
Intensitate de iesirepe 3.3V: 50 mA
Flash Memory: 32 KB (ATmega328) 0.5 KB pentru bootloader
SRAM: 2 KB (ATmega328)
EEPROM: 1 KB (ATmega328)
Clock Speed: 16 MHz
2. Ethernet shield;
Ethernet shieldDescriere :
Modulul Internet pentru Arduino permite platformei Arduino sa se conecteze la Internet. Fizic, consta intr-o placuta similara ca forma cu platforma Arduino.
Ethernet shield
Descriere :
Pentru a o folosi, se conecteaza deasupra Arduino, introducand pinii modulului Internet in pinii corespondenti de pe Arduino. Astfel, ai la dispozitie (aproape) toti pinii Arduino direct pe modul Internet. Aproape, pentru ca pinii 10, 11, 12 si 13 sunt utilizati de modulul Internet pentru conectarea cu Arduino. Toti ceilalti pini pot fi folositi in mod obisnuit.
3. Senzori de curent noninvazivi;
Ethernet shield Specificatii tehnice :
Plaja de valori: AC 0-75A RMS, DC 0-100A
4. Senzor de tensiune;
Ethernet shield Specificatii tehnice :
1.Voltage input range : DC0-80 V
2.Voltage detection range : DC0.02445 V-80 V
3.Voltage analog resolution : 0.00489 V
4.DC input interface : red terminal positive with VCC, negative with GND
5. Senzori de temperatura;
Ethernet shield Specificatii tehnice :
DS18B20 este un senzor digital de temperatura cu rezolutie programabila intre 9 si 12 biti. Comunicatia se realizeaza prin magistrala 1-Wire, ce permite conectarea mai multor dispozitive pe acelasi fir. Identificarea se realizeaza cu ajutorul unui ID unic pe 64 biti, stocat in memoria senzorului.

Nu necesita componente externe
Poate fi alimentat direct din linia de date (3 ... 5.5V)
Gama temperaturilor masurate: -55C ... +125C
Acuratete: +/-0.5C in gama -10C ... +85C
Rezolutie programabila intre 9 si 12 biti
Converteste temperatura intr-un cuvant pe 12 biti in maximum 750 ms
5. Optional un display LCD 16x2;
Ethernet shield Specificatii tehnice :
LCD-ul poate sa afiseze 32 caractere pe 2 randuri . Functioneaza la o tensiune de 3 V.
Controller: HD44780;
Dimensiuni: 80mm x 36mm;
Culoare caractere: alb;
Culoare background: albastru;

      Modulul citeste valorile intrarilor analogice la care sunt conectati senzorii de curent (unul pentru panourile fotovoltaice si unul pentru turbina eoliana), senzorul de tensiune (pentru bancul de baterii) si o intrare digitala pentru senzorii de temperatura (pentru masurarea temperaturii bancului de baterii si a mediului exterior), le transmite serverului web (prin metoda POST) si se apeleaza un script PHP care insereaza datele intr-o baza de date. Datele astfel transmise sunt valorile medii calculate in urma citirilor la un interval de 10 ms timp de 2 secunde(200 esantioane), rezultand astfel inserari in baza de date la un interval 2-3s, aproximativ 1200 esantioane pe ora.

      Datele de intrare sunt valori analogice ale tensiunilor citite la bornele senzorilor (0-5v), acestea sunt convertite in valori digitale (0-1023) de catre un convertor analog-digital si in functie de tipul de senzor se aplica o formula de calcul in urma careia rezulta valoarea finala: V pt. tensiune respectiv A pentru curenti.
Ex1:
sensorValue = analogRead(A5); // citire intrare analogica
U=(float)((sensorValue)*25)/1023; // calcul tensiune citita
Ex2:
sensorValue = (analogRead(A4)-507); // citire intrare analogica
if(sensorValue==1 or sensorValue==-1) sensorValue=0; //corectie erori
If=(float)sensorValue*0.215; // calcul valoare curent citita

#include<LiquidCrystal.h>

#include<Ethernet.h>

#include<SPI.h>

#include<avr/wdt.h>

#include<OneWire.h>

#include<DallasTemperature.h>

 

//Datawireispluggedintoport6ontheArduino

#defineONE_WIRE_BUS6

#defineTEMPERATURE_PRECISION9

intDS18S20_Pin=6;//DS18S20Signalpinondigital6

 

//SetupaoneWireinstancetocommunicatewithanyOneWiredevices(notjustMaxim/DallastemperatureICs)

OneWireoneWire(ONE_WIRE_BUS);

//PassouroneWirereferencetoDallasTemperature.

DallasTemperaturesensors(&oneWire);

 

//Networkconstants

bytemac[]={0x00,0x23,0xdf,0x82,0xd4,0x01};

IPAddressip(192,168,0,177);

IPAddressserver(212,146,85,89);//free-energy-monitor.com

intport=80;

LiquidCrystallcd(9,8,5,4,3,2);

 

 

 

EthernetClientclient;

//Clientclient(server,port);

//intlightPin=0;//defineapinforPhotoresistor

floatIf=0,Ie=0,U=0;

intsequence;

floattemp_bat=0,temp_mediu=0;

 

intblocaj=0,sensorValue;

booleanflag_setat=false;

 

intreciever=0;

 

voidsetup(){

 

pinMode(2,OUTPUT);

sensors.begin();

Serial.begin(9600);

lcd.begin(16,2);

lcd.print("StartMonitor!");

sequence=0;

Ethernet.begin(mac,ip);

delay(1000);

 

if(blocaj==1){

//resethardware

blocaj=0;

digitalWrite(7,LOW);//pinuldigital3conectatprinfirlapinuldeRESET

}

wdt_enable(WDTO_8S);

}

 

voidloop(){

 

wdt_reset();

if(!flag_setat){

blocaj=1;

flag_setat=true;

}

 

sensorValue=analogRead(A5);//readanaloginputpin0

U=(float)((sensorValue)*25)/1023;

U=(float)U*4.00;

 

sensorValue=(analogRead(A4)-507);

if(sensorValue==1orsensorValue==-1)sensorValue=0;

If=(float)sensorValue*0.215;

 

sensorValue=(analogRead(A3)-507);

if(sensorValue==1orsensorValue==-1)sensorValue=0;

Ie=(float)sensorValue*0.215;

 

sensors.requestTemperatures();

temp_bat=sensors.getTempCByIndex(0);

temp_mediu=sensors.getTempCByIndex(1);

 

httpPut("http://free-energy-monitor.com/quickstart.php?lumina=");

Serial.println(sequence);

sequence++;

lcd.setCursor(0,0);

reciever=digitalRead(2);

 

delay(1000);

lcd.clear();

//Serial.flush();

}

 

voidhttpPut(char*url){

if(!client.connect(server,port)){

Serial.println("EXCEPTION:duringHTTPPUT.Couldnotconnect");

lcd.setCursor(0,0);

lcd.print("EXCEPTION:HTTPPUT.");

lcd.setCursor(0,1);

lcd.print("Couldnotconnect");

//delay(5000);

delay(2000);

return;

}

 

client.print("POST");

client.print("");

client.print(url);

client.print(If);

client.print("&tensiune=");

client.print(U);

client.print("&curent=");

client.print(Ie);

client.print("&temp_bat=");

client.print(temp_bat);

client.print("&temp_mediu=");

client.print(temp_mediu);

client.print("&tabela=data_log_securiceni");

client.println("HTTP/1.0");

client.println();

 

 

lcd.setCursor(0,0);

//lcd.print("U=");

lcd.print(U,1);

 

lcd.setCursor(4,0);

lcd.print("If=");

lcd.print(If,1);

 

lcd.setCursor(10,0);

lcd.print("Ie=");

lcd.print(Ie,1);

 

lcd.setCursor(0,1);

lcd.print("Tb=");

lcd.print(temp_bat,1);

 

lcd.setCursor(8,1);

lcd.print("Tm=");

lcd.print(temp_mediu,1);

 

 

while(!client.available()){

//Serial.read();

delay(500);

}

while(client.available()){

charc=client.read();

Serial.print(c);

}

while(client.connected()){

Serial.println("Waitingforservertodisconnect");

lcd.setCursor(0,0);

lcd.print("Waitingforserver");

lcd.setCursor(0,1);

lcd.print("todisconnect");

client.stop();

delay(500);

}

client.stop();

//Serial.end();

delay(500);

return;

 

}

Denumire componentaDenumire comerciala (ebay)Pret (ebay)
Placa Arduino Uno2013 Version ATmega32U2 ATmega328P UNO R3 Board & Free USB Cable for Arduino DIY10$
Modul ethernetEthernet Shield W5100 Network Expansion Board For Arduino UNO R3 Mega 25607.12.$
Senzor curent noninvaziv 100AHall Effect Current Sensor For Hobbyist, Arduino Compatible, AC 75A DC 100A9$
Senzor de tensiune 80VOctopus Voltage Divider Module Electronic Bricks for Arduino4.69$
Senzor de temperaturaDS18B20 Waterproof Temperature Sensors Thermistor Temperature Control hv2n2.06$

Noutati

Real-time data: monitorizare in timp real productie energie fotovoltaica/eoliana;


Romania ramane intre cele mai atractive piete din lume pentru energii regenerabile, conform noului raport Country Attractiveness Indices, lansat de Ernst & Young. . Continuare pe ziare.com...

Contact

-

Phone: +4(0740) 041 234
Address: -
E-mail: dutuc_nicolae@hotmail.com

Suport online