Pages: [1] 2   Go Down
Author Topic: Relay shield e millis  (Read 1251 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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;
    }
}

}

Logged

Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

A naso penso che dovresti far sapere ad arduino che stai premendo il pulsante (di salita o discesa)
Logged


Offline Offline
Full Member
***
Karma: 1
Posts: 159
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 78
Posts: 2163
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?????
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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??????
Logged

Switzerland
Online Online
Faraday Member
**
Karma: 114
Posts: 5986
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

....mi dici dove trovare la libreria debounce?????
...

Guarda QUI : http://www.arduino.cc/playground/Code/Bounce

Guglielmo
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22966
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged


Genova
Offline Offline
Faraday Member
**
Karma: 40
Posts: 3432
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: May 04, 2013, 04:23:01 am by pablos » Logged

no comment

Offline Offline
Sr. Member
****
Karma: 4
Posts: 362
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Genova
Offline Offline
Faraday Member
**
Karma: 40
Posts: 3432
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Rotolanti?  .... le tapparelle da che mondo e mondo sono sempre state avvolgibili  smiley-grin smiley-grin smiley-grin
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
« Last Edit: May 03, 2013, 04:37:46 pm by pablos » Logged

no comment

Offline Offline
Sr. Member
****
Karma: 4
Posts: 362
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-razz 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




Logged

Genova
Offline Offline
Faraday Member
**
Karma: 40
Posts: 3432
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: May 03, 2013, 06:25:08 pm by pablos » Logged

no comment

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset



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

Pages: [1] 2   Go Up
Jump to: