Se sei già registrato           oppure    

Orario: 19/04/2024 06:04:05  

 

Energia Alternativa ed Energia Fai Da Te > Sistemi operativi, hardware e programmazione.

Pagine: (4)   [1]   2   3   4    (Ultimo Msg)


aiuto per avviare un generatore di emergenza con Arduino
FinePagina

Walter64

Avatar
Watt


Gruppo:Utente
Messaggi:29

Stato:



Inviato il: 21/09/2014 07:34:45

Sono 2 gg che litigo con Arduino micro, per realizzare questo "kit" da applicare ad un piccolo generatore di emergenza (avviamento elettrico) da utilizzare come sostegno in caso di mancanza di sole (già presente il FV) presso una baita in montagna.
Di esempi di codici listati vari in rete, ve ne sono molteplici , ma non riesco a fare più di una operazione per volta... in pratica realizzo un contatto che mi conferma la necessità di avviare il generatore ... e sucessivamente la seguenza di avvii al motorino, l'ide mi da errore di compilazione.
Cosa uso per separe e fare eseguire più operazioni sequeziali sul listato
P.S.
anni fa giocavo con il Basic, avevo a disposizione i numeri di stringa a cui abbinare le istruzioni ... ma con il linguaggio C ho derie difficoltà a orientarmi ...
Grazie a tutti.
Walter64

 

Walter64

Avatar
Watt


Gruppo:Utente
Messaggi:29

Stato:



Inviato il: 21/09/2014 10:53:45

Giusto per chiarire il problema :

CITAZIONE

/*
Gestione avvio generatore di corrente.
*/

// Pin 2 = ingresso conferma presenza ospite in casa.
// Pin 3 = conferma programma di avvio generatore = confAVV
// Pin 4 = feed-back conferma avvio a regime generatore.
// Pin 5 = attivazione elettrovalvola benzina = evBenz
// Pin 6 = attivazione servo aria carburatore = relCARB
// Pin 7 = attivazione motorino d'avviamento.

// dagli un nome:
int confAVV = 3; // inizializziamo il pin 3 come in = necessità avviamento generatore
int evBenz = 5; // inizializziamo il pin 5 come out = elettrovalvola benzina.
int relCARB = 6; // inizializziamo il pin 6 come out = aria carburatore.
// variabili che cambiano:
int confAVVState = 0; // variabile per Leggere lo Stato ingresso pin 3
int evBenzState = 0; // variabile per Leggere lo Stato ingresso pin 3
void setup() {
pinMode(evBenz, OUTPUT); // definisco lo stato del pin 5 come aprire benzina:
pinMode(confAVV, INPUT); // definisco lo stato del pin 3 come conferma avviamento generatore
pinMode(relCARB, OUTPUT); // definisco lo stato del pin 6 come tirare aria carburatore
}
void loop(){
// leggere lo stato dell'ingresso pin 3:
confAVVState = digitalRead(confAVV);
// Controllare se è confermato l'avviamento del generatore
if (confAVVState == 1) // se confermato: high = apri la benzina
digitalWrite(evBenz,1); // apri la benzina
else digitalWrite(evBenz,0); // se non confermato = chiudi la benzina
// leggo lo stato dell'ettrovalvola benzina
{evBenzState = digitalRead(evBenz);
delay (4000);
if (evBenzState == 1) // se confermato: high = apri la benzina

digitalWrite(relCARB,1); // se confermato attiva l'aria/carburatore
else digitalWrite(relCARB,0);} // se non confermato = disattiva aria/carburatore
}

inserendo il ritardo di 4 secondi ...
mi cambia anche lo stato precedente ... perché ???

 

Walter64

Avatar
Watt


Gruppo:Utente
Messaggi:29

Stato:



Inviato il: 21/09/2014 12:06:24

una cosa l'ho capita , la funzione di delay non va bene perché tutto il programma subisce la "temporizzazione" imposta ... indipendentemente dove la piazzo nel listato per cui ???

 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 21/09/2014 18:02:49

Nelle mie sperimentazioni ho fatto letture sui pin analogici e
si usa analogRead( pin ).
Mentre per attivare i relè uso digitalWrite(pin, LOW);

qui manca {} (anche su "else")
if (confAVVState == 1) { // se confermato: high = apri la benzina
digitalWrite(evBenz,1); // apri la benzina
}



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw)
Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A
n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah)
Switch enel/batterie con Arduino Pro Mini

 

Walter64

Avatar
Watt


Gruppo:Utente
Messaggi:29

Stato:



Inviato il: 21/09/2014 19:58:53


CITAZIONE

qui manca {} (anche su "else")

le parentesi graffe le ho tolte ... ho visto che funziona bene (ma posso rimetterle)

descrivo la sequenza:
- pin 3 "sente" la necessità di avviare il generatore
- ritardo di 5 sec (falsi allarmi e disturbi)
- si attiva il pin 5 (elettrovalvola benzina e "sblocco" a massa candela d'accensione)
- ritardo di 5 sec (tempo necessario per riempire di benzina la vaschetta del carburatore)
- si attiva il pin 6 (tira l'aria al carburatore)
- pausa di 0,5-1 sec (tempo di attivazione azione sopradescritta)
- si attiva pin 7 (motorino d'avviamento)
- il pin 4 sente il feed-back della dinamo carica batteria (avvio a regime generatore) e "stoppa" la sequenza pin 6 e 7 (permette al generatore di rimanere in funzione)
- alla caduta di tensione sul pin 3 il generatore si spegne (chiusura EVbenzina e chiusura a massa della candela
Questo per iniziare ... solo che tutte queste pause/temporizzazioni mi mettono in crisi
P.S.
nei plc (programmini semplici) ci sono una discreta quantità di temporizzatori o al limite dei contatori da settare ... anche dei merker di appoggio ... "accessori" che nei vari pseudo-primipassi non si trovano !!! sicuramente in arduino vi sono soluzioni simili ... ma poco intuitive

 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 21/09/2014 21:00:52

Per temporizzare anche durante l'esecuzione del loop,
si usa "millis()"
millis()/1000 trovi i secondi.
Per fissare l'inizio.. variabile = millis()
millis() - variabile / 1000 = secondi trascorsi.



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw)
Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A
n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah)
Switch enel/batterie con Arduino Pro Mini

 

Walter64

Avatar
Watt


Gruppo:Utente
Messaggi:29

Stato:



Inviato il: 21/09/2014 21:52:57

questo è ciò che ho fatto:

CITAZIONE

void loop(){
// leggere lo stato dell'ingresso pin 3:
confAVVState = digitalRead(confAVV); // Controllare se è confermato l'avviamento del generatore

if (confAVVState == 1) // azione di verifica stato

digitalWrite(evBENZ,1); // se confermato = apri la benzina
else digitalWrite(evBENZ,0); // se non confermato = chiudi la benzina

delay(1000);

evBENZState = digitalRead(evBENZ);
if (evBENZState == 1)
digitalWrite(airCARB,1);
else digitalWrite(airCARB,0);
}

come detto, l'inserimento "delay" mi rallenta l'esecuzione non solo tra i pin 5 e 6 ... ma anche quando alzo il pin 3 ...
Ho bisogno di un esempio applicato

 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 21/09/2014 22:33:45

Prima di scrivere le procedure in linguaggio C
sarebbe meglio scriverla in italiano,
per capire le condizioni, le alternative, e i tempi.



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw)
Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A
n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah)
Switch enel/batterie con Arduino Pro Mini

 

Walter64

Avatar
Watt


Gruppo:Utente
Messaggi:29

Stato:



Inviato il: 21/09/2014 22:38:55


CITAZIONE

Prima di scrivere le procedure in linguaggio C
sarebbe meglio scriverla in italiano,
per capire le condizioni, le alternative, e i tempi

Scusami Sabin ... ma non ti seguo
cosa intendi per "scriverla in italiano" ???

 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 22/09/2014 06:53:55

Se non sappiamo descrivere quello che vogliamo realizzare, sarà difficile convertirlo in codice.
Ad esempio: In riposo cosa fa?
controlla il pin 3,
se il contatto x si chiude e il pin 3 va a 0 (massa) (oppure il contrario)
esegui {le istruzioni dentro le graffe}



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw)
Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A
n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah)
Switch enel/batterie con Arduino Pro Mini

 

Walter64

Avatar
Watt


Gruppo:Utente
Messaggi:29

Stato:



Inviato il: 22/09/2014 07:52:37

Lavorando in ambienti "industriali" ... dò per scontato che un "qualunque contatto" se applichi una tensione si porta "alto" ... in assenza rimane "basso.

CITAZIONE

descrivo la sequenza:
- pin 3 "sente" la necessità di avviare il generatore
- ritardo di 5 sec (falsi allarmi e disturbi)
- si attiva il pin 5 (elettrovalvola benzina e "sblocco" a massa candela d'accensione)
- ritardo di 5 sec (tempo necessario per riempire di benzina la vaschetta del carburatore)
- si attiva il pin 6 (tira l'aria al carburatore)

Sicuramente nella descrizione grossolana non è di facile capire ... ma nella esecuzione costruttiva polarizzo il pin 3 a massa con una resistenza da 10k ... e il "sente" io lo intendo come "applicare" una tensione ...
nel secondo post descrivo il pin 3 come ingresso che necessariamente a "riposto" è basso ...:
CITAZIONE
void loop(){
// leggere lo stato dell'ingresso pin 3:
confAVVState = digitalRead(confAVV);
// Controllare se è confermato l'avviamento del generatore
if (confAVVState == 1) // se confermato: high = apri la benzina
digitalWrite(evBenz,1); // apri la benzina
else digitalWrite(evBenz,0); // se non confermato = chiudi la benzina

Daccordissimo che gli ingressi arduino sono ad alta impedenza (e qui la "forzatura" necessaria)... per via delle possibilità di funzione (in-out, digit/analog) ma comparandolo ai plc, quest'ultimi sono di defaut normalmente elettricamente a massa = 0V
Qualcuno si chiederà perchè porto avanti un programmino con arduino piuttosto che un plc ... per 3 motivi:
- 1° dimensioni piottosto contenute ... utilizzero arduino micro
- 2° normalmente i plc sono per la maggior parte sotto software da acquistare ecc. ecc.
- 3° se questa veloce successo di arduino c'è stato ... un motivo c'è

 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 22/09/2014 14:52:00

In Arduino ci sono due condizioni utili, "HIGH LOW" per vedere se il piedino ha tensione o no.
e poi c'è "true false".
L'allegato in questo LINK ti può dare idee.



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw)
Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A
n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah)
Switch enel/batterie con Arduino Pro Mini

 

Walter64

Avatar
Watt


Gruppo:Utente
Messaggi:29

Stato:



Inviato il: 22/09/2014 17:13:21


CITAZIONE

In Arduino ci sono due condizioni utili, "HIGH LOW" per vedere se il piedino ha tensione o no.
e poi c'è "true false".

questo non ha niente a che vedere con i temporizzatori ...
manuali che spiegano in ITALIANO su arduino c'è ben poco ... a meno che non vai sui manuali che insegnano C ...
comunque serve esempio pratico di codice con un paio di temporizzatori inclusi ... poi il resto si vedrà

 

Walter64

Avatar
Watt


Gruppo:Utente
Messaggi:29

Stato:



Inviato il: 22/09/2014 17:14:37


CITAZIONE

L'allegato in questo LINK ti può dare idee.

Dimenticavo grazie per il link questa sera cerchero di analizzarlo !

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 22/09/2014 22:31:41

Prova il seguente listato, non è finito ed è alquanto rozzo. Devi completarlo con il ciclo di verifica dell'avvenuta accensione.
E' solo un esempio di come inserire le pause mediante millis.
Io preferisco usare nelle istruzioni HIGH e LOW, ma 1 e 0 rispettivamente svolgono la medesima funzione.

//Inizio listato
//prodotto da calcola (antrec.geo@yahoo.com)//
//avvio motore ver.1_0_3
//
//ATTENZIONE:
//
//CC BY-NC-SA 4.0
//Uso non commerciale, modificabile, con obbligo di condivisione-
//http://creativecommons.org/licenses/by-nc-sa/4.0/deed.it
//

#define confAvv 3 //sensore avviamento
#define feed 4 //verifica accensione
#define evBenz 5 //valvola benzina
#define relCarb 6 //tira l'aria carburatore
#define motAvv 7 //motorino avviamento

byte confAvvState = 0;
byte evBenzState = 0;

unsigned long temp0;
unsigned long temp1;
unsigned long temp2;

void setup(){

//Apro la comunicazion seriale
Serial.begin(9600);
pinMode(confAvv, INPUT);
pinMode(evBenz, OUTPUT);
pinMode(relCarb, OUTPUT);
pinMode(motAvv, OUTPUT);
}

void loop(){

{confAvvState = digitalRead(confAvv);
temp0 = millis();
if ((millis() == temp0 + 5000) && (confAvvState == HIGH)) {digitalWrite(evBenz, HIGH); temp0 = 0;}
else digitalWrite(evBenz, LOW);}

{evBenzState = digitalRead(evBenz);
temp1 = millis();
if ((millis() == temp1 + 5000) && (evBenzState = HIGH)){digitalWrite(relCarb,HIGH);temp1 = 0; temp2= millis();}
else digitalWrite(relCarb,LOW);
if (millis() == temp2 + 1000){digitalWrite(motAvv, HIGH); temp2 = 0;}
else digitalWrite( motAvv, LOW);
}

}

//Fine listato



Modificato da calcola - 04/10/2014, 16:11:59


---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 
 InizioPagina
 

Pagine: (4)   [1]   2   3   4    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum