Controllo luce 220v

Salve a tutti, mi sono avvicinato al mondo di arduino da poco (quasi 2 mesi), dopo aver sperimentato con i progetti di base e con internet( fonte inesauribile di informazioni) mi sono buttato a capofitto nel progetto di controllare un punto luce 220v via web (un classico) visto che però voglio mantenere anche il controllo individuale da pulsante ho utilizzato per il progetto:
1 pulsante
1 rele passo passo ( o a impulsi) con bobina da 220v
1 rele board 5v
1 arduino UNO + ethernet shield
arduino (tramite ethernet shield) crea una pagina web con un pulsante su un indirizzo nella rete locale, premendo il pulsante da browser viene eccitata per 0,1 secondi il rele da 5v che manda un impulso al passo passo che accende la luce, stessa cosa se si preme il pulsante, inoltre in questo modo il pulsante funziona anche nel caso in cui arduino non funzionasse correttamente.
bene, tutto questo in teoria perchè purtroppo sto risontrando qualche problema, funziona tutto finche non inserisco la 220, senza il 220 il relè funziona perfettamente, inserendo la 220 invece premo il pulsante nel browser, il contatto scatta MA non finisce il caricamento della pagina fino a bloccarsi completamente (come se arduino si scollegasse dalla rete).
non so se mi sono spiegato bene, di seguito il circuto( scusate la qualità ma sono agli inizi) e il codice
ringrazio tutti per questa splendida piattaforma spero che mi possiate aiutare per risolvere questo problema che probabilmente per voi è banale.

//Aggiungo le librerie necessarie
#include <SPI.h>
#include <Ethernet.h>
#include <WebServer.h>

//definiamo due arrey: il primo per definire l'indirizzo mac, il secondo per definire l'indirizzo IP.
//Per quanto riguarda l'indirizzo IP selezionate un indirizzo valido per la vostra rete locale.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {192, 168, 0, 220};

//definiamo la porta di ascolto
WebServer webserver("", 80);

//Definico Pin
const int pin_luce1_stato_invio = 6; // pin adibito al controllo stato invio
const int pin_luce1_stato_ricevi = 7; // pin adibito al controllo stato ricezione
const int pin_luce1 = 5;

//Variabili
int luce1 = 0;
int stato_luce1 = 0;

//avviamo il server e settiamo tutte le variabili relative a luce1 e stato_luce1 in ON e in OFF
void Start(WebServer &server, WebServer::ConnectionType type,
char *url_param, bool param_complete)
{
server.httpSuccess();
if (type != WebServer::HEAD)
{
String s = "";
if (param_complete == true)
{
s = url_param;

if ( s == "luce1=ON")
{
luce1 = 1;
digitalWrite(pin_luce1, HIGH);
delay(100);
digitalWrite(pin_luce1, LOW);
}
else if ( s == "luce1=OFF")
{
luce1 = 0;
digitalWrite(pin_luce1, HIGH);
delay(100);
digitalWrite(pin_luce1, LOW);
}
}

//Generazione della pagina HTML
P(htmlHead) =
""
""
"Controllo luci stanza"
""
""
"";

server.printP(htmlHead);
server.print("

Controllo Luci Stanza

");

if(luce1 == 1)
server.print("

<td style="color: red;background: #99CC33;" valign="middle" >Luce 1 ON<td style="color: black;" valign="middle" >Luce 1 OFF");
server.print("
");
else
server.print("
");

if(luce1 == 0)
server.print("<input type="button" value="Accendi" onclick="location.href='index.htm?luce1=ON'">");
else
server.print("<input type="button" value="Spegni" onclick="location.href='index.htm?luce1=OFF'">");

server.print("

");

}
}

void setup()
{
//inizializzo l'ethernet shield con il mac e il address
Ethernet.begin(mac, ip);
webserver.setDefaultCommand(&Start);
webserver.addCommand("index.htm", &Start);

//avvia il server web
webserver.begin();
delay(100);

//definisci i pin output
pinMode(pin_luce1_stato_invio, OUTPUT);
pinMode(pin_luce1, OUTPUT);

//definisci i pin input ancora non lo uso servirà in seguito
pinMode(pin_luce1_stato_ricevi, INPUT);

//impostiamo le uscite a livello LOW
digitalWrite(pin_luce1, LOW);
}

void loop()
{
webserver.processConnection();
}

nello schema
F =fase
N =neutro
I =pulsante
A= arduino
R1 = rele board 5 v
R2 =rele passo passo

mi è stata notificata una risposta ma non la vedo più, è sparita oppure ho le allucinazioni? :astonished: :astonished:
comunque mi sembra di capire che la soluzione migliore è di inserire un condensatore "al 220", quindi dove? nell'uscita del rele passo passo prima prima della lampada?
adesso è collegata ( per test) una lampada da tavolo e non una lampada "normale" però il circuito è pensato per comandare sia una luce che una presa (con tutto quello che ci può essere collegato).
dove posso ordinare il condensatore?
quali sono le specifiche?
grazie in anticipo a tutti!

ps: chiedo hai moderatori di spostare il topic se necessario, forse la sezione "software" non è la più appropriata (pensavo che ci fosse un errore nel codice..)

Ti avevo risposto io, ma ho ritenuto il caso di eliminare la risposta

  1. perchè era una ripetizione
  2. perchè non sembravi molto interessato

Comunque ho visto che l'hai letto :smiley: (15 minuti dopo che l'ho scritto)
Si ci andrebbe un condensatore in parallelo all'utenza

hai ragione ma purtroppo dal cellulare non è molto comodo rispondere e aspettavo la sera per tornare davanti al pc.. :~
non ho chiaro dove deve essere posizionato il condensatore, seguendo lo schema fatto da me (ok, forse schema è esagerato chiamarlo ) dove andrebbe posizionato?
che valori deve avere?

grazie mille per la disponibilità! :grin:

http://arduino.cc/forum/index.php/topic,140280.0.html
post n°9 c'è l'immagine, va in parallelo al carico tra F-N

Prova, il componente costa pochissimo e potrebbe risovere molte rogne, fammi sapere

ciao

Ti ringrazio per l'interessamento guardo se in questi giorni riesco a trovare il condensatore (0,22 microfarad 400v poliestere giusto?)
leggendo mi pare di capire che potrei risolvere anche adottando delle relay board con inclusi un Optoisolatore ( tipo questa : http://arduino-direct.com/sunshop/index.php?l=product_detail&p=156 ), sbaglio?
ciao! :grin:

questo condensatore è l'equivalente vero?

leggendo mi pare di capire che potrei risolvere anche adottando delle relay board con inclusi un Optoisolatore

Ammesso che il disturbo che ti ritrovi sia dato dall'attivazione del carico sulla linea 220vac l'optoisolatore non ti risolve, anzi con l'opto chiedi più corrente a ciscun pin rispetto che a pilotare una base di un transistor, se ci metti 8 relè optoisolati chiedi molta corrente ad arduino, io non te lo consiglio.
Io sospetto da quanto hai detto che il picco di disturbo si distribuisca sulla rete 220 essendo collegato un alimentatore poco filtrato sullo stesso nodo del carico che vai a comandare. L'optoisolatore non serve a niente.

quel condensatore 440Vac 0.022uF non è uno 0.22uf, ma è indicato come sopressore, potrebbe anche andare bene, io ti ho indicato quello perchè più volte ha risolto a me e ad altri, però non escludo che con quello non risolvi, prova al massimo aumenti la capacità.

Quando fai questi esperimenti comunque ti suggerisco di allontanarti e non stare col viso sopra i componenti, spesso se sono nuovi potrebbero anche essere difettosi, quindi cautela.

ciao

Ok, tieni presente che la relay board successivamente avrà un alimentazione separata, e arduino ci si collegherà solo con il pin necessario a eccitare la bobina, quindi posso anche pensare di usare una relay board con Optoisolatore se secondo te può essermi utile.
comunque stasera quando rientro ( o al massimo domani) provo ad alimentare arduino con un alimentatore da pc attaccato ad un altra linea 220 e vediamo che succede.
ti tengo informato!

Quando ho realizzato l'ardupower mi hanno consigliato l'inserimento di un condensatore sui relè, vedi schema link firma.
Un altro problema, che non ho avuto, è quello dei disturbi dovuti alla vicinanza dei fili tra 220 e bassa tensione, se vedi la costruzione dell'ardupower tutti i fili della 220/carichi/potenza sono a sinistra, e i relè sono collegati tramite circuito stampato, i fili ai led sono tutti sulla destra, è un caso che abbia realizzato così il montaggio, ma secondo me aiuta molto tenere distanti i fili del carico da quelli dei segnali.

..... 4 on/off arduino mi ha lasciato

poteva anche fare di peggio.... chiederti gli alimenti !

Si effettivamente il condensatore antiscintilla risolve!

Vecchiopost:
Strano, è proprio come il progetto che ho realizzato, vedi sempre ardupower, e non ho mai avuto problemi, ma non è che quando chiudi i relè c'è un assorbimento eccessivo e scende così tanto la tensione di rete a 220v causando all'Arduino problemi di alimentazione?
L'ardupower l'ho installato da due anni e mezzo senza problemi, lo uso per accendere e spegnere serve.
Avevo visto che costavano tanto le prese comandabili da lan, ma non pensavo così tanto!
Quasi quasi ci metto anche un'interfaccina web e le vendo!

bigjohnson:
Strano, è proprio come il progetto che ho realizzato, vedi sempre ardupower, e non ho mai avuto problemi, ma non è che quando chiudi i relè c'è un assorbimento eccessivo e scende così tanto la tensione di rete a 220v causando all'Arduino problemi di alimentazione?
L'ardupower l'ho installato da due anni e mezzo senza problemi, lo uso per accendere e spegnere serve.
Avevo visto che costavano tanto le prese comandabili da lan, ma non pensavo così tanto!
Quasi quasi ci metto anche un'interfaccina web e le vendo!

Non sappiamo che alimentatore usa, non ha dato informazioni sufficienti per dare un parere, se usi un buon alimentatore questi hanno già i filtri, poi dipende dal tipo di carico che ci vai a mettere, il problema non ce l'hai con tutte le utenze che vai a pilotare.
Se azioni un pc è chiaro che il suo alimentatore non manderà in rete un disturbo tale da fare impazzire arduino, ma se arduino ha un alimentatore scadente e attivi poi un carico induttivo è molto probabile che dopo 2-3 volte arriva il picco fastidioso.

ciao

Ma noo, è una feature, imposti un indirizzo da pingare e se non risponde il presone stacca e attacca la presa associata all'ip, interessante!

acquistati i condensatori oggi pomeriggio, domani faccio varie prove e vi faccio sapere.
grazie a tutti!

Sei riuscito a resistere una settimana? Io piuttosto avrei smontato la tv, per prendere il pezzo e vedere se funzionava XD XD XD

è con sommo piacere che vi comunico che grazie al condensatore ho risolto il problema, vi ringrazio davvero tanto non ci sarei mai arrivato senza il vostro aiuto.
per chi in futuro possa avere bisogno sappia che ho inserito il condensatore in parallelo tra il l'uscita del relè (R1)che varia in base all'eccitazione o meno della bobina e il neutro del circuito.
vi ringrazio davvero, adesso si va avanti e vediamo quale altro problema ci sarà da risolvere..

ps: mi si è aperto un mondo tra carichi induttivi/resistivi, condensatori antidisturbo e disturbi magnetici creati dal 220

Al condensatore andrebbe associata una resistenza di valore idoneo.

Quella si chiama anche Rete di Zobel (anche se non è proprio quella la funzione) che serve a compensare i ritorni di tensione (che sfiammano sui contatti) sui carichi induttivi.

In pratica esiste un equivalente in Idraulica che si chiama "Colpo di Ariete" e si verifica quando un rubinetto molto aperto viene chiuso di botto. Negli impianti idraulici più vecchi il "botto" di ritorno si può avvertire sia acusticamente che fisicamente, con una risonanza e bassa vibrazione delle tubazioni.

Più rapidamente si chiude il rubinetto, più forte è il colpo di Ariete.

In Elettronica il fenomeno è analogo: considetato un flusso di corrente abbastanza elevato, più repentinamente si toglie corrente, più forte sarà il "ritorno" sotto forma di extratensione. Infatti con Mosfet o TRIAC, con capacità di commutazione molto rapide, si hanno ancora maggiori problemi. Più è basso il tempo di Ton/Toff del semiconduttore, è più forte sarà la "botta" che questo si prende ai suoi estremi quando commuta, quindi a maggior ragione necessita di una rete di compensazione.

uff, mi sa che ho gioito troppo presto..
con il condensatore inserito e un carico resistivo nessun problema funziona tutto come dovrebbe, ma attaccando invece un carico induttivo il problema si ripresenta, arduino si "riavvia" come se non ci fosse il condensatore..
dove sbaglio??

  1. Metti una Resistenza in serie al condensatore. A naso posso indicarti un 100 Ohm 2-3Watt.
  2. Significa che hai una alimentazione verso l'Arduino "schifida"!

Dovresti alimentare l'Arduino (gli AtMega ho visto che sono tutti molto sensibili)con un BUON alimentatore a 5V, separato da tutto il resto, e ben filtrato.

L'ideale sarebbe un alimentatore discreto, non switching, magari con un 7805, con tutti i condensatori di filtro specifici, specie quelli da 100.000 pF, sia PRIMA, che subito DOPO, il 7805.