Buongiorno a tutti e buona domenica.
sto facendo la tesina di maturità su una serra automatizzata con produzione autonoma di energia tramite pannello ad inseguimento.
vorrei far visualizzare su un display lcd 2*16 la quantità di energia prodotta da un piccolo pannellino (20cm *10cm) che ho acquistato appositamente per il plastico, il quale è mosso da un servo motore,
il problema è che
1- non so come fare per sapere quanto sta creando il pannello;
2- meglio mettere il valore che sta realmente producendo o amplificarlo via software per paragonarlo ad uno vero che alimenti una vera serra?
grazie a tutti,
saluti.
Buongiorno e benvenuto sul forum,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili
Chiedo scusa se mi sono affrettato;
ho effettuato la presentazione.
Posseggo arduino mega2560, ed arduino uno. Il progetto lo sto facendo su arduino mega ed utilizzo l'uno per le varie prove.
L'energia elettrica si misura in watt * ora (Wh) o, più frequentemente, in kilowatt * ora (kWh). Nel tuo caso sarebbe molto più coreografico se il pannello lcd mostrasse la potenza istantanea erogata dal pannello solare espressa in watt (W). Il display così mostrerebbe anche il variare della potenza istantanea a seconda dell'orientamento del pannello. Puoi comunque mostrare il valore dell'energia demandando all'arduino l'integrazione temporale della potenza, e cambiando la visualizzazione ad esempio alla pressione di un pulsante.
mac98:
... 1- non so come fare per sapere quanto sta creando il pannello;
Per conoscere la potenza istantanea devi moltiplicare la tensione all'uscita del pannello per la corrente che sta erogando. La tensione la prelevi eventualmente con un partitore, la corrente la misuri come caduta di tensione su una resistenza molto bassa riferita a massa.
Ciao,
P.
no il pannello non carica nessuna batteria
per tutto il resto ho messo una batteria 12v della macchina posizionata nel plastico. arduino prende corrente o da li o dal pc adesso devo vedere.
@pgiagno
grazie, ma non sarei capace a realizzarlo un circuito del genere. se mi potresti spiegare meglio te ne sarei grato.
Mi sei stato molto utile ma ci ho capito poco, scusa ma non ho molte basi.
Il punto della tensione l'ho compreso bene.
Creo circuito che abbassi a 5v e lo mando ad Arduino e lo leggo. Fino qui ci riesco.
Anche per la potenza finale ho capito.
Non mi è ben chiaro come faccio a misurare la corrente.
Se io ho il circuito del partitore per la tensione quindi che le sue resistenze, dove dovrei mettere la resistenza in serie per misurare la sua cdt ai sui capi?
docsavage:
all'ora.....ho pensato di ri-provare fidocad
vedi se si capisce qualcosa
anche se credo che disegnare non sia il mio lavoro
riga per riga si considerano e dimensionano separatamente:R1 ed R2 che sono il partitore
R3 che è lo Shunt
R4 ed R5 che sono la rete di reazione dell'amplificatore operazionale
occhio che il disegno è in fidocad, altro non so usare
l'estensione standard di fidocad è fcd
Mi visualizza un disegno con collegamenti non chiusi e fili a caso, scusa mi andrebbe bene un disegno anche a mano, altrimenti potresti usare fritzing,
per piacere e grazie del tempo che mi dedichi.
Sul visualizzatore online è ok: pot.potorti.it/fidocad/
Buonasera,
ok allora ho visto il disegno. mi sono informato e mi sono procurato un amplificatore UA741CN della Texas instrument, mi sono guardato il datashet e ho capito dove devo collegarlo.
intanto ho anche controllato il pannellino :
Vmax = 17.2V
Imax = 0.3A
A questo punto dopo un pò di calcoli e seguendo quello schema opterei per:
R3= 5.2 ohm
R4=22 kohm
R5 = 9.8 kohm
cosi avrei
Vout( arduino max 5V) ( Vout / (1+(R4/R5))) / R3 = 0.3A
1- possono sembrari giusti i calcoli secondo voi?
2- le resistenze vi sembrano appropriate?
avrei ancora una domanda
3- a cosa servono/mi servono gli offset dell op - amp?
grazie
il pannello non ha carico, non so cosa mettergli.
riduco un po' il guadagno e metto due diodi, il potenziometro dove dovrei metterlo? nell'uscita?
Il carico assorbe l'energia prodotta dal pannello. Senza carico non c'è corrente, né potenza misurabile.
Una lampadina può andare bene. Naturalmente così non si misura quanto il pannello potrebbe produrre, ma solo quello che viene effettivamente assorbito in quel momento dal carico (altrimenti bisognerebbe costruire un carico attivo variabile, con inseguimento del punto di massima potenza MPPT).
Inoltre... come intendi alimentare l'operazionale? Dal datasheet (tabella 6.4 parametro VOM) si vede che la tensione in uscita non può mai raggiungere il valore del terminale -Vcc, ma è sempre almeno uno o due volt superiore.
Quindi o si usa un'alimentazione duale, oppure si usa un operazionale i cui ingressi e la cui uscita possano raggiungere la stessa tensione del terminale di alimentazione negativa (come l' LM358).
Si scusate, abbiate pazienza.
Il mio indirizzo di studio è elettrotecnica.
Dal datashhet vedo alimentazione a 5v quindi dovrebbe andare bene.
Se gli mettessi una lampadina non servirebbe più il amplificatore? Si può fare e non fa niente non siamo ancora i ritardo. Sto cercando di imparare e capire.
buonasera
ragazzi avevate ragione non circola corrente.
a questo punto metto un lampadina come carico o avete altre idee?
per piacere abbiate pazienza, grazie
Lo So che senza carico non c'è corrente, però se calcoli le resistenze che ci sono tra quelle fanno il partitore ed il resto, un carico c'è essendo un circuito chiuso, almeno io la vedo così.
Ho chiesto anche ai miei professori che mi hanno confermato.
E infine riguardo alla tua affermazione posso dire che ho una buona media specialmente nelle materie tecniche.
intanto volevo ringraziarti perché il circuito per la tensione funziona perfettamente ed è anche molto preciso, l'ho verificato col tester, non credevo fosse così sensibile.
Il µA741 si può alimentare da 10 a 36V , e la tensione di uscita non può scendere sotto 2V (1 nel migliore dai casi) o superare +Vcc - 2V (o -1 nel migliore dei casi).
Quindi per usarlo in quello schema va usata un'alimentazione duale, con almeno 5V negativi rispetto massa e almeno 8V positivi.
Siccome l'uscita dell'operazionale a circuito "non tarato" (perché naturalmente va fatta una taratura con un voltmetro e con un amperometro campione) potrebbe superare i 5V o scendere sotto i 0V, occorre anche proteggere l'ingresso di Arduino con un limitatore shunt:
[FIDOCAD]
FJC C 3.0
FJC B 0.5
MC 615 455 0 0 460
MC 680 525 2 1 ey_libraries.opaopa0
LI 670 445 615 445 0
LI 670 460 670 470 0
LI 640 485 725 485 0
LI 630 485 615 485 0
MC 725 465 0 0 000
MC 725 525 0 0 000
LI 725 465 670 465 0
LI 705 525 695 525 0
LI 625 530 670 530 0
MC 645 490 0 0 115
MC 680 505 1 0 115
LI 645 490 645 485 0
LI 645 500 645 520 0
LI 645 505 670 505 0
LI 700 525 700 505 0
LI 670 520 645 520 0
SA 700 525 0
SA 625 485 0
SA 670 465 0
LI 680 505 700 505 0
SA 645 505 0
SA 670 485 0
MC 670 460 2 0 115
MC 630 485 3 0 115
MC 670 480 2 0 115
LI 670 450 670 445 0
LI 670 485 670 480 0
MC 725 485 0 0 000
TY 735 482 4 3 0 0 0 Courier++10++Pitch GND Arduino
TY 735 462 4 3 0 0 0 Courier++10++Pitch Misura tensione
TY 735 522 4 3 0 0 0 Courier++10++Pitch Misura corrente
MC 715 525 1 0 115
MC 720 540 3 0 230
MC 720 535 0 0 045
LI 715 525 725 525 0
SA 720 525 0
LI 685 535 685 530 0
LI 685 520 685 515 0
MC 685 515 3 0 010
TY 632 459 8 6 0 0 0 Courier++10++Pitch Z
LI 645 455 645 445 0
LI 645 475 645 485 0
LI 615 445 615 455 0
SA 645 445 0
SA 645 485 0
LI 615 475 615 485 0
MC 645 455 0 0 900
LI 625 485 625 530 0
MC 720 490 0 0 045
LI 720 490 720 485 0
SA 720 485 0
TY 688 508 4 3 0 0 0 Courier++10++Pitch +8V
TY 689 536 4 3 0 0 0 Courier++10++Pitch -5V
TY 724 531 4 3 0 0 0 Courier++10++Pitch 5.1V
TY 663 534 4 3 0 0 0 Courier++10++Pitch uA741
TY 705 517 4 3 0 0 0 Courier++10++Pitch 1.5k
LI 685 535 685 537 0
EV 687 537 683 541 0
LI 686 539 684 539 0
Per quanto riguarda il carico è vero, il circuito è chiuso, quindi formalmente parlando un carico c'è. Ma che senso ha una misura del genere con potenza quasi zero e praticamente non misurabile con un semplice Arduino senza appositi accorgimenti?
Voglio dire: se devo realmente provare quanto tira un ascensore, il carico da mettergli dentro non può essere una piuma (corrispondente al partitore), perché la bilancia da una tonnellata la piuma non la misura.
Claudio_FF:
Il µA741 si può alimentare da 10 a 36V , e la tensione di uscita non può scendere sotto 2V (1 nel migliore dai casi) o superare +Vcc - 2V (o -1 nel migliore dei casi).Quindi per usarlo in quello schema va usata un'alimentazione duale, con almeno 5V negativi rispetto massa e almeno 8V positivi.
Siccome l'uscita dell'operazionale a circuito "non tarato" (perché naturalmente va fatta una taratura con un voltmetro e con un amperometro campione) potrebbe superare i 5V o scendere sotto i 0V, occorre anche proteggere l'ingresso di Arduino con un limitatore shunt:
[FIDOCAD]
FJC C 3.0
FJC B 0.5
MC 615 455 0 0 460
MC 680 525 2 1 ey_libraries.opaopa0
LI 670 445 615 445 0
LI 670 460 670 470 0
LI 640 485 725 485 0
LI 630 485 615 485 0
MC 725 465 0 0 000
MC 725 525 0 0 000
LI 725 465 670 465 0
LI 705 525 695 525 0
LI 625 530 670 530 0
MC 645 490 0 0 115
MC 680 505 1 0 115
LI 645 490 645 485 0
LI 645 500 645 520 0
LI 645 505 670 505 0
LI 700 525 700 505 0
LI 670 520 645 520 0
SA 700 525 0
SA 625 485 0
SA 670 465 0
LI 680 505 700 505 0
SA 645 505 0
SA 670 485 0
MC 670 460 2 0 115
MC 630 485 3 0 115
MC 670 480 2 0 115
LI 670 450 670 445 0
LI 670 485 670 480 0
MC 725 485 0 0 000
TY 735 482 4 3 0 0 0 Courier++10++Pitch GND Arduino
TY 735 462 4 3 0 0 0 Courier++10++Pitch Misura tensione
TY 735 522 4 3 0 0 0 Courier++10++Pitch Misura corrente
MC 715 525 1 0 115
MC 720 540 3 0 230
MC 720 535 0 0 045
LI 715 525 725 525 0
SA 720 525 0
LI 685 535 685 530 0
LI 685 520 685 515 0
MC 685 515 3 0 010
TY 632 459 8 6 0 0 0 Courier++10++Pitch Z
LI 645 455 645 445 0
LI 645 475 645 485 0
LI 615 445 615 455 0
SA 645 445 0
SA 645 485 0
LI 615 475 615 485 0
MC 645 455 0 0 900
LI 625 485 625 530 0
MC 720 490 0 0 045
LI 720 490 720 485 0
SA 720 485 0
TY 688 508 4 3 0 0 0 Courier++10++Pitch +8V
TY 689 536 4 3 0 0 0 Courier++10++Pitch -5V
TY 724 531 4 3 0 0 0 Courier++10++Pitch 5.1V
TY 663 534 4 3 0 0 0 Courier++10++Pitch uA741
TY 705 517 4 3 0 0 0 Courier++10++Pitch 1.5k
LI 685 535 685 537 0
EV 687 537 683 541 0
LI 686 539 684 539 0
Per quanto riguarda il carico è vero, il circuito è chiuso, quindi formalmente parlando un carico c'è. Ma che senso ha una misura del genere con potenza quasi zero e praticamente non misurabile con un semplice Arduino senza appositi accorgimenti? Voglio dire: se devo realmente provare quanto tira un ascensore, il carico da mettergli dentro non può essere una piuma (corrispondente al partitore), perché la bilancia da una tonnellata la piuma non la misura.
perfetto ora tutto mi torna.
per quanto riguarda +8 e -5V non credo di essere in grado di portarglieli però...
Mi si è appena accesa una lampadina...
E se facessi
P=( V*V)/ R
Non avrei bisogno della corrente giusto?
Mi basterebbe misurare la resistenza (quale?).
A non avevo capito intendessi questo Sorry,
Davvero non te la prendere docksavage per piacere .
Premesso che non devo rendere conto a te, stasera ti posto tutto il programma del mio progetto, oramai quasi completo.
Lo ho scritto quasi completamente da salvo una indicazione su un servo motore.
Buona giornata
Buonasera,
ecco dopo tanto lavoro il mio progetto quasi concluso, ho passato tantissime ore in questi due mesi per realizzarlo. ora vi mostro il codice completo cosicché possa servire a qualcuno e cosicché docsavage puoi vedere cio' che ho fatto. ringrazio davvero tutti di cuore per gli aiuti dati .
// PROGRAMMA COMPLETO TESINA MATURITA' 5^ B MARCO MACCAGNO E GIORDANO lORENZO
// SERRA AUTOMATIZZATA CON CONTROLLO TEMPERATURA E UMIDITA' DELL'ARIA E CONTROLLO DELL'UMIDITA' DEL TERRENO,
// PRODUZIONE AUTONOMA DI ENERGIA ELETTRICA TRAMITE TECNOLOGIA FOTOVOLTAICA AD INSEGUIMENTO SOLARE,
// CISTERNE DI RECUPERO E DI ACCUMULO DELL'ACQUA PIOVANA PER L'IRRIGAZIONE AUTOMATICA DELLA SERRA,
// APERTURA E CHIUSURA AUTOMATICA DEL TETTO RAFFREDDARE LA SERRA E IMPIANTO DI RISCALDAMENTO CON CIRCOLAZIONE FORZATA DELL'ARIA
#include <dht11.h> // libreria per sensore temperatura e umidita //
#include <LiquidCrystal.h> // libreria display//
#include <Servo.h>
#define interval 1000
dht11 DHT;
#define DHT11_PIN 8 // sensore temperatura e umidita//
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); // display temperatura e umidita//
LiquidCrystal lcd2 (22, 24, 30, 32, 34, 36); // display produzuione energia
long previousMillis =0;
long previousMillis2 =0;
int sensorValue1 = 0;
const int rele1 = 26; // rele pompa1//
const int rele2 = 28; // rele pompa 2//
const int rele3 = 27; // elettrovalvola acquedotto//
const int sensore1 = 40; // sensore livello massimo vasca di recupero//
const int sensore2 = 42; // sensore livello minimo vasca di recupero//
const int sensore3 = 44; // sensore gallegiante massimo vasca di accumulo//
const int sensore4 = 46; // finecorsa tetto chiuso//
const int sensore5 = 48; // finecorsa tetto aperto//
const int led1 = 50; // led che simula resistenza per riscaldare//
const int led2 = 51; // led che simula resistenza per riscaldare//
const int led3 = 52; // led che simula resistenza per riscaldare//
const int orario = 49; // motore tetto senso orario//
const int antior = 45; // motore senso antiorario
const int ventola = 10;
const int analogOutPin = 7; //pin motore tetto
int tensione = A3; // tensione pannello
unsigned int verso=0;
int sensorPin1 = A0;
int servoPin = 9;
int servoGrad = 90;
int tolleranza= 40;
const int hSens = A1; // sensore umidita terreno//
unsigned int hSensVal = 0;
unsigned int valumidita = 70; // valore da preimpostare umidita//
boolean statoPompa2 = 0;
boolean statoPompa1 = 0;
boolean statoElettro = 0;
boolean statominimo= 0;
boolean motoreup = 0;
boolean motoredown = 0;
Servo myservo;
void setup()
{
pinMode (rele1, OUTPUT);
pinMode (rele2, OUTPUT);
pinMode(rele3, OUTPUT);
pinMode (sensore1, INPUT);
pinMode (sensore2, INPUT);
pinMode (sensore3, INPUT);
pinMode (sensore4, INPUT);
pinMode (sensore5, INPUT);
digitalWrite(40, HIGH);
digitalWrite(42, HIGH);
digitalWrite(44, HIGH);
digitalWrite(46, HIGH);
digitalWrite(48, HIGH);
pinMode (led1,OUTPUT);
pinMode (led2,OUTPUT);
pinMode (led3,OUTPUT);
pinMode (ventola, OUTPUT);
pinMode ( orario, OUTPUT);
pinMode ( antior, OUTPUT);
digitalWrite(orario, HIGH);
digitalWrite(antior, LOW);
analogWrite(analogOutPin, 0);
pinMode( sensorPin1, INPUT);
myservo.attach( servoPin);
myservo.write( servoGrad);
Serial.begin(9600);
}
void loop()
{
// tenperatura//
int chk = DHT.read(DHT11_PIN);
int h = DHT.humidity;
int t = DHT.temperature;
if ( millis() - previousMillis > interval)
{
previousMillis = millis();
lcd.begin(16, 2);
lcd.print("temperatura:");
Serial.print("temperatura: ");
Serial.print(DHT.temperature,1);
Serial.println(" gradi C");
lcd.print(t);
lcd.print(" C");
Serial.print("umidita': ");
Serial.print(DHT.humidity,1);
Serial.print(" %");
Serial.print("\n");
}
if ( t < 35)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(ventola, HIGH);
}
else
{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(ventola, LOW);
}
// terreno umidita ed irrigazione
hSensVal = analogRead (hSens);
hSensVal = map(hSensVal,0,1023,0,100);
hSensVal = 100 - hSensVal;
hSensVal = hSensVal + 38;
if (hSensVal<valumidita) // valore umidita terra//
{
statoPompa2 = HIGH;
}
else
{
statoPompa2=LOW;
}
digitalWrite(rele2, statoPompa2);
Serial.print("umidita' terreno = ");
Serial.print(hSensVal);
Serial.println(" % ");
Serial.print("umidita' preimpostata = ");
Serial.print(valumidita);
Serial.println(" % ");
Serial.print("pompa2 = ");
Serial.println(statoPompa2);
lcd.setCursor(0, 1);
lcd.print("umidita': ");
lcd.print(hSensVal);
lcd.print(" %");
// reiempimento cisterne//
int val3 = digitalRead(sensore3);
int val2 = digitalRead(sensore2);
int val1 = digitalRead(sensore1);
if (val1 == HIGH)
{
val1 = LOW;
}
else
{
val1 = HIGH;
}
if (val2 == HIGH)
{
val2 = LOW;
}
else
{
val2 = HIGH;
}
if (val1 == HIGH)
{
statoElettro = LOW;
}
if (val2 == LOW)//manca acqua
{
do
{
statoElettro = HIGH;
}
while (val1 == HIGH) ;
}
if (val2 == HIGH) // se c'è acqua
{
statominimo = HIGH;
}
else
{
statominimo = LOW;
}
if (val3 == HIGH)
{
statoPompa1=LOW;
}
else if ( statominimo == HIGH)
{
statoPompa1 = HIGH;
}
digitalWrite(rele1, statoPompa1);
digitalWrite(rele3, statoElettro);
Serial.print("elettrovalvola= ");
Serial.println(statoElettro);
Serial.print("pompa1 = ");
Serial.println(statoPompa1);
Serial.println(val1);
Serial.println(val2);
Serial.println(val3);
// tetto//
delay(1000);
int val4 = digitalRead(sensore4);
int val5 = digitalRead(sensore5);
if (val4 == HIGH)
{
val4 = LOW;
}
else
{
val4 = HIGH;
}
if (val5 == HIGH)
{
val5 = LOW;
}
else
{
val5 = HIGH;
}
Serial.println(val4);
Serial.println(val5);
if (t >= 25)
{
motoreup = true; //va su
motoredown = false;
}
else
{
motoreup = false;
motoredown = true; // va giu
}
if ( (motoreup) == true ) // sensore false = non premuto
{
if (val4==LOW)
{
digitalWrite(orario, HIGH);
digitalWrite(antior, LOW);
Serial.println("verso orario");
}
else
{
digitalWrite(orario, LOW);
digitalWrite(antior, LOW);
Serial.println("motore stop");
}
}
if ( (motoreup) == false)
{
if (val5 == LOW)
{
digitalWrite(orario, LOW);
digitalWrite(antior, HIGH);
Serial.println("verso antiorario");
}
else
{
digitalWrite(orario, LOW);
digitalWrite(antior, LOW);
Serial.println("motore stoppo");
}
}
analogWrite(analogOutPin,255);
//servo per pannello//
sensorValue1= analogRead(sensorPin1);
Serial.print("sensorValue1 = ");
Serial.println(sensorValue1);
sensorValue1 = analogRead(sensorPin1);
sensorValue1=map(sensorValue1,0,1023,0,179);
myservo.write(sensorValue1);
//produzione pannello
float Ving = analogRead(tensione);
float V = map(Ving, 0, 1023, 0, 1000);
V = (V / 0.23389) / 200;
int r = 55;
float P = (V * V) / r;
Serial.print("tensione: ");
Serial.print(V);
Serial.println(" V ");
lcd2.begin(16, 2);
lcd2.print("tensione:");
lcd2.print(V);
lcd2.println(" V ");
Serial.print("potenza: ");
Serial.print(P);
Serial.println(" W ");
lcd2.setCursor(0, 1);
lcd2.print("potenza: ");
lcd2.print(P);
lcd2.println(" W ");
}