Go Down

Topic: accensione di una lampadina 220 volt con ENC28J60 da smartphone (Read 2104 times) previous topic - next topic

777benjamin777

ciao a tutti.. ho scaricato questo schetch

Code: [Select]

/**
Questo codice permette di accendere una lampada connessa al relè da remoto, sfruttando
la scheda di rete ENC28J60
SCK -> 13
SO -> 12
SI -> 11
CS -> 8
Vcc -> 3.3 V
GND -> GND
*/
 
#include <EtherCard.h>
#define RELAY_PIN   5
#define REQUEST_RATE 5000
 
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
char* on  = "ON";
char* off = "OFF";
boolean relayStatus;
char* relayLabel;
char* linkLabel;
 
byte Ethernet::buffer[700];
 
void setup () {
  Serial.begin(9600);
  Serial.println("Getting IP via DHCP");
 
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println( "Failed to access Ethernet controller");
 
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");
 
  ether.printIp("My IP: ", ether.myip);
  // ether.printIp("Netmask: ", ether.mymask);
  ether.printIp("GW IP: ", ether.gwip);
  ether.printIp("DNS IP: ", ether.dnsip);
 
  Serial.println();
 
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW); 
  relayStatus = false;
  relayLabel = off;
  linkLabel = on;
}
 
void loop () {
 
 word len = ether.packetReceive();
 word pos = ether.packetLoop(len);
 
  if(pos) {
 
    if(strstr((char *)Ethernet::buffer + pos, "GET /?ON") != 0) {
      relayStatus = true;
      relayLabel = on;
      linkLabel = off;
    } else if(strstr((char *)Ethernet::buffer + pos, "GET /?OFF") != 0) {
      relayStatus = false;
      relayLabel = off;
      linkLabel = on;
    }
    digitalWrite(RELAY_PIN, relayStatus);
 
    BufferFiller bfill = ether.tcpOffset();
    bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
      "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
      "<html><head><meta name='viewport' content='width=200px'/></head><body>"
      "<div style='position:absolute;width:200px;height:200px;top:50%;left:50%;margin:-100px 0 0 -100px'>"
      "<div style='font:bold 14px verdana;text-align:center'>Relay is $S</div>"
      "<br><div style='text-align:center'>"
      "<a href='/?$S'><img src='http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/02/bt_$S.png'></a>"
      "<div>Controlla la lampada<div>"
      "</div></div></body></html>"
      ), relayLabel, linkLabel, linkLabel);
 
      ether.httpServerReply(bfill.position());
    }
  }


con il quale sono riuscito a fare accendere una lampadina dallo smartphone attraverso questo relè

https://www.amazon.it/gp/product/B00PIMRI00/ref=oh_aui_detailpage_o06_s00?ie=UTF8&psc=1

tutto ok ma dopo due accensioni e spegnimenti si blocca tutto e se non resetto il loop non va più niente..

se stacco il carico (la lampadina) riesco a far chiudere e aprire il contatto del relè all'infinito.. attacco la lampadina e va in tilt..

cosa potrebbe essere?

As_Needed

Schema elettrico che usi! Poi il codice dovresti capirlo e non solo copiarlo. Se usi 220 V comunque ti consiglio di leggere bene il regolamento perché c'è un punto che ti riguarda QUESTO... e non so nemmeno se si può continuare la discussione. Però per prima cosa lo schema
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

777benjamin777

collegamenti:
ENC   PATA   Arduino
VCC   wire 2   3.3v
GND   wire 1   GND
SCK   wire 5   Pin 13
SO   wire 7   Pin 12
SI   wire 6   Pin 11
CS   wire 4   Pin 8


Enzo--


Enzo--

collegamenti:
ENC   PATA   Arduino
VCC   wire 2   3.3v
GND   wire 1   GND
SCK   wire 5   Pin 13
SO   wire 7   Pin 12
SI   wire 6   Pin 11
CS   wire 4   Pin 8




Se hai fatto cosi' è corretto lo schema.

As_Needed

Sì ma oltre questo ci vuole il collegamento della lampada. Poi come detto prima, utilizzi due alimentazioni tra cui una 220V? Posta uno schema completo di TUTTO
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

uwefed

Il ENC28J60 al contrario del W5100 ha bisogno che Arduino gestisca il collegamento Ethernet per questo consuma molta RAM.

Quello che Ti succede é che termina la RAm disponibile e viene qualcosa sovrascritto e lo sketch si blocca.

Usa un Arduino MEGA 2560 oppure una scheda Ethernet con un W5100.

La scheda relé non é adatta per i 230VAC. Non lo scrivono da nessuna parte. Nominano solo che il relé é adatto. Per accendere utenze 230V usa quelle prese intermedie radiocomandate. Puoi simulare la pressione di un pulsante sul telecomando oppure usare un modulino trasmettitore (per esempio preso dal telecomando) e pilotare la presa con la libreria RCswitch.

Ciao Uwe

777benjamin777

Il ENC28J60 al contrario del W5100 ha bisogno che Arduino gestisca il collegamento Ethernet per questo consuma molta RAM.

Quello che Ti succede é che termina la RAm disponibile e viene qualcosa sovrascritto e lo sketch si blocca.

Usa un Arduino MEGA 2560 oppure una scheda Ethernet con un W5100.

La scheda relé non é adatta per i 230VAC. Non lo scrivono da nessuna parte. Nominano solo che il relé é adatto. Per accendere utenze 230V usa quelle prese intermedie radiocomandate. Puoi simulare la pressione di un pulsante sul telecomando oppure usare un modulino trasmettitore (per esempio preso dal telecomando) e pilotare la presa con la libreria RCswitch.

Ciao Uwe
Ciao, scusa se rispondo solo ora, ho comprato il modulo eternhet shield w5100, l'ho applicato su arduino (non posso avere sbagliato il collegamento perché vi entra perfettamente.. ho ricollegato il pin 9 come da sketch al relè e quello che succede ora è che quando apro il monitor seriale il relè si eccita una sola volta e non mi compare nessun indirizzo ip.. ah ho caricato questo sketch provando anche a includere la libreria ethernet gia presente nel ide di arduino

Code: [Select]


#include <SPI.h>
#include <Ethernet.h>
 
int pinLED = 9; // pin a cui è connesso il LED
boolean acceso = false;
// Mac Address di Arduino
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
 
// Viene inizializzata la libreria Ethernet di Arduino e il webserver gira sulla porta 80
EthernetServer server(80);
 
void setup() {
  pinMode(pinLED,OUTPUT);
  digitalWrite(pinLED,LOW);
  Serial.begin(9600);
  // Viene inilizzato il webserver e la connessione di rete
  Ethernet.begin(mac);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}
 
void loop() {
  // Vengono ascoltati nuovi client
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // Finisce una richiesta HTTP
    boolean currentLineIsBlank = true;
    String postText ="";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if(postText.length()<10){
          postText +=c;
        }
        // Se viene completato l'invio della richiesta HTTP, allora il server invia la risposta
        if (c == '\n' && currentLineIsBlank) {
          // Viene fatta una risposta HTTP, in pratica viene creata una pagina WEB in HTML
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // Dopo la risposta la connessione si interrompe
          client.println();
          client.println("<meta charset=UTF-8>"); // serve per inserire i caretteri speciali
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head> <TITLE>Arduino</TITLE> </head>"); // Viene creato il Titolo
          client.println("<body> <h1> Benvenuto nel Webserver Arduino </h1>"); // Viene inserito del testo
          client.println("<h3> Attraverso questa pagina è possibile accendere e spegnere lampada, connessa ad un relè </h3>");
          client.println("</body>");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    // Se l'utente ha premuto l'icona per accendere il LED
    if(postText.indexOf("?on") >0){
          digitalWrite(pinLED,HIGH);
          Serial.println("Accendi LED");
          acceso = true;
        }
     // Se l'utente ha premuto l'icona per spegnere il LED
     if(postText.indexOf("?off") >0 ){
       digitalWrite(pinLED,LOW);
        Serial.println("Spegni LED");
        acceso = false;
       }
      // Viene cambiata la pagina WEB a seconda che il LED sia spento, oppure acceso
      if(acceso){
          client.println("<a href=\"./?off\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/02/bt_OFF.png\"alt = \"Spegni\" ></a>");
          client.println("<h3> La lampada è accesa </h3>");
        }else{
          client.println("<a href=\"./?on\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/02/bt_ON.png\"alt = \"Accendi\" ></a>");
          client.println("<h3> La lampada è spenta </h3>");
          }   
    delay(1);
    // Viene chiusta la connessione
    client.stop();
    Serial.println("client disconnected");
  }
}


non ho ancora avuto tempo di fare come mi hai detto riguardo alle altre cose.. comunque grazie!

777benjamin777

Sì ma oltre questo ci vuole il collegamento della lampada. Poi come detto prima, utilizzi due alimentazioni tra cui una 220V? Posta uno schema completo di TUTTO
purtroppo non so usare fidocad .. comunque ho collegato la fase al comune del relè, un ritorno al contatto no e l neutro diretto alla lampada..

gpb01

  Regolamento, punto 15 ... se continuate a parlare di mettere le mani sui 230V chiudo il thread !


Guglielmo
Search is Your friend ... or I am Your enemy !

As_Needed

  Regolamento, punto 15 ... se continuate a parlare di mettere le mani sui 230V chiudo il thread !


Guglielmo
Beh io all'inizio l'ho avvertito...
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

777benjamin777

Beh io all'inizio l'ho avvertito...
mah...a me sembra che tu mi abbia voluto portare a questo punto di proposito..
 e io che ti ho risposto solo per gentilezza, dato che non mi eri di nessun aiuto..

che baccalà.. comunque è il mio mestiere quello di lavorare con la corrente, sono elettricista..

in ogni caso, per me la storia è chiusa..

deluso..

deluso..

777benjamin777

  Regolamento, punto 15 ... se continuate a parlare di mettere le mani sui 230V chiudo il thread !


Guglielmo
ho letto il regolamento, non succederà più.. garantito!

speedyant

Soprattutto, ditelo che "chiedete" anche su altri forum...
Mi sento il "castigatore" dei cross-post cross-forum... :smiley-neutral:

As_Needed

mah...a me sembra che tu mi abbia voluto portare a questo punto di proposito..
 e io che ti ho risposto solo per gentilezza, dato che non mi eri di nessun aiuto..

che baccalà.. comunque è il mio mestiere quello di lavorare con la corrente, sono elettricista..

in ogni caso, per me la storia è chiusa..

deluso..

deluso..
Volevo semplicemente vedere cosa volevi fare con questi 220V... ho specificato che non sapevo se si poteva continuare la discussione.. E comunque non centra niente che è il tuo mestiere, qui si tratta di altre cose, di responsabilità e sicurezza e quant'altro scritte nel regolamento. Io non ti ho voluto portare da nessuna parte, ti ho pure linkato il regolamento, volevo solo vedere lo schema tutto qua.. Poi il regolamento non l'ho scritto io, se dice così è così punto, se c'è da rimanere delusi, sono quelli che hanno scritto il regolamento che lo rimangono. E inoltre si tratta della tua SICUREZZA... non di certo una mancanza di rispetto di cui essere delusi.
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

Go Up