salve a tutti, premetto che capisco poco di elettronica ma mi trovo a dover realizzare una presa di corrente multipla dove alla pressione di un pulsante, si attivano le varie prese a distanza di pochi secondi l'una dall'altra e quando lo stesso pulsante viene premuto nuovamente, si spengono nella sequenza inversa. In sostanza devo collegare 8 prese di corrente ed il tempo che passa tra l'accensione di una presa e l'altra è di circa 5 o 10 secondi, è ancora da accertare, ma una volta deciso non si cambia più. Ho comprato l'arduino e mi deve arrivare la scheda già fatta con sopra gli 8 relè ma proprio non so come programmarlo. mi aiutate per favore???
ma almeno porre una domanda specifica?
leggere il regolamento?
presentarsi?
dai su che se passa LEO ti prende a mazzate... ]
Sergio, benvenuto.
Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - Megatopic - Arduino Forum
- qui le pinout delle varie schede by xxxPighi: Pinout Diagram - Megatopic - Arduino Forum
- qui una serie di link utili: Link utili elettronica - Megatopic - Arduino Forum
Sergio, la programmazione di quei rele già fatti di solito è semplice. Li devi alimentare da Arduino con il 5V e il GND.
Poi ogni rele lo colleghi a un pin digitale di Arduino e con la digitalWrite(pin,HIGH) dici al rele di attivarsi e digitalWrite(pin,LOW) di disattivarsi. Di esempi nel forum e si internet ne trovi una tonnellata.
Sarebbe meglio avere almeno un link di questa scheda rele per verificare. Alcuni schede rele lavorano in logica inversa.
Agli elettronici che frequentano il forum il link/foto/schema sarebbe utile per dirti se quella scheda è fatta secondo tutti i canoni di sicurezza. Ricordo che ci vuoi collegare la 220V, occhio che è pericolosa.
I rele poi dalla parte della 220V hanno 3 contatti, ne devi usare solo due, il centrale (di solito) che è il comune e il NO (normalmente open-aperto) oppure NC (normalmente chiuso) e interrompere uno dei fili che va alla lampadina/carico, come se il rele fosse un interruttore (non bipolare)
grazie dei consigli, sono nuovo dei forum e quindi non sapevo come comportarmi. comunque la scheda è questa qui:
http://www.ebest24.com/it/p28548.html?language=it
per i collegamenti tra la scheda dei relè e l'arduino ho già visto come effettuarli ed è semplicissimo, per quanto riguarda la pericolosità, grazie del consiglio, sempre meglio la prudenza, ma di elettricità me ne intendo molto, realizzo quadri elettrici per lo spettacolo fino a 280 Ampere, comunque sempre grazie, ed anche per i collegamenti ai relè non è un problema.
il mio guaio è che con la programmazione non ho ancora avuto il tempo di mettermi a provare l'Arduino e non so proprio come fare, devo consegnare questo prodotto finito entro un mesetto ed il mio problema è che i relè si devono accendere in sequenza, alla pressione di un pulsante, con un ritardo l'uno dall'altro di circa 10 secondi e, ripremendo lo stesso pulsante, si devono spegnere sempre a distanza di circa 10 secondi, ma in senso inverso.
Purtroppo come detto non so generare il codice opportuno.
Un rele = 1 pin di Arduino digitalWrite(pin,HIGH); ecciti il rele, digitalWrite(pin,LOW); lo disecciti
Alla pressione del tasto fai una bella sequenza tipo (si presume partiamo rele spenti):
digitalWrite(pin1,HIGH); // li accendiamo uno dopo l'altro
delay(10000); // 10 secondi
digitalWrite(pin2,HIGH);
delay(10000); // 10 secondi
digitalWrite(pin3,HIGH);
....
accesi=true;
E alla fine metti una variabile "accesi" a true per sapere che hai fatto la sequenza in accensione
Se alla pressione del pulsante accesi è false fai quella sequenza, altrimenti fai sequenza inversa (metti LOW dal rele 8 al 1)
e alla fine metti accesi=false
Quello che prima devi imparare è sentire la pressione di un pulsante. Parti da un circuito semplice con pulsante/resistenza e accendi/spegni led del pin 13 in base alla pressione del pulsante
Mentre accendi la sequenza o la spegni, può essere interrotta dalla pressione del pulsante?
ciao grazie dell'aiuto, allora la sequenza non deve essere mai interrotta. quando premo si accendono dal primo all'ultimo e quando ripremo si spengono. Ora devo procurarmi un pulsante, mi sono scordato di ordinarlo. Ero indeciso se prenderne uno che si illumina quando parte la sequeza di swictch on e si spegne quando termina lo switch off.
ciao ragazzi, finalmente sono riuscito a mettere mano sull'arduino e la scheda dei relè.
ho provato a studiare un poco ma alla fine sono riuscito a fare questo:
/*
accensione dei relè in sequenza da 1 a 8
con ritardo di 10 secondi
alla pressione del pulsante.
spegnimeto dei relè in sequenza da 8 a 1
con ritardo di 10 secondi
alla pressione dello stesso pulsante
*/
#define pin1 2
#define pin2 3
#define pin3 4
#define pin4 5
#define pin5 6
#define pin6 7
#define pin7 8
#define pin8 9
#define button A0
int val = 0;
int stato = 0;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
pinMode(pin8, OUTPUT);
pinMode(button, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
val = digitalRead (button);
digitalWrite(pin1, HIGH); // attiva relè 1
delay(10000); // attendi 10 secondi
digitalWrite(pin2, HIGH); // attiva relè 2
delay(10000); // attendi 10 secondi
digitalWrite(pin3, HIGH); // attiva relè 3
delay(10000); // attendi 10 secondi
digitalWrite(pin4, HIGH); // attiva relè 4
delay(10000); // attendi 10 secondi
digitalWrite(pin5, HIGH); // attiva relè 5
delay(10000); // attendi 10 secondi
digitalWrite(pin6, HIGH); // attiva relè 6
delay(10000); // attendi 10 secondi
digitalWrite(pin7, HIGH); // attiva relè 7
delay(10000); // attendi 10 secondi
digitalWrite(pin8, HIGH); // attiva relè 8
delay(10000); // attendi 10 secondi
digitalWrite(pin8, LOW); // disattiva relè 1
delay(10000); // attendi 10 secondi
digitalWrite(pin7, LOW); // disattiva relè 2
delay(10000); // attendi 10 secondi
digitalWrite(pin6, LOW); // disattiva relè 3
delay(10000); // attendi 10 secondi
digitalWrite(pin5, LOW); // disattiva relè 4
delay(10000); // attendi 10 secondi
digitalWrite(pin4, LOW); // disattiva relè 5
delay(10000); // attendi 10 secondi
digitalWrite(pin3, LOW); // disattiva relè 6
delay(10000); // attendi 10 secondi
digitalWrite(pin2, LOW); // disattiva relè 7
delay(10000); // attendi 10 secondi
digitalWrite(pin1, LOW); // disattiva relè 8
delay(10000); // attendi 10 secondi
}
ora il mio problema è che non riesco a settare il pulsante, cioè che tutto si avvii alla pressione dello stesso e poi si fermi dopo la sequenza di accensione e che alla ripressione del pulsante si avvi la sequenza inversa.
un grazie anticipato a chi mi aiuta.
Definisci il tempo 10000 ad una costante in modo che se vuoi variarlo lo vari in una sola linea
Per il pulsante visto che non devi far altre cose puoi fare una if sullo stato del pulsante
Ciao,
Visto che usi i digitali in sequenza puoi snellire il codice con delle strutture a ciclo:
for (int n = 1; n <= 8; n++)
{
digitalWrite(n, HIGH); // attiva relè 1
delay(10000); // attendi 10 secondi
}
Per quanto riguarda il pulsante, ho visto che lo avevi settato sul canale analogico A0, ho modificato ed associato al digitale n°10.
Il valore del pulsante viene letto ed "appoggiato" su una variabile, in questo modo puoi gestirlo come per il doppio comando accensione e spegnimento.
Attenzione però che non so come tu abbia fatto la parte di collegamenti, potrebbe essere opportuno settare l'input come Pullup: pinMode(button, INPUT_PULLUP);
Quanto postato qui sotto dovrebbe funzionare, ma verificalo bene.
/*
accensione dei relè in sequenza da 1 a 8
con ritardo di 10 secondi
alla pressione del pulsante.
spegnimeto dei relè in sequenza da 8 a 1
con ritardo di 10 secondi
alla pressione dello stesso pulsante
*/
#define pin1 2
#define pin2 3
#define pin3 4
#define pin4 5
#define pin5 6
#define pin6 7
#define pin7 8
#define pin8 9
#define button 10
int val = 0;
int appVal = 0;
int stato = 0;
int ptrFase = 0;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
pinMode(pin8, OUTPUT);
pinMode(button, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
switch (ptrFase)
{
case 0:
val = digitalRead (button);
if (appVal != val)
{
appVal = val;
if (appVal == 1)
{
ptrFase = 1;
}
else
{
ptrFase = 2;
}
}
break;
case 1:
for (int n = 2; n <= 9; n++)
{
digitalWrite(n, HIGH); // attiva relè 1
delay(10000); // attendi 10 secondi
}
ptrFase = 0;
break;
case 2:
for (int n = 9; n >= 2; n--)
{
digitalWrite(n, LOW); // attiva relè 1
delay(10000); // attendi 10 secondi
}
ptrFase = 0;
break;
}
}
edit: questo è per un pulsante stabile.
Saluti
Matteo
nid69ita:
accesi=true;
E alla fine metti una variabile "accesi" a true per sapere che hai fatto la sequenza in accensione
Se alla pressione del pulsante accesi è false fai quella sequenza, altrimenti fai sequenza inversa (metti LOW dal rele 8 al 1)
e alla fine metti accesi=false
Mentre accendi la sequenza o la spegni, può essere interrotta dalla pressione del pulsante?
Come correttamente dice nid69ita, è utile sapere se vuoi intervenire sulla sequenza in qualche modo, e se usi un pulsante ad impulso devi utilizzare una variabile di appoggio per conoscere lo stato delle uscite.
dovrebbe essere così:
/*
accensione dei relè in sequenza da 1 a 8
con ritardo di 10 secondi
alla pressione del pulsante.
spegnimeto dei relè in sequenza da 8 a 1
con ritardo di 10 secondi
alla pressione dello stesso pulsante
*/
#define pin1 2
#define pin2 3
#define pin3 4
#define pin4 5
#define pin5 6
#define pin6 7
#define pin7 8
#define pin8 9
#define button 10
int val = 0;
int ptrFase = 0;
int appState = 0;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
pinMode(pin8, OUTPUT);
pinMode(button, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
switch (ptrFase)
{
case 0:
val = digitalRead (button);
if (val==1)
{
ptrFase = 1;
}
break;
case 1:
if (appState == 0)
{
ptrFase = 2;
}
else
{
ptrFase = 3;
}
break;
case 2:
for (int n = 2; n <= 9; n++)
{
digitalWrite(n, HIGH); // attiva relè 1
delay(10000); // attendi 10 secondi
}
appState = 1;
ptrFase = 0;
break;
case 3:
for (int n = 9; n >= 2; n--)
{
digitalWrite(n, LOW); // attiva relè 1
delay(10000); // attendi 10 secondi
}
appState = 0;
ptrFase = 0;
break;
}
}
ragazzi per ora grazie a tutti, veramente. mi metto all'opera appena possibile e vi terrò aggiornati. di nuovo grazie mille
nid69ita:
Un rele = 1 pin di Arduino digitalWrite(pin,HIGH); ecciti il rele, digitalWrite(pin,LOW); lo disecciti
Alla pressione del tasto fai una bella sequenza tipo (si presume partiamo rele spenti):digitalWrite(pin1,HIGH); // li accendiamo uno dopo l'altro
delay(10000); // 10 secondi
digitalWrite(pin2,HIGH);
delay(10000); // 10 secondi
digitalWrite(pin3,HIGH);
....
accesi=true;
E alla fine metti una variabile "accesi" a true per sapere che hai fatto la sequenza in accensione Se alla pressione del pulsante accesi è false fai quella sequenza, altrimenti fai sequenza inversa (metti LOW dal rele 8 al 1) e alla fine metti accesi=false Quello che prima devi imparare è sentire la pressione di un pulsante. Parti da un circuito semplice con pulsante/resistenza e accendi/spegni led del pin 13 in base alla pressione del pulsante Mentre accendi la sequenza o la spegni, può essere interrotta dalla pressione del pulsante?
quei relè funzionano al contrario. Se si collega la presa fra comune e normalmente aperto per attivare la presa bisogna mettere a LOW il pin corrispondente
salve ragazzi, per prima cosa grazie mille, volevo avvisarvi che il programma compilato da AMBOSE è perfetto, quindi mi ritengo soddisfatto, ma devo aggiungere gli ultimi 2 particolari per renderlo ancora migliore.
punto 1
il pulsante di avvio della sequenza ha un led incorporato, quindi vorrei fare che quando la sequenza parte, si accende e rimane acceso il led e dopo 5 secondi parte la sequenza, invece quando si fa avviare la sequenza inversa, vorrei che il led lampeggiasse e si spegnesse a sequenza finita.
punto 2
vorrei introdurre un potenziometro col quale poter variare il delay della sequenza, da 3 secondi ad un massimo di 15.
vi ringrazio di nuovo tantissimo, spero possiate aiutarmi. Ciaoooo
ultima notizia, dopo il montaggio definitivo mi sono accorto che l'arduino si resetta dopo alcuni minuti che i relè sono accesi. Ho staccato tutto ed ho riprovato senza nessun altro componente, ma purtroppo fa la stessa cosa.
se hai una scheda a 8 rele' la devi alimentare con un alimentatore esterno
ragazzi,
chi mi consiglia un relè che posso eccitare con la corrente di arduino?tipo 5v con qualche mA?
Così da effettuare lo scambio dall'altra parte di 220V?
Grazie
Giuseppe
chi mi consiglia un relè che posso eccitare con la corrente di arduino?tipo 5v con qualche mA?
se intendi alimentato direttamente da un pin di Arduino, serve un rele' reed
tipo questo http://it.rs-online.com/web/p/rele-reed/3491796/
edit:
Aspetta un po'.. ho capito male, pensavo che tu volessi pilotare la bobina di un'altro rele'.
Niente, se vuoi usare un rele' per grossi carichi, devi pilotarlo con un transistor e di schemi sul web ce ne sono migliaia
risolto il problema per cui andava in reset l'arduino. Mi rimane solo da capire come fare per il led del pulsante e per mettere il potenziometro. Grazie ancora.
Brunello:
chi mi consiglia un relè che posso eccitare con la corrente di arduino?tipo 5v con qualche mA?
se intendi alimentato direttamente da un pin di Arduino, serve un rele' reed
tipo questo http://it.rs-online.com/web/p/rele-reed/3491796/edit:
Aspetta un po'.. ho capito male, pensavo che tu volessi pilotare la bobina di un'altro rele'.
Niente, se vuoi usare un rele' per grossi carichi, devi pilotarlo con un transistor e di schemi sul web ce ne sono migliaia
Brunello. Devo pilotare un circolatore a 220v. mi hanno dato un finder che però si eccita solo con 2A e con il pin di arduino ed il transistor non riesco ad aprirlo. Cercavo quindi un relè che vada bene per i 40mA che ho io...