Se sei già registrato           oppure    

Orario: 28/03/2024 10:09:51  

 

Energia Alternativa ed Energia Fai Da Te > Arduino

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


piccolo aiuto per inserire un temporizzatore in low
FinePagina

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 11/12/2018 19:58:38

salve a tutti sto costruendo un circuito su arduino di sana pianta per imparare meglio quindi ho incominciato con una logica ben precisa, è una procedura che si fa manualmente ma la devo far gestire automaticamente con arduino ed all esigenza andare in manuale.
quindi il mio vero problema è di programmare il pin2 che quando è in low per 10 secondi deve fare una procedura attivando pin 3 4 e 5. ma solo con 10sec di ritardo in low non mi serve in high

quindi tentiamo di modificare la logica in modo che capisca cosa si aggiunge è non modificando tutti i valori i numeri dei pin altrimenti sono costretto a modificare tutto il circuito della basetta mille fori che si va ad innestare su arduino, purtroppo l'ho creata cosi perché se devo smontare l'arduino scollego tutto in un colpo senza staccare tanti fili.
dimenticavo il tutto è in fase di programmazione


int enel;
void setup() { //
pinMode(2,INPUT); //pin2 programmato come ingresso, da programmare ritardo di 10sec se valore 0 comandare relè 1, 2, 3, 4,
pinMode(3,OUTPUT); //pin3 programmato come uscita, comanda relè 1
pinMode(4,OUTPUT); //pin4 programmato come uscita, comanda relè 2 & 3
pinMode(5,OUTPUT); //pin5 programmato come uscita, comanda relè 4
pinMode(6,INPUT); //pin6 se valore 0 portare pin4 a 0
pinMode(7,OUTPUT); // pin7 da programmare come inpulso per eccitare relè 5
pinMode(8,OUTPUT); // pin 8 da programmare come uscita comanda relè 6
pinMode(9,OUTPUT); //pin9 programmato come uscita, comanda relè7
}

void loop(){ // QUI SI SCRIVONO LE FUNZIONI A CICLO RIPETUTO
enel=digitalRead(2);
if (enel==LOW) { //DA PROGRAMMARE 10" DI RITARDO SU LOW--------------------
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
else //altrimenti se enel è WRITE spegni
{
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
}

 

giorgio54
Watt


Gruppo:Utente
Messaggi:33

Stato:



Inviato il: 11/12/2018 22:27:37

ciao, dopo l'istruzione
pinMode(2, INPUT);
metti la seguente istruzione
digitalWrite(2, HIGH); // attivo resistenza di pull-up

poi dopo l'istruzione
if (enel==LOW) { //DA PROGRAMMARE 10" DI RITARDO SU LOW--------------------

metti l'istruzione
delay(10); // attendo 10 secondi

considera che così il ciclo si ferma per 10 secondi e non viene eseguita
nessuna istruzione, se così non ti va bene devi usare millis() che è solo
un po più laborioso.

volevo chiederti se è un errore il commento seguente, cioè penso che
volessi dire "se enel è HIGH"......e no WRITE
else //altrimenti se enel è WRITE spegni

ciao

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 12/12/2018 07:21:19

Prova così


byte blocco = 0;
unsigned long tempo;
int enel;
void setup() { //
pinMode(2,INPUT); //pin2 programmato come ingresso, da programmare ritardo di 10sec se valore 0 comandare relè 1, 2, 3, 4,
pinMode(3,OUTPUT); //pin3 programmato come uscita, comanda relè 1
pinMode(4,OUTPUT);
//pin4 programmato come uscita, comanda relè 2 & 3
pinMode(5,OUTPUT); //pin5 programmato come uscita, comanda relè 4
pinMode(6,INPUT); //pin6 se valore 0 portare pin4 a 0
pinMode(7,OUTPUT); // pin7 da programmare come inpulso per eccitare relè 5
pinMode(8,OUTPUT); // pin 8 da programmare come uscita comanda relè 6
pinMode(9,OUTPUT); //pin9 programmato come uscita, comanda relè7
}

void loop(){ // QUI SI SCRIVONO LE FUNZIONI A CICLO RIPETUTO
enel=digitalRead(2);
if ((enel == LOW) && (blocco == 0)) { tempo = millis(); blocco = 1;} //DA PROGRAMMARE 10" DI RITARDO SU LOW--------------------
if ((enel == LOW) && (blocco == 1) && (millis() >= tempo + 10000)){
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
blocco = 0;
}
else if ((enel == HIGH) && (blocco == 1)){tempo = millis(); blocco = 0;}
else //altrimenti se enel è WRITE spegni
{
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
}



Modificato da calcola - 12/12/2018, 07:46:50


---------------
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.

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 12/12/2018 09:10:47

CITAZIONE (calcola, 12/12/2018 07:21:19 ) Discussione.php?215447&1#MSG2

Prova così


byte blocco = 0;
unsigned long tempo;
int enel;
void setup() { //
pinMode(2,INPUT); //pin2 programmato come ingresso, da programmare ritardo di 10sec se valore 0 comandare relè 1, 2, 3, 4,
pinMode(3,OUTPUT); //pin3 programmato come uscita, comanda relè 1
pinMode(4,OUTPUT);
//pin4 programmato come uscita, comanda relè 2 & 3
pinMode(5,OUTPUT); //pin5 programmato come uscita, comanda relè 4
pinMode(6,INPUT); //pin6 se valore 0 portare pin4 a 0
pinMode(7,OUTPUT); // pin7 da programmare come inpulso per eccitare relè 5
pinMode(8,OUTPUT); // pin 8 da programmare come uscita comanda relè 6
pinMode(9,OUTPUT); //pin9 programmato come uscita, comanda relè7
}

void loop(){ // QUI SI SCRIVONO LE FUNZIONI A CICLO RIPETUTO
enel=digitalRead(2);
if ((enel == LOW) && (blocco == 0)) { tempo = millis(); blocco = 1;} //DA PROGRAMMARE 10" DI RITARDO SU LOW--------------------
if ((enel == LOW) && (blocco == 1) && (millis() >= tempo + 10000)){
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
blocco = 0;
}
else if ((enel == HIGH) && (blocco == 1)){tempo = millis(); blocco = 0;}
else //altrimenti se enel è WRITE spegni
{
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
}

quasi ci siamo perché dico quasi perché come stacco il pin 2 che cessa l'alimentazione contando fino a 10sec mi attiva per pochissimi istanti il 3 4 e 5 ma poi si spegne perché ricomincia a contare fino a 10sec altri invece a me serviva che staccavano in ritardo e poi al ritorno del pin 2 riattacca tutto nuovamente

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 12/12/2018 09:17:11

CITAZIONE (giorgio54, 11/12/2018 22:27:37 ) Discussione.php?215447&1#MSG1

ciao, dopo l'istruzione
pinMode(2, INPUT);
metti la seguente istruzione
digitalWrite(2, HIGH); // attivo resistenza di pull-up

poi dopo l'istruzione
if (enel==LOW) { //DA PROGRAMMARE 10" DI RITARDO SU LOW--------------------

metti l'istruzione
delay(10); // attendo 10 secondi

considera che così il ciclo si ferma per 10 secondi e non viene eseguita
nessuna istruzione, se così non ti va bene devi usare millis() che è solo
un po più laborioso.

volevo chiederti se è un errore il commento seguente, cioè penso che
volessi dire "se enel è HIGH"......e no WRITE
else //altrimenti se enel è WRITE spegni

ciao

si che si ferma tutto per 10 sec mi andrebbe bene cosi non si accavallano le cose è fa gli step passo passo come vanno fatti.
su write c'è stato un errore di commento


ho provato il circuito è non accende il pin 3 4 e 5



Modificato da epry - 12/12/2018, 09:21:20
 

giorgio54
Watt


Gruppo:Utente
Messaggi:33

Stato:



Inviato il: 12/12/2018 09:46:03

ciao, il "delay(10);" lo devi mettere così:

if (enel == LOW) { //DA PROGRAMMARE 10" DI RITARDO SU LOW---------------
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(10);
.....

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 12/12/2018 10:52:18

CITAZIONE (giorgio54, 12/12/2018 09:46:03 ) Discussione.php?215447&1#MSG5

ciao, il "delay(10);" lo devi mettere così:

if (enel == LOW) { //DA PROGRAMMARE 10" DI RITARDO SU LOW---------------
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(10);
.....

ho riprovato e ti inserisco il video cosi rende meglio l'idea LINK

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 12/12/2018 11:37:35

modificato


byte blocco = 0;
unsigned long tempo;
int enel;
void setup() { //
pinMode(2,INPUT); //pin2 programmato come ingresso, da programmare ritardo di 10sec se valore 0 comandare relè 1, 2, 3, 4,
pinMode(3,OUTPUT); //pin3 programmato come uscita, comanda relè 1
pinMode(4,OUTPUT);
//pin4 programmato come uscita, comanda relè 2 & 3
pinMode(5,OUTPUT); //pin5 programmato come uscita, comanda relè 4
pinMode(6,INPUT); //pin6 se valore 0 portare pin4 a 0
pinMode(7,OUTPUT); // pin7 da programmare come inpulso per eccitare relè 5
pinMode(8,OUTPUT); // pin 8 da programmare come uscita comanda relè 6
pinMode(9,OUTPUT); //pin9 programmato come uscita, comanda relè7
}

void loop(){ // QUI SI SCRIVONO LE FUNZIONI A CICLO RIPETUTO
enel=digitalRead(2);
if ((enel == LOW) && (blocco == 0)) { tempo = millis(); blocco = 1;} //DA PROGRAMMARE 10" DI RITARDO SU LOW--------------------
if ((enel == LOW) && (blocco == 1) && (millis() >= tempo + 10000)){
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
blocco = 0;
}
//else if ((enel == HIGH) && (blocco == 1)){tempo = millis(); blocco = 0;}
else //altrimenti se enel è WRITE spegni
{
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
}



---------------
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.

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 12/12/2018 12:00:42

CITAZIONE (calcola, 12/12/2018 11:37:35 ) Discussione.php?215447&1#MSG7

modificato


byte blocco = 0;
unsigned long tempo;
int enel;
void setup() { //
pinMode(2,INPUT); //pin2 programmato come ingresso, da programmare ritardo di 10sec se valore 0 comandare relè 1, 2, 3, 4,
pinMode(3,OUTPUT); //pin3 programmato come uscita, comanda relè 1
pinMode(4,OUTPUT);
//pin4 programmato come uscita, comanda relè 2 & 3
pinMode(5,OUTPUT); //pin5 programmato come uscita, comanda relè 4
pinMode(6,INPUT); //pin6 se valore 0 portare pin4 a 0
pinMode(7,OUTPUT); // pin7 da programmare come inpulso per eccitare relè 5
pinMode(8,OUTPUT); // pin 8 da programmare come uscita comanda relè 6
pinMode(9,OUTPUT); //pin9 programmato come uscita, comanda relè7
}

void loop(){ // QUI SI SCRIVONO LE FUNZIONI A CICLO RIPETUTO
enel=digitalRead(2);
if ((enel == LOW) && (blocco == 0)) { tempo = millis(); blocco = 1;} //DA PROGRAMMARE 10" DI RITARDO SU LOW--------------------
if ((enel == LOW) && (blocco == 1) && (millis() >= tempo + 10000)){
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
blocco = 0;
}
//else if ((enel == HIGH) && (blocco == 1)){tempo = millis(); blocco = 0;}
else //altrimenti se enel è WRITE spegni
{
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
}

nulla fa solo un leggero flash il led di qualche millisecondo e poi dopo 10sec un altro flash.

 

giorgio54
Watt


Gruppo:Utente
Messaggi:33

Stato:



Inviato il: 12/12/2018 12:20:47

scusami, delay(1000) è un secondo, delay(10000) sono 10 secondi.

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 12/12/2018 15:00:55

CITAZIONE (giorgio54, 12/12/2018 12:20:47 ) Discussione.php?215447&1#MSG9

scusami, delay(1000) è un secondo, delay(10000) sono 10 secondi.

si ma sta scritto 10000 non 1000. io vedo un lampeggio di millesimi di secondo ogni 10 secondi

 

giorgio54
Watt


Gruppo:Utente
Messaggi:33

Stato:



Inviato il: 12/12/2018 19:02:11

nella simulazione a me funziona, le uscite stanno alte per 10 secondi, carica queste istruzioni:

int enel;
void setup()
{ //
pinMode(2, INPUT); //pin2 programmato come ingresso, da programmare ritardo di 10sec se valore 0 comandare relè 1, 2, 3, 4,
digitalWrite(2, HIGH); // attivo resistenza di pull-up
pinMode(3, OUTPUT); //pin3 programmato come uscita, comanda relè 1
pinMode(4, OUTPUT); //pin4 programmato come uscita, comanda relè 2 & 3
pinMode(5, OUTPUT); //pin5 programmato come uscita, comanda relè 4
pinMode(6, INPUT); //pin6 se valore 0 portare pin4 a 0
pinMode(7, OUTPUT); // pin7 da programmare come inpulso per eccitare relè 5
pinMode(8, OUTPUT); // pin 8 da programmare come uscita comanda relè 6
pinMode(9, OUTPUT); //pin9 programmato come uscita, comanda relè7
}

void loop(){ // QUI SI SCRIVONO LE FUNZIONI A CICLO RIPETUTO
enel = digitalRead(2);
if (enel == LOW) { //DA PROGRAMMARE 10" DI RITARDO SU LOW--------------------
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(10000);
}
else //altrimenti se enel è LOW spegni
{
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
}

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 12/12/2018 19:05:33

[/quote]
nulla fa solo un leggero flash il led di qualche millisecondo e poi dopo 10sec un altro flash.[/quote]

certo, che è così,tu vorresti che rimangano accesi? e fino a quando?



---------------
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.

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 12/12/2018 22:52:18

CITAZIONE (calcola, 12/12/2018 19:05:33 ) Discussione.php?215447&1#MSG12


nulla fa solo un leggero flash il led di qualche millisecondo e poi dopo 10sec un altro flash.[/quote]

certo, che è così,tu vorresti che rimangano accesi? e fino a quando?[/quote]
come ho detto è in fase di scrittura domani con calma scriverò tutta la sequenza ma per ora ti dico che il pin 3 e pin 5 dovevano essere alimentati fin quando non tornano i 5volt al pin2 ed il pin 4 deve dare solo un impulso da 1sec

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 13/12/2018 09:43:38

ti scrivo la sequenza di quello che devo realizzare.

quando manca tensione al pin2 per 10sec deve:
--dare uscita su pin3
--dare impulso di 1sec al pin4
--dare uscita su pin5
sul pin6 come arrivano i 5V deve:
--interrompere alimentazione al pin5
--dare un impulso da 1sec pin7
--dare uscita su pin8
--dopo 1sec dare uscita su pin9

poi al pin2 ritorna la 5v è dopo 10sec è deve:
--interrompere alimentazione del pin9 e pin3
--dopo 1sec interrompe alimentazione pin8


tutta questa sequenza di come l'ho scritta si deve ripetere sempre a cascata in base al pin 2 se alimentato o no. è automatico se il pin 2 è disalimentato è dopo 10sec parte la sequenza anche se viene alimentato dovrà finire la sequenza aspettare i 10 sec alimentato e poi far ripartire la seconda sequenza.

 
 InizioPagina
 

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

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum