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)
<td style="color: red;background: #99CC33;" valign="middle" >Luce 1 ON<td style="color: black;" valign="middle" >Luce 1 OFF");
server.print("
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