Sto sperimentando per la prima volta l'utilizzo del relè con Arduino Uno
nella fattispecie vorrei utilizzare Arduino e questo semplice relè
(http://i01.i.aliimg.com/img/pb/607/693/424/424693607_084.jpg)
per accendere e spegnere una lampadina
ho collegato il positivo ai 5v, la massa al GND e il pin IN all'ingresso 9 digitale di Arduino
ho caricato il seguente sketch:
int Relay = 9;
void setup()
{
pinMode(Relay, OUTPUT); //Set Pin9 as output
}
void loop()
{
digitalWrite(Relay, HIGH); //Turn off relay
delay(2000);
digitalWrite(Relay, LOW); //Turn on relay
delay(2000);
}
per il momento non ho collegato nessuna lampadina al relè... però pensavo che si accendessero almeno i due micro led che ci sono sulla scheda del relè (Power e on/off)... invece NULLA!
E' normale???
Ciao zuzzurro, eccoti alle prese con un altro enigma.
Ma non dovevevi mandare indietro la scheda difettosa?
Per quanto riguarda il tuo quesito, bhe no.... non è normale, il led power si dowrebbe accendere, dovresti sentire il tic del relè e il leddino on/off dovrebbe dare segni di vita se hai collegato i pin giusti, prova a fare un ponte tra +5v e l'input della schedina relè, scollegando il pin 9 da arduino, dovresti vedere se scatta il relè. In questo modo vedi se l'alimentazione arriva, se il collegamento è giusto e se il relè funzia.
Per verificare invece la parte arduino metti un led sull'uscita del pin 9 con relativa resistenza (senza relè) e vedi se si accende, nel tuo caso lampeggia ogni 2 secondi. Sicuro di non aver sbagliato qualcosa?
ciao
ciao pablos!
manderò indietro la ethernet shield difettosa e mi rimborseranno, ordinerò un Arduino Ethernet così inizierò a fare degli esperimenti in coppia con l'altro che ho già, per il mio futuro impianto di domotica... sempre che "angeli" come te mi daranno una mano a risolvere quei problemini che per me a volte diventano incubi!
Ho scoperto l'inghippo... se lo alimento da solo funziona!
sto cercando di realizzare questo piccolo progetto: http://www.giannifavilli.it/blog/arduino-controllo-remoto-http/
Al momento sto utilizzando:
- Arduino Ethernet
- sensore di temperatura e umidità DHT22
- sensore foresistore ceramico 400mW
- relè con stadio pilota
- niente led per il momento
il tutto funziona anche via web... dopo aver risolto i problemi della scheda ethernet di ieri notte... e aver utilizzato l'Arduino Ethernet (al posto di Arduino + Ethernet shield), ma adesso se io provo ad alimentare oltre ai due sensori anche il relè... evidentemente non c'è abbastanza tensione per farlo funzionare insieme al resto... ti sembra possibile???
In attesa di una soluzione, ho deciso di prendere l'alimentazione da Vin... ovvero direttamente dall'alimentatore esterno (che però è da 9v stabilizzato).... e funziona.... è corretto?
visto che hai preso un relè a 5v, alimentarlo con 9v non è propriamente corretto, funzionerà per un po' ma durerà poco, fatti un piccolo stabilizzatore con un 7805 e usa pure i 9v, di schemini ne trovi a fiumi. Questo in via sperimentale, poi dovrai fare delle scelte definitive.
Per la ethernet non hai considerato una cosa ..... il difetto sulle saldature ICSP puo' essere sia da lato ethernet che da lato arduino, verifica meglio, perchè rischi di farti cambiare una scheda e non risolvere
ciao
grazie per i consigli... avendo uno stabilizzatore esterno universale regolabile, per il momento preferisco impostarlo a 5v che poi sono gli stessi che arrivano all'Arduino dal cavo USB... vero?
Per quanto rigarda il progettino di gianni favilli...
una cosetta non funziona a dovere: se utilizzo i comandi ACCENDI e SPEGNI via web per comandare il relè... questi accendo il relè ma istantaneamente quest'ultimo si spegne, perché a fine ciclo in fondo c'è un comando di reset
readString=""; //clearing string for next read
Ma non dovrebbe rimanere attivato il relè? ..fino a quando non clicco su SPEGNI e riporto il valore a zero? oppure genera solo un impulso?
Perdonami per la mia vastissima ignoranza ... :~
impostarlo a 5v che poi sono gli stessi che arrivano all'Arduino dal cavo USB... vero?
Si la Usb fornisce 5v, se alimenti con un alimentatore a 5v va bene qualche centinaio di mA però ci vogliono.
Per quanto rigarda il progettino di gianni favilli...
una cosetta non funziona a dovere: se utilizzo i comandi ACCENDI e SPEGNI via web per comandare il relè... questi accendo il relè ma istantaneamente quest'ultimo si spegne, perché a fine ciclo in fondo c'è un comando di reset
readString=""; //clearing string for next read
Ma non dovrebbe rimanere attivato il relè? ..fino a quando non clicco su SPEGNI e riporto il valore a zero? oppure genera solo un impulso?
Si dovrebbe rimanere acceso, non ho presente il progetto che dici di gianni favilli... , però a occhio la riga readString=""; svuota solo la variabile pronta per leggere un altra riga altrimenti i caratteri successivi verrebbero aggiunti in coda non più riconosciuti da un eventuale
if "blabla"
ok, hai ragione...
il comando del relè è in questa parte...
//if HTTP request has ended
if (c == '\n' && currentLineIsBlank) {
Serial.print(readString);
if(readString.indexOf("L=1") > 0) { //lets check if LED should be lighted
//led has to be turned ON
digitalWrite(outPin, HIGH); // set the LED on
LEDON = true;
Serial.print("ON pin ");
Serial.println(outPin);
}
else
{
//led has to be turned OFF
digitalWrite(outPin, LOW); // set the LED OFF
LEDON = false;
Serial.print("OFF pin ");
Serial.println(outPin);
}
// COSTRUZIONE PAGINA HTML
...
...
...
In pratrica mi esegue immediatamente i due comand di accensione e sepgnimento di seguito.. :(
OK, ho risolto era il fotoresistore non ben tarato che rilevava la luce proventiente dal mio display 24" del PC e si spegneva immediatamente.
Ogni volta che spengo le luci si accende il led e scatta il relè.
Non appena riaccendo le luci, si spegne il del e il relè.
Adesso ho collegato il GND e il segnale del relè a stadio plota al led sulla breadboard e vorrei azionare in questo modo il relè che accende o spegne una lampadina 220v.
Dall'altro lato dovrei collegare l'alimentazione 220v e la lampadina ai 3 conttati del relè... come faccio?
Mi aiutate?
(http://eurosolution.com/temp/schema_rele_lamp.jpg)
Devi collegare assieme il neutro (filo blu) della lampadina e della spina e poi devi collegare le due fasi ai morsetti del contatto normalmente aperto del relè che nel tuo caso mi sembra che siano il centrale e quello in basso...Uno dei due contatti del relè (quello normalmente chiuso) rimane inutilizzato...
Graze Paolo!
esperimento riuscito!
Adesso passo al mio vero obiettivo che è quello di fare in modo, utilizzando un PIR, che dopo x secondi di "non movimento nella stanza", spegna la lampadina.
Sto utilizzano questo sensore PIR http://www.robot-italy.com/product_info.php?products_id=1558 (http://www.robot-italy.com/product_info.php?products_id=1558)
L'ho collegato il relè come da istruzioni... funziona ma adesso vorrei che arduino di default accenda la lampadina attraverso il relè e che dopo 60 secondi di inattività la spegna.
Ho trovato questo sketch e ho cercato di adattarlo... ma è evidente che non ho fatto un buon lavoro... perché in questo modo fa un controllo ogni 60 secondi... mentre vorrei che facesse controlli ogni secondo e che solo dopo 60 secondi dall'ultimo movimento spegnesse la luce :(
const unsigned int PIR_INPUT_PIN = 4; //pin PIR
const unsigned int BAUD_RATE = 9600;
int outPin = 7; // pin relè
class PassiveInfraredSensor{
int _input_pin;
public:
PassiveInfraredSensor(const int input_pin){
_input_pin = input_pin;
pinMode(_input_pin, INPUT);
}
const bool motion_detected() const{
return digitalRead(_input_pin) == HIGH;
}
};
PassiveInfraredSensor pir(PIR_INPUT_PIN);
void setup(){
Serial.begin(BAUD_RATE);
pinMode(outPin, OUTPUT); // out pin relè
digitalWrite(outPin,HIGH); //accendo di default la luce
}
void loop(){
if (pir.motion_detected()){
digitalWrite(outPin, LOW); //spengo relè
Serial.println("No Motion detected");
} else{
Serial.println("MOTION DETECTED");
}
delay(60000);
}
Mi aiutate?
perché in questo modo fa un controllo ogni 60 secondi...
}
delay(60000);
}
Questa parte di codice mette un delay di 60 secondi :)
mentre vorrei che facesse controlli ogni secondo e che solo dopo 60 secondi dall'ultimo movimento spegnesse la luce :(
Se non sbaglio, e qui interverranno i saggi, l'esempio Blink without Delay contenuto nell'ide ti metterà sulla buona strada.
Devi creare una variabile contatore che conti il tempo da quando il sensore pir non rileva movimento e quando il contatore supera i 60sec fai fare le tue cosine al relè.
Grazie Daniela,
ho dato un'occhiata all'esempio che hai citato e mi sono reso conto che effettvamente l'utilizzo del delay non è adatto a mio scopo.
D'altra parte però l'esempio usa delle funzioni un po' ostiche per le mie scarsissime conoscenze di programmazione.... HELP!
in effetti il delay ti arresta lo sketch, se hai altre cose da fare nel frattempo, tutto resta bloccato, devi usare un millis()
unsigned long previousMillis = 0;
long timer = 60000; //60 sec
loop()
unsigned long currentMillis = millis();
if(sensore rileva persona)
{
//accendi la luce
previousMillis = currentMillis; //se nel frattempo passa qualcuno il contatore riparte da 60 sec
}
if(currentMillis - previousMillis >= timer)
{
//spegni la luce
}
ciao
ehhhh.... io ho visto l'esempio che ha citato Daniela... ma al momento non sono in grado di utilizzare i mills() per fare quello che vorrei
se qualche buona anima mi potesse aiutare...
mentre scrivevi ho messo 2 righe di esempio al post precedente
non mi funziona, mi da sempre MOTION DECETCION... dove sbaglio???
const unsigned int PIR_INPUT_PIN = 4; //pin PIR
const unsigned int BAUD_RATE = 9600;
const unsigned int outPin = 7; // pin relè
unsigned long previousMillis = 0;
long timer = 60000; //60 sec
class PassiveInfraredSensor{
int _input_pin;
public:
PassiveInfraredSensor(const int input_pin){
_input_pin = input_pin;
pinMode(_input_pin, INPUT);
}
const bool motion_detected() const{
return digitalRead(_input_pin) == HIGH;
}
};
PassiveInfraredSensor pir(PIR_INPUT_PIN);
void setup(){
Serial.begin(BAUD_RATE);
pinMode(outPin, OUTPUT); // out pin relè
digitalWrite(outPin,HIGH); //accendo di default la luce con il relè
}
void loop(){
unsigned long currentMillis = millis();
if (pir.motion_detected()){
previousMillis = currentMillis; //se nel frattempo passa qualcuno il contatore riparte da 60 sec
}
if(currentMillis - previousMillis >= timer)
{
digitalWrite(outPin, LOW); //spengo
Serial.println("No Motion detected");
}
else
{
Serial.println("MOTION DETECTED");
}
delay(200);
}
intanto devi togliere l'else e il delay 2000
poi non c'era niente che l'accendeva
const unsigned int PIR_INPUT_PIN = 4; //pin PIR
const unsigned int BAUD_RATE = 9600;
const unsigned int outPin = 7; // pin relè
unsigned long previousMillis = 0;
long timer = 60000; //60 sec
class PassiveInfraredSensor{
int _input_pin;
public:
PassiveInfraredSensor(const int input_pin){
_input_pin = input_pin;
pinMode(_input_pin, INPUT);
}
const bool motion_detected() const{
return digitalRead(_input_pin) == HIGH;
}
};
PassiveInfraredSensor pir(PIR_INPUT_PIN);
void setup(){
Serial.begin(BAUD_RATE);
pinMode(outPin, OUTPUT); // out pin relè
digitalWrite(outPin,HIGH); //accendo di default la luce con il relè
}
void loop(){
unsigned long currentMillis = millis();
if (pir.motion_detected())
{
digitalWrite(outPin, HIGH); //accendo
previousMillis = currentMillis; //se nel frattempo passa qualcuno il contatore riparte da 60 sec
}
if(currentMillis - previousMillis >= timer)
{
digitalWrite(outPin, LOW); //spengo
Serial.println("No Motion detected");
}
}
non mi resta facile capire così al volo la classe che hai fatto, ma questo funziona di certo facciamo prima :)
const int led = 7;
const int in = 4;
unsigned long previousMillis = 0;
extern unsigned long timer0_millis;
long timer = 60000;
void setup()
{
pinMode(led, OUTPUT);
pinMode(in, INPUT);
Serial.begin(9600);
}
void loop()
{
unsigned long currentMillis = millis();
if (digitalRead(in) == HIGH)
{
digitalWrite(led, 1);
previousMillis = currentMillis; //se nel frattempo passa qualcuno il contatore riparte da 60 sec
}
if(currentMillis - previousMillis >= timer)
{
digitalWrite(led, 0);
timer0_millis = 0;
}
}
mi rimane sempre accesa la lampada... non si spegne mai nemmeno dopo i 60 sec di inattivitià...
OMG, ma quando fai upload dello sketch la lampada si spegne? resta spenta?
funziona se metto if (digitalRead(in) == LOW)... però al mimino movimento il PIR riaccende la lampadina
Io vorrei che funzionasse in modo tale che l'accensione dell lampadina rimanga manuale attraverso il pulsante classico (ecco perché avevo impostato di default digitalWrite(outPin,HIGH);)
mentre l'Arduino provveda solo a spegnerla automaticamente dopo 60 sec di inattività nella stanza.
ahhhhhhh .....scusa, avevo capito male, pensavo che il pir dovesse accenderla come servizio di cortesia e spegnerla dopo un po' di inattività
capito, mmm ci devo pensare un attimo
ma il pulsante diciamo manuale entra in arduino? perchè se non ci entra la vedo dura la realizzazione pratica
hai un relè sempre chiuso che si apre dopo 60 sec ok e poi chi la riaccende? se il contatto del rele si trova in serie alla lampada una volta aperto ... chi lo richiude che è comandato da arduino?
il tuo interruttore manuale non l'accenderà più perchè il relè lo tiene spento
nella pratica io vorrei utilizzare i normali pulsanti Vimar da muro per accendere le luci di una stanza, poi siccome mia moglie non spegne mai una luce in qualsiasi stanza in cui entra... vorrei che Arduino le spegnesse al posto mio dopo x secondi di inattività nella stanza.
è fattibile?
si usando 2 deviatori uno quello a muro e uno il tuo relè
nel cassetto a parete devi avere un interruttore a 3 fili (deviatore) se ne hai 2, devi aggiungere 1 filo e cambiare il frutto vimar, ma poi lo schema elettrico lo sai fare?
Al momento no... sto utilizzando Arduino da una settima ed ho poche conoscenze di programmazione e elettronica/impianti elettrici
Gli esperimenti che sto facendo, da neofita e con molti aiuti, sarebbero orientati ad acquisire più conoscenze possibili per poter realizzare con l'aiuto di una amico che lavora nel settore un mini impianto di domotica per la nuova casa che devono ancora iniziare a costruire e siamo ancora allo stadio iniziale di progettazione, quindi è il momento giusto.
Ovviamente non faccio io gli impianti ma una ditta che si occuperà dell'intero impianto elettrico, io devo capire solo come funziona fare un po' di esperimenti, studiare la fattibilità di alcune soluzioni e far predisporre l'impianto in base al mio progetto di domotica.
Mi piacerebbe fare:
- controllo luci
- controllo caldaia
- allarme fughe gas
- allarme acqua
- controllo irrigazione
- poco altro....
domani compro una scatola con placca a tre frutti della Vimar (serie Idea), uno o due deviatori (a tre fili) e due coperture finte, in una delle quali cercherò fare un buco circolare per fare entrare dentro il PIR SE-10... così faccio qualche esperimento più vicino alla realtà
Intanto ti ringrazio per la pazienza e la disponibilità e ti faccio i miei complimenti perché sei veramente molto bravo!
Grazie di tutto... a domani.
qui nella seconda pagina http://www.bbaba.altervista.org/electronic/schemi.php
trovi punto luce INTERROTTO e punto luce DEVIATO
il sistema deviato, è quello che dovresti avere tu:
un comando dev1 è il manuale e il dev2 sarebbe il relè
Vantaggio: se arduino si sfascia, l'impianto continuerà a funzionare regolarmente col solo interr manuale
Svantaggio: in alcuni casi per tenere la luce spenta il relè sarà perennemente eccitato, in altri sarà diseccitato
Svantaggio: come fa arduino a sapere che la luce è accesa e la deve spegnere? ti serve un sensore o un relè a bobina 220 il cui contatto ausiliario inserito in una porta input di arduino
A questo punto secondo me le opzioni sono:
- usare il pir come servizio di cortesia, appena entri si accende e si spegnerà dopo un periodo di inattività
- fare entrare in arduino un pulsante di comando (il tuo comando a muro senza 220 ovviamente), fare entrare il contatto pir e uscita un relè, quando premi il pulsante (a muro) arduino comincerà a contare il pir farà da controllore di presenza, il relè sarà attivo solo quando è necessario.
- l'altro sistema descritto prima che secondo me è uno spreco di risorse e un po' una porcata :)
ciao
- fare entrare in arduino un pulsante di comando (il tuo comando a muro senza 220 ovviamente), fare entrare il contatto pir e uscita un relè, quando premi il pulsante (a muro) arduino comincerà a contare il pir farà da controllore di presenza, il relè sarà attivo solo quando è necessario.
- l'altro sistema descritto prima che secondo me è uno spreco di risorse e un po' una porcata
Hai ragione questo mi sembra il sistema più ragionevole.
Ma... è possibile portare il segnale di un pulsante Vimar (tipo questo http://www.elettrico.info/shop/product_info.php?cPath=1_82_75&products_id=VI.16004 (http://www.elettrico.info/shop/product_info.php?cPath=1_82_75&products_id=VI.16004) ) in ingresso su Arduino per l'accensione luci?
Mi sorge un dubbio... visto che mi sembra piuttosto problematico, quello che chiedo è una cosa normale?
a me sembra di si, perché accendere le luci in automatico, il primo giorno è una figata... alla lunga diventa antipatico perché inevitabilmente devi stabilire un ritardo in ingresso, altrimenti si accenderebbe ogni volta che passi vicino anche se non vorresti entrare in quella stanza, e poi non hai più l'indipendenza da Arduino.
Se qualcosa va in tilt rimani senza luci finché non scopri e ripari il tutto... non mi semra una grande idea.
Ma... è possibile portare il segnale di un pulsante Vimar
Si puoi usare un pulsante normale della Idea che non sarà collegato all'impianto di casa, ma direttamente su arduino
http://www.stimolo.it/index.php?route=product/product&product_id=148 anche se dice che è luminoso, in realtà non lo è, dovresti comprare una lampadina a parte, quindi puoi chiedere anche quello senza indicatore luminoso, come ti pare, vanno bene entrambi.
quello che chiedo è una cosa normale?
Quello che chiedi è un sistema semiautomatico che devi valutare tu , io posso dirti che lo faccio in alcuni casi, nei corridoi, negli ingressi, nei parcheggi aperti, nei garage, abbinati ove è necessario di un sensore luce che "vede" se è necessario accendere o meno. Nelle stanze dove una persona può sedersi e leggere un libro no (il perchè non funzionerebbe lo puoi benissimo immaginare)
Un sensore pir passivo rileva un corpo caldo in movimento all'interno del suo spettro visivo, non una fonte di calore immobile, altrimenti anche solo un calorifero che è 60° lo terrebbe sempre in allarme.
Se qualcosa va in tilt rimani senza luci finché non scopri e ripari il tutto... non mi semra una grande idea.
Anche questa è una valutazione personale.
Certo dando tutti i compiti al microcontroller se arduino va in tilt resti al buio, quindi le cose sono 3, o tu sei un elettricista e appena c'e' un guasto sai cosa fare e ripristini anche temporaneamente un guasto, o tieni una copia programmata di arduino nel cassetto pronta ad essere sostituita, o ti chiami un tecnico che appena vede schede elettroniche nelle cassette di derivazione, si mette le mani nei capelli e dice "O Signur!!! e ora che faccio? mai vista una roba del genere" :)
Ci sarebbe un'altra opzione, trasformare tutti i comandi accensioni in impulsivi, relè passo-passo a tutti i punti luce, sarà sufficiente un impulso di 400-500 ms umano o macchina in qualsiasi punto per accendere o spegnere, in questo caso il tilt di un processore non farebbe nessuna differenza, anche qui il programma deve sapere se la luce è on oppure off.
In tutti i sistemi industriali controllati da un computer (parliamo di on/off, MCC motor control center, valvole motorizzate, interruttori di media e alta tensione ecc non robot o bracci meccanici) esiste sempre il commutatore AUTO e MAN il crash di un computer è la prima cosa che si deve prevedere, valutare quale sia il danno o il disagio di un guasto simile e quindi attrezzarsi di conseguenza, dipende tutto da una disponibilità economica, nel tuo caso spendere qualcosina in più prima significa spendere molto meno dopo.
ciao
La vedo molto complicata... questo mi scoraggia un po'.
Si potrebbe gestire tutto con Arduino, ma io preferisco una gestione mista parallela che in caso di guasti permetta il classico intervento manuale.
Come dici tu stesso ogni sistema fatto bene dovrebbe funzionare così, sarebbe impensabile poter pilotare la gestione della caldaia solo via Arduino, così come l'apertura di un cancello, del basculante del garage o delle tapparelle. Peraltro un sistema basato su hardware e software open source e programmini fatti da noi (o peggio ancora fatti dame!)... anche se costa 1/10 di uno commerciale BTicino o Vimar o Gewiss, non può garantire una altissima affidabilità.
D'altra parte non potendomi permettere di spendere 10.000 euro in più per avere un impianto commerciale, mi devo accontentare di una domotica "fai da te" che, se fatta bene e con un certo criterio e soluzioni di sicurezza, non è detto che poi sia peggiore di quella commerciale, anzi senz'altro più flessibile, adattabile e migliorabile con il tempo.
Il sistema di adottare comandi a muro a impulsi e relè passo passo mi sembra buona, la realizzazione però mi sembra al di fuori della mia portata... senza un aiuto sostanziale :)
Sarebbe qualcosa di simile? http://www.gioblu.com/tutorials/azionamenti/156-rele-passo-passo-con-arduino (http://www.gioblu.com/tutorials/azionamenti/156-rele-passo-passo-con-arduino)
P.S.: Molto bellina questa demo di casa domotica... http://www.vividomotica.it/demo.html (http://www.vividomotica.it/demo.html)
anche se costa 1/10 di uno commerciale BTicino o Vimar o Gewiss
Non è vero un sistema domotico bticino o vimar a parte i prezzi che sono come dici tu 10 volte più costosi, usa interruttori a sfioramento e a bus, una centralina con 8 in e 8 out costa una fucilata e se si paralizza il core il tuo interruttore a sfioramento bus cessa di esistere. Resti al buoi comunque.
Quel sistema potrebbe anche essere più affidabile (non so dirtelo, non ne ho mai installati e non li propongo nemmeno fino a quando non scendono di prezzo) ma il costo complessivo di tutti i componenti sono davvero enormi, come dicevo qualche tempo fa a conti verificati sui listini "il prezzo complessivo per un impianto elettrico-domotico di media grandezza 80-100 mtq di appartamento + giardino ti ci compri una bella auto" manod'opera inclusa ovviamente ....... e se si schianta resti al buoi più che mai.
ciao
Non ho detto che sia meno affidabile.. ho solo detto che nessuno ti "garantisce" l'affidabilità... per quelli commerciali si.. ma poi se realmente lo siano ... è tutta un'altra cosa infatti subito dopo ribadisco che:
una domotica "fai da te", se fatta bene e con un certo criterio e soluzioni di sicurezza, non è detto che poi sia peggiore di quella commerciale, anzi senz'altro più flessibile, adattabile e migliorabile con il tempo.
Sono d'accordissimo con te!
Quindi ho tre soluzioni?
a) accensione/spegnimento automatico con PIR in certe stanze (ma a questo punto a cosa servono i pulsanti a muro???)
b) soluzione semiautomatica con i deviatori a muro che mandano il segnale a Arduino
c) soluzione doppia Arduino + Classica con interruttori con relè passo passo che funzionano in parallelo con Arduino