Go Down

Topic: Collegamento scheda relè 12v ad arduino (Read 3458 times) previous topic - next topic

Atlantic

Ciao a tutti,
vorrei collegare ad Arduino una scheda relè come questa http://www.ebay.it/itm/4-Channel-12V-Relay-Module-for-Arduino-PIC-ARM-AVR-DSP-/260752266329?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item3cb60bd459 per poter collegare una ventola a 12v comandata tramite seriale. Ho collegato le uscite del "GND", "IN1" (il pin del primo relè) e"VCC" della scheda rispettivamente al "GND", "Pin 13" e "+5V" dell'arduino, solo che ora non capisco come collegare i fili della ventola, ovvero il "+" ed il "-" alle 3 uscite del relè. Tenete conto che sempre alle 3 uscite del relè devo inserire anche i poli della batteria a 12v. Potete darmi una mano per collegare il tutto? Grazie a tutti in anticipo :)

Il codice caricato sulla scheda Arduino è il seguente:

Code: [Select]
#define ventola 13  // ventola connessa al pin n°13
byte rx = 0;    // variabile per contenere il carattere ricevuto

void setup()
{
Serial.begin(9600); // imposto la UART per lavorare a 9600
pinMode(ventola, OUTPUT); // imposto il pin sul quale è collegata la ventola come uscita
Serial.flush(); // svuoto il buffer di ricezione seriale
}

void loop()
{

if (Serial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa
{
rx = Serial.read(); // leggo il carattere ricevuto e lo memorizzo in rx
Serial.flush(); // svuoto il buffer di ricezione seriale

if (rx=='1' || rx=='2') // ho ricevuto o il tasto 1 oppure il tasto 2
{

if (digitalRead(ventola) == HIGH) // la ventola era accesa?
{
digitalWrite(ventola,LOW); // la spengo
Serial.println("Ventola Disattivata");
}
else // la ventola era spenta
{
digitalWrite(ventola,HIGH); // la accendo
Serial.println("Ventola Attivata");
}

}

else // non ho ricevuto il tasto 1

{
Serial.print(" ");
Serial.print(rx,BYTE);
Serial.println();
}
}
}

Michele Menniti

A me pare che ci sia un po' di confusione nello schema: il VCC sul jumper è sicuramente un 12V mentre il Vcc su R1 dovrebbero essere i 5V di Arduino.
Il - della ventola lo colleghi direttamente a GND, il + della ventola al pin 2 del relè, 12V vanno anche al pin 1 del relè
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

bigjohnson

#2
Oct 19, 2011, 11:49 am Last Edit: Oct 19, 2011, 11:51 am by bigjohnson Reason: 1
Ciao,
per collegare un rele 12 volt all'arduino devi per forza usare un transistor npn in configurazione open collector, se fai entrare la 12 nei pin di arduino direttamente lo bruci.
In questa pagina http://www.panu.it/ardupower/ trovi un esempio realizzato con l'integrato uln2003, che contiene sette darlington npn.

Alberto

Michele Menniti


Ciao,
per collegare un rele 12 volt all'arduino devi per forza usare un transistor npn in configurazione open collector, se fai entrare la 12 nei pin di arduino direttamente lo bruci.
In questa pagina http://www.panu.it/mrtg/ trovi un esempio realizzato con l'integrato uln2003, che contiene sette darlington npn.

Alberto

Secondo la mia interpretazione i 12V non possono entrare in Arduino, infatti ho scritto:
Quote
il Vcc su R1 dovrebbero essere i 5V di Arduino
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

bigjohnson

OO,
adesso ho visto bene lo schema del modulo e mi sono accorto che è fatto molto bene, per cui si può collegare direttamente ad arduino.
+12  --- ingresso ventola --- contatti rele --- massa
porta arduino --- ingresso in0
massa arduino --- massa modulo
con questa configurazione con la porta di arduino a livello alto il rele si apre, percui bisogna usare i contatti no e nc del rele scambiandoli.

Alberto

Atlantic


OO,
adesso ho visto bene lo schema del modulo e mi sono accorto che è fatto molto bene, per cui si può collegare direttamente ad arduino.
+12  --- ingresso ventola --- contatti rele --- massa
porta arduino --- ingresso in0
massa arduino --- massa modulo
con questa configurazione con la porta di arduino a livello alto il rele si apre, percui bisogna usare i contatti no e nc del rele scambiandoli.

Alberto



stai facendo riferimento alla scheda che ho, che poi sarebbe quel link di ebay? Perchè se è si, puoi spiegarmi meglio, ho le idee un pò confuse  :~

Michele Menniti

La massa di Arduino non è necessario collegarla a quella del circuito relé, sta usando un optoisolatore, non un transistor.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

bigjohnson

Hai ragione, scambiando i pin in ingresso l'uscita del relè segue i livelli 1 e 0 della porta di arduino.
L'unico accorgimento è aprire il jumper sul power supply.

Alberto

Michele Menniti

OK riepiloghiamo per Atlantic che mi ssembra un po' sconcertato :)
In0 va su un pin di Arduino, che dovrai mettere in LOW per far eccitare il relè
Vcc (quello collegato a R1 ) lo devi collegare ai +5V di Arduino
Il Jumper lo devi togliere
A JD-VCC devi collegare 12V il negativo a GND
GND di Arduino e GND della scheda NON devi collegarli tra loro.
al + della ventola metti direttamente i 12V con cui alimenti la scheda
il - della ventola lo colleghi al pin 2 del relè
il pin 1 del relè lo colleghi al GND della scheda
così quando il pin di Arduino va in LOW la ventola parte, se invece il pin di Arduino va in HIGH la ventola si ferma.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Atlantic

Allora ragazzi, ricapitoliamo un pò :)
Dunque, ho una scheda composta da 4 relay a 12v cadauno come mostrata in figura , il suo schema elettrico ò il seguente:

Ho intenzione, alle 3 uscite del primo relè, collegare una ventola alimentata a sua volta da una batteria a 12v. La mia domanda è: come collego tutti e quattro i cavi (ovvero, i due fili della batteria, polo "+" e polo "-" ed i restanti due fili "+" e "-" della ventola) alle 3 uscite del relè?

Lo schema di collegamento tra la scheda relè ed arduino è il seguente:


GND   IN1   IN2   IN3   IN4   VCC      (scheda relè)
|    |               |         
|    |             |
|    |             |
|    |             |
|    |             |
GND   Pin            +5V      (Arduino UNO)
     digitale
    13

Atlantic


OK riepiloghiamo per Atlantic che mi ssembra un po' sconcertato :)
In0 va su un pin di Arduino, che dovrai mettere in LOW per far eccitare il relè
Vcc (quello collegato a R1 ) lo devi collegare ai +5V di Arduino
Il Jumper lo devi togliere
A JD-VCC devi collegare 12V il negativo a GND
GND di Arduino e GND della scheda NON devi collegarli tra loro.
al + della ventola metti direttamente i 12V con cui alimenti la scheda
il - della ventola lo colleghi al pin 2 del relè
il pin 1 del relè lo colleghi al GND della scheda
così quando il pin di Arduino va in LOW la ventola parte, se invece il pin di Arduino va in HIGH la ventola si ferma.


ok grazie, ora provo :D

Atlantic


OK riepiloghiamo per Atlantic che mi ssembra un po' sconcertato :)
In0 va su un pin di Arduino, che dovrai mettere in LOW per far eccitare il relè
Vcc (quello collegato a R1 ) lo devi collegare ai +5V di Arduino
Il Jumper lo devi togliere
A JD-VCC devi collegare 12V il negativo a GND
GND di Arduino e GND della scheda NON devi collegarli tra loro.
al + della ventola metti direttamente i 12V con cui alimenti la scheda
il - della ventola lo colleghi al pin 2 del relè
il pin 1 del relè lo colleghi al GND della scheda
così quando il pin di Arduino va in LOW la ventola parte, se invece il pin di Arduino va in HIGH la ventola si ferma.


Grazie mille, è andato tutto perfetto!!! ;)

Michele Menniti



OK riepiloghiamo per Atlantic che mi ssembra un po' sconcertato :)
In0 va su un pin di Arduino, che dovrai mettere in LOW per far eccitare il relè
Vcc (quello collegato a R1 ) lo devi collegare ai +5V di Arduino
Il Jumper lo devi togliere
A JD-VCC devi collegare 12V il negativo a GND
GND di Arduino e GND della scheda NON devi collegarli tra loro.
al + della ventola metti direttamente i 12V con cui alimenti la scheda
il - della ventola lo colleghi al pin 2 del relè
il pin 1 del relè lo colleghi al GND della scheda
così quando il pin di Arduino va in LOW la ventola parte, se invece il pin di Arduino va in HIGH la ventola si ferma.


Grazie mille, è andato tutto perfetto!!! ;)

Ottimo, complimenti! XD
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Atlantic

Ragazzi, nuovo problema, pensavo avessi risolto ed invece no. Vi spiego meglio.
Allora, i collegamenti dati da menniti sono ottimi ed è andato tutto bene, ovvero i relè risponde ai comandi tramite arduino, solo un problema sorge: sia che imposti il digitalwrite a "LOW" che a "HIGH" del pin digitale 13, il relè si accende automaticamente quando poi dovrei io, attraverso il codice, eccitarlo ad accendersi. Cioè, quando collego arduino alla porta USB, dovrei fare in modo che il pin n.13 risulti acceso in modo tale che il relè risulti spento, se poi volessi accendere il relè, schiacciando per esempio, il tasto 2 della tastiera del computer, esso si azioni, dove è che ho sbagliato nel scrivere il codice? Mi sono perso :( Vi posto nuovamente il codice, sperando che sia stato chiaro nell'esporvi il problema :( :( :( :( :(

Code: [Select]
#define ventola 13  // ventola connessa al pin n°13
byte rx = 0;    // variabile per contenere il carattere ricevuto

void setup()
{
Serial.begin(9600); // imposto la UART per lavorare a 9600
pinMode(ventola, OUTPUT); // imposto il pin sul quale è collegata la ventola come uscita
Serial.flush(); // svuoto il buffer di ricezione seriale
}

void loop()
{

if (Serial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa
{
rx = Serial.read(); // leggo il carattere ricevuto e lo memorizzo in rx
Serial.flush(); // svuoto il buffer di ricezione seriale

if (rx=='1' || rx=='2') // ho ricevuto o il tasto 1 oppure il tasto 2
{

if (digitalRead(ventola) == HIGH) // la ventola era accesa?
{
digitalWrite(ventola,LOW); // la spengo
Serial.println("Ventola Disattivata");
}
else // la ventola era spenta
{
digitalWrite(ventola,HIGH); // la accendo
Serial.println("Ventola Attivata");
}

}

else // non ho ricevuto il tasto 1

{
Serial.print(" ");
Serial.print(rx,BYTE);
Serial.println();
}
}
}

Michele Menniti

Io non vedo da nessuna parte il pin impostato su HIGH o LOW inizialmente, aggiungi in setup, sotto l'istruzione di OUTPUT, la riga:
digitalWrite(ventola, HIGH);
così al primo avviamento il relè è diseccitato.

Un'altra cosa: se hai messo il led tra il pin 13 e il pin 2 del fotoaccoppiatore ti conviene mettere anche una pull-up, cioè una R da 10K tra il pin 2 e +5V, così elimini la possibilità di situazioni fluttuanti che potrebbero far eccitare il relè in momenti indesiderati.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Go Up