Go Down

Topic: Relay shield e millis (Read 1 time) previous topic - next topic

piergixxer76

Salve raga,
da poco smanetto con arduino e vi chiedo consiglio sul progetto che sto tentando di relaizzare.
Sto usando arduino uno rev 3+relay shield per cercare di pilotare le serrande motorizzate di casa.
SOno ancora in fase di test e non ho ancora collegato nulla alla 220V,
lo sketch che ho realizzato dovrebbe avere l'intento di abilitare un relay per la salita per 20 secondi(tempo cronometrato x l'apertura)  ed un secondo relay per  20 secondi per la chiusura, in modo da poter far coesistere gli interruttori di casa mettondili in parallelo.
In piu' vorrei fare in modo che per esempio sto tirando su la serranda per bloccarla ad un altezza x premo il bottone di discesa è disabilito il relay,
Il problema che ho pero' è che usando millis anche quando disabilito il relay arduino continua a contare fino a 20 secondi impedendomi di premere altri pulsanti.
qualcuno mi puo dare un dritta, please????

Code: [Select]
const int buttonPin1 = 8;     // the number of the pushbutton pin
const int buttonPin2 = 9;
const int ledPin1 =  4;  // the number of the LED pin
const int ledPin2 =  5;
unsigned long off_time1;
unsigned long off_time2;

boolean ledState1=false;
boolean ledState2=false;

int buttonState1 = 0;    // variable for reading the pushbutton status
int buttonState2 = 0;

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT); 
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT); 
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);

}

void loop(){

if ((ledState1) && (millis()>=off_time1)) /* is it on and is it later or equal to off_time */
{
    digitalWrite(ledPin1,LOW);
    ledState1 = false;
}
else if (!ledState1) /* is it off? */
{
    buttonState1 = digitalRead(buttonPin1);
    if(buttonState1 == HIGH)
    {
        digitalWrite(ledPin1, HIGH);
        ledState1 = true;
        off_time1 = millis() + 20000;
    }
}


if (buttonState1==HIGH && buttonState2==HIGH)
{
  digitalWrite(ledPin1,LOW);
  digitalWrite(ledPin2,LOW);
// off_time = millis() + 0;
}

if ((ledState2) && (millis()>=off_time2)) /* is it on and is it later or equal to off_time */
{
    digitalWrite(ledPin2,LOW);
    ledState2 = false;
}
else if (!ledState2) /* is it off? */
{
    buttonState2 = digitalRead(buttonPin2);
    if(buttonState2 == HIGH)
    {
        digitalWrite(ledPin2, HIGH);
        ledState2 = true;
        off_time2 = millis() + 20000;
    }
}

}


erpomata

A naso penso che dovresti far sapere ad arduino che stai premendo il pulsante (di salita o discesa)
http://www.paologiammarco.it
http://www.valentinamagni.it

fabpolli

Manca la parte che testa se un pulsante è stato premuto e un azione è già stata intrapresa, inoltre ti consiglio di leggere lo stato dei pulsanti con la libreria debounce altrimenti è certo che avrai letture falsate.

Ciao

Brunello

Quote
lo sketch che ho realizzato dovrebbe avere l'intento di abilitare un relay per la salita per 20 secondi(tempo cronometrato x l'apertura)  ed un secondo relay per  20 secondi per la chiusura, in modo da poter far coesistere gli interruttori di casa mettondili in parallelo.


e' questa cosa che non e' chiara....
Cosa succede se mentre stai premendo il pulsante di salita, l'automatismo chiude il rele' di discesa ?

piergixxer76

grazie delle risposte,
sono agli inizi quindi non so bene come procedere.

@Brunello l'idea del funzionamento era premo il pulsante per tirarla su se voglio interrompere senza aspettare i 20 secondi premo il punsante per tirarla giu ma senza farla andare giu solo per stopparla in  quella posizione.

@fabpolli mi dici dove trovare la libreria debounce?????

qualche dritta sul codice?????

piergixxer76

Qlc sa darmi una drittta anche su come collegare i fili per comendare le serrande

smontando la presa ho questo:

http://img546.imageshack.us/img546/1186/20130503175449.jpg

i fili blu e nero che comandano i due pulsanti, per collegarli al relay necessitano del comune.
da dove lo prendo?????
mi spiego nel relay uno andrà al normamente chiuso ed uno al comune.
questo fa fatto per entrambi i fili , ma il comune dove lo prendo??????

gpb01

Search is Your friend ... or I am Your enemy !

leo72

Io non userei i timeout per fermare le operazioni di salita e discesa, in questo modo non hai nessun riscontro oggettivo su dove effettivamente sia la serranda. Se qualcuno, mentre la stai azionando, regge con una mano per un paio di secondi la serranda, il motore sforza ma non riavvolge nulla. Dopo 20 secondi hai magari 5 cm di luce.
Non puoi mettere 2 finecorsa, uno in cima ed uno in fondo alla serranda?

In questo modo:
1) elimini i problemi che ti ho esposto
2) togli i controlli con il tempo e puoi snellire il controllo del codice perché diventa semplicemente un problema di lettura di 4 pulsanti (2 sono i finecorsa, 2 sono i pulsanti su/giù originali)

pablos

#8
May 03, 2013, 10:48 pm Last Edit: May 04, 2013, 11:23 am by pablos Reason: 1
Quote
i fili blu e nero che comandano i due pulsanti, per collegarli al relay necessitano del comune.
da dove lo prendo?????
Il comune è sempre la fase prelevata dall'impianto forza motrice (che va al centrale o comune del modulo pulsanti <>), il blu del motore va al neutro dell'impianto forza motrice, il marrone del motore fa una direzione "va sul pulsante >" e il nero del motore fa la direzione opposta "va sul pulsante <"

i pulsanti che usi sono ad autoritenuta o se li rilasci tornano indietro? perchè farebbe una certa differenza se vuoi applicare un automazione
no comment

yoshi93

Con serrande intendi i rotolanti o cosa? Se sono rotolanti un metodo di controllo della posizione potrebbe essere quella di mettere un sensore che conta i punti di giuntura tra i vari pezzi così puoi regolare anche l'altezza magari in base alla luminosità.

pablos

#10
May 03, 2013, 11:18 pm Last Edit: May 03, 2013, 11:37 pm by pablos Reason: 1
Rotolanti?  .... le tapparelle da che mondo e mondo sono sempre state avvolgibili  :D :D :D
Quote
regolare anche l'altezza magari in base alla luminosità.

sicuro che puoi mantenere lo stesso rapporto con il sole perpendicolare tipo le 13:00  e al tramonto? o magari di notte...

ciao
no comment

yoshi93

Ovviamente la mia era una idea moooolto teorica che ovviamnte in pratica è moooolto più complessa da realizzare  :).

piergixxer76

raga grazie a tutti x le dritte,
ma ritornando ai problemi contingenti di realizzazione mi servirebbero delle proposte per aggiustare lo skecth.
cosi come l'ho postato funziona, l'ho testato sulla breadboard accendendo del led che dovrebbero simulare i comandi della serranda.
Solo che come dicevo prima quando interrompo la salita o la discesa con il tasto opposto( se sale premo discesa, se scende premo salita)
una volta fermato per poter operare di nuovo devo x forza aspettare i 20 secondi per poter riativare i tasti.

Qualcuno mi saprebbe evidenziare una proposta nel codice????

@Yoshy93 le serrande sono quelle che si avvolgono :P e la chiusura con un fotoresistore puo' essere un alternitava ma al momento sto ecrcando di fare le cose semplici

@Pablos, non so se hai visto la foto che ho postato. Sicuramente sei piu esperto di me, magari provo a dirti quello che ho capito e tu correggimi se sbaglio.
nella presa a muro ci sono 2 frutti che contengono 4 pulsanti che comandano su e giu due serrande.
Se prendiamo come esempio il primo da sinistra la configurazione è la seguente:
ci sono 4 buchi con serraggio, nel frutto:


Uploaded with ImageShack.us

l'immagine rudimentale serve x dare l'idea, i due fori sulla diagonale sono collegati con il nero, gli altri due il blu ed il marrone sono inseriti negli altri due buchi.
La cosa che non mi è chiara ora è se io voglio collegare il mio relay a questi cavi , devo lasciare cosi come sta il nero e prendere il blu ed il marrone da inserire nel relay??????
se facessi cosi, per usare il relay mi servirebbe un filo da mettere nel normalmente chiuso ed uno da mettere nel comune??questo usando 2 relay uno che comandi la salita ed uno che comandi la discesa,
quindi oltre al blu ed il marrone, il comune da dove lo prendo???????
spero di essere stato chiaro nelle domande





pablos

#13
May 04, 2013, 01:18 am Last Edit: May 04, 2013, 01:25 am by pablos Reason: 1
sarebbe stata meglio una foto, comunque il comune qui mi pare sia il nero, percui contatto del relè(1) NA tra nero-blu e contatto del relè(2) NA tra nero-marrone ... nessun contatto normalmente chiuso.
Normalmente chiuso si intende relè a riposo.
ciao
no comment

piergixxer76



Nella foto nel frutto di sinistra avevo staccato il blu ed il marrone(in foto sembra nero) per attaccarli al rele mentre avevo lasciato inalterato il nero che come dici tu funge da comune.
Da quello che mi hai scritto pero' mi sembra di capire che ladciando sempre il nero cosi come in foto dovre aggiungere due fili che fungano da comune che partano dai due fori dove sta il nero in foto e che raggiungano i relay nella posizione comune.

Go Up