Funziona al contrario. help

Buona notte a tutti,
ho da poco acquistato un arduino mega , relativa scheda di rete ed una scheda da “ben” 8 relè
non sono un programmatore ma leggendo il forum qualcosa siete riusciti ad insegnarmela :blush:
veniamo al dunque:
scritto il codice e effettuato i collegamenti mi ritrovo con tutti i relè sotto tensione che corrisponde esattamente al contrario di quello che volevo.
Ho provato e riprovato ma nulla. non riesco a venirne a capo.

Fiducioso in un vostro aiuto posto il codice

//includo la libreria spi
#include <SPI.h>
//includo la libreria per l'ethernet shield
#include <Ethernet.h>
//stabilisco l'indirizzo mac 
byte mac[] = {0x90, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };
//stabilisco l'indirizzo ip
byte ip[] = { 192, 168, 1, 150 };
//stabilisco il subnet
  byte subnet[] = {
  255, 255, 255, 0 };
//stabilisco la porta
EthernetServer server(80);
String readString;
//dichiaro i vari pin
byte out_1 = 22;
byte out_2 = 24;
byte out_3 = 26;
byte out_4 = 28;
byte out_5 = 30;
byte out_6 = 32;
byte out_7 = 34;
byte out_8 = 36;
void setup()
{ 
  Ethernet.begin(mac, ip);
//imposto i vari pin in uscita
  pinMode(out_1, OUTPUT);
  pinMode(out_2, OUTPUT);
  pinMode(out_3, OUTPUT); 
  pinMode(out_4, OUTPUT);
  pinMode(out_5, OUTPUT); 
  pinMode(out_6, OUTPUT);
  pinMode(out_7, OUTPUT);  
  pinMode(out_8, OUTPUT);  
}
 
void loop(){
  EthernetClient  client = server.available();
 
  if (client) {
    boolean currentLineIsBlank = true;
 
    while (client.connected()) {
      if (client.available()) { 
        char c = client.read();
        readString.concat(c);   
        if (c == '\n' && currentLineIsBlank) {
 
         //se leggi la stringa on1 allora accendi il pin 1 (ecc.)
          if(readString.indexOf("on_1") > 0) {
            digitalWrite(out_1, HIGH);
            delay (400); 
            digitalWrite(out_1, LOW);
          }          
          if(readString.indexOf("on_2") > 0) {
            digitalWrite(out_2, HIGH);
            delay (400); 
            digitalWrite(out_2, LOW);
          }                   
          if(readString.indexOf("on_3") > 0) {
            digitalWrite(out_3, HIGH);
            delay (400); 
            digitalWrite(out_3, LOW);
          } 
          if(readString.indexOf("on_4") > 0) {
            digitalWrite(out_4, HIGH);
            delay (400); 
            digitalWrite(out_4, LOW);
          }         
          if(readString.indexOf("on_5") > 0){
            digitalWrite(out_5, HIGH);
            delay (400); 
            digitalWrite(out_5, LOW);
          } 
          if(readString.indexOf("on_6") > 0) {
            digitalWrite(out_6, HIGH);
            delay (400); 
            digitalWrite(out_6, LOW);
          }         
          if(readString.indexOf("on_7") > 0) {
            digitalWrite(out_7, HIGH);
            delay (400); 
            digitalWrite(out_7, LOW);
          }         
          if(readString.indexOf("on_8") > 0) {
            digitalWrite(out_8, HIGH);
            delay (400); 
            digitalWrite(out_8, LOW);
          }      
 
          //  PAGINA HTML      
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.print("<html><head><title>Spirito Santo Controllo WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");

          client.print("

");
          client.print("Spirito Santo Controller");
          client.print("<p>");
  
          client.print("
");
          if (digitalRead(22)== true) client.print("<a href=/?off_1>");  
          else client.print("<a href=/?on_1>");
          client.print("     <--   Cancello");
          
          client.print("
");
          if (digitalRead(24)== true) client.print("<a href=/?off_2>");  
          else client.print("<a href=/?on_2>");
          client.print("     <--   Viale Nord");
          
          client.print("
");
          if (digitalRead(26)== true) client.print("<a href=/?off_3>");  
          else client.print("<a href=/?on_3>");
          client.print("     <--   Piazzale Anteriore");
          
          client.print("
");
          if (digitalRead(28)== true) client.print("<a href=/?off_4>");  
          else client.print("<a href=/?on_4>");
          client.print("     <--   Piazzale Anteriore Fari Bassi");
          
          client.print("
");
          if (digitalRead(30)== true) client.print("<a href=/?off_5>");  
          else client.print("<a href=/?on_5>");
          client.print("     <--   Piazzale Posteriore");
          
          client.print("
");
          if (digitalRead(32)== true) client.print("<a href=/?off_6>");  
          else client.print("<a href=/?on_6>");
          client.print("     <--   Piazzale Box Auto");
          
          client.print("
");
          if (digitalRead(34)== true) client.print("<a href=/?off_7>");  
          else client.print("<a href=/?on_7>");
          client.print("     <--   Viale Box Auto");
          
          client.print("
");
          if (digitalRead(36)== true) client.print("<a href=/?off_8>");  
          else client.print("<a href=/?on_8>");
          client.print("      <--   Fontana");
 
 
          client.println("</body></html>");
 
          readString="";
          delay(5);
 
          client.flush();
          client.stop(); 
        }
      }
    }
  }
}

Notte Notte

chiedo venia.
ho fatto un controllo con il tester e la situazione è la seguente:
sul contatto n.c. mi da un impedenza paria 1 che passa a 0 quando invio l’impulso.

E’ normale che la luce rossa accanto al relè sia rossa e si spegne quando mando l’impulso!?
penso di essermi fatto ingannare da una lucina…

come faccio a sapere se la bobina del relè si eccita o si diseccita quando mando l’impulso?

Grazie ancora per le risposte che vorrete darmi

pippo1to1: una scheda da "ben" 8 relè

Quale?

pippo1to1: E' normale che la luce rossa accanto al relè sia rossa e si spegne quando mando l'impulso!?

Può darsi, se sono a logica inversa.

Metti il link alla scheda comprata

E' normale che la luce rossa accanto al relè sia rossa

Sí, é normale che la luce rossa sia rossa. ;) ;) ;)

come faccio a sapere se la bobina del relè si eccita o si diseccita quando mando l'impulso?

Consulti lo schema elattrico della scheda relé, Dai un segnale all entrata e miszra la tensione sulla bobbina.

I relé consumano abbastanza corrente. È molto probabile che la USB non possa dara abbastanza corrente da alimentare tutto.

Ciao Uwe

uwefed:

E' normale che la luce rossa accanto al relè sia rossa

Sí, é normale che la luce rossa sia rossa. ;) ;) ;)

ROTFL :stuck_out_tongue_closed_eyes:

buon giorno,

ricapitoliamo: inserisco la presa usb, tutti i relè si eccitano (si sente li scatto) e dopo 5 sec. arduino è pronto per funzionare. il contatto è n.o.

la scheda che ho comperato è la seguente. http://www.amazon.it/gp/product/B00EDHX4Z4/ref=oh_details_o01_s00_i00?ie=UTF8&psc=1

Quote from: pippo1to1 on March 01, 2014, 08:21:39 pm E' normale che la luce rossa accanto al relè sia rossa e si spegne quando mando l'impulso!? Può darsi, se sono a logica inversa.

se così fosse la scheda si presenterebbe con il relè diseccitato e il contatto n.o. giusto?

Dai un segnale all entrata e miszra la tensione sulla bobbina.

che vuol dire!? la tensione della bobina non sarà quella fornita da arduino con il singolo impulso? 5v...?

secondo voi, visto che non sono un programmatore, il codice è scritto in maniera corretta... ho provato in diversi modi ma il risultato è sempre lo stesso... dove sbaglio!??!?!?!?

grassie =(

Dal tuo link:
“Questo modulo relè è 5V attivo basso” ovvero con LOW sul pin lo attivi, con HIGH lo disattivi.

Semplice, inverti nel tuo programma gli HIGH con LOW e viceversa.
Nella setup() fai partire i rele a LOW, aggiungendo per ogni pin: digitalWrite(out_1, LOW);

Quello che non capisco invece perchè ogni pin lo accendi e dopo 400 millisecondi lo spegni ?

          if(readString.indexOf("on_1") > 0) {
            digitalWrite(out_1, HIGH);
            delay (400); 
            digitalWrite(out_1, LOW);
          }

dovresti avere 2 comandi per accendere/spegnere ogni rele ( ho già invertito i livelli HIGH/LOW)

          if(readString.indexOf("on_1") > 0) {
            digitalWrite(out_1, LOW);  // invertito 
          }         
          if(readString.indexOf("off_1") > 0) {
            digitalWrite(out_1, HIGH);  // invertito 
          }

Parto dal principio :slight_smile:

sto ristrutturando una casa in campagna nel quale non sono residente. La proprietà è a Lecce e io vivo a pordenone :zipper_mouth_face:
la mia idea era quella di creare una sistema parallelo al tradizionale impianto elettrico
per due motivi: comandare utenze quando sono a pordenone e rendere più agevole comandare utenze quando non si è vicini all’abitazione ma in giro per la proprietà.
il Delay lo avevo inserito per simulare un pulsante, in questo modo il relè della scheda da un impulso al relè principale al quale sono collegati i normali pulsanti a muro.

Ho provato ad invertire i comandi HIGH e LOW ma non ho sortite alcun effetto…

Pubblica lo schema elettrico di come hai fatto i collegamenti, altrimenti non se ne viene a capo.

penso di aver risolto:

ho riscritto il codice seguendo un’altra logica e sembra che funzioni.

condivido il lavoro svolto:

#include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0x90, 0xA2, 0xXX, 0xXX, 0xXX, 0xXX}; //mac address
byte ip[] = { 192, 168, 1, 150 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // accesso via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //porta
 
String readString;
 
//////////////////////
 
void setup(){
 
  pinMode(22, OUTPUT); //dichiaro i pin
  pinMode(24, OUTPUT); 
  pinMode(26, OUTPUT); 
  pinMode(28, OUTPUT); 
  pinMode(30, OUTPUT); 
  pinMode(32, OUTPUT); 
  pinMode(34, OUTPUT); 
  pinMode(36, OUTPUT); 
  
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  //the pin for the servo co
  //enable serial data print
  Serial.begin(9600);
  Serial.println("server LED test 1.0"); // so I can keep track of what is loaded
}
 
void loop(){
  // Crea la  connessione
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
 
        if (readString.length() < 100) {
 
          readString += c;
        }
        if (c == '\n') {
 
          ///////////////
          Serial.println(readString); 
 
          client.println("HTTP/1.1 200 OK"); 
          client.println("Content-Type: text/html");
          client.println();
 
          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
          client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
          client.println("<link rel='stylesheet' type='text/css' href='http://homeautocss.net84.net/a.css' />");
          client.println("<TITLE>Spirito Santo - Home Automation</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");
          client.println("<H1>Spirito Santo - Home Automation</H1>");
          client.println("<hr />");
          client.println("
");
          client.println("<a href=\"/?cancello\"\">Cancello</a>");
          client.println("
");
          client.println("
");
          client.println("<a href=\"/?viale\"\">Viale</a>");
          client.println("
");
          client.println("
");
          client.println("<a href=\"/?piazzale%20nord\"\">Piazzale nord</a>");
          client.println("
");
          client.println("
");
          client.println("<a href=\"/?fari%20bassi\"\">Piazzale nord - fari bassi</a>");
          client.println("
");
          client.println("
");
          client.println("<a href=\"/?piazzale%20sud\"\">Piazzale sud</a>");
          client.println("
");
          client.println("
");
          client.println("<a href=\"/?viali\"\">Viale Box</a>");
          client.println("
");
          client.println("
");
          client.println("<a href=\"/?box%20auto\"\">Box auto</a>");
          client.println("
");
          client.println("
");
          client.println("<a href=\"/?fontana\"\">Fontana</a>");
          client.println("
");
          client.println("
");
          client.println("<a href=\"/?all\"\">accendi tutto</a>");
          client.println("</BODY>");
          client.println("</HTML>");
          delay(1);
          //fermo client
          client.stop();
 
          //controllo pin arduino
          if(readString.indexOf("?cancello") >0)
          {
            digitalWrite(22, LOW);   
            delay (300); 
            digitalWrite(22, HIGH); 
            Serial.println("Led On");
          }
          if(readString.indexOf("?viale") >0)
          {
            digitalWrite(24, LOW);    
            delay (300); 
            digitalWrite(24, HIGH); 
            Serial.println("Led On");
          }         
          if(readString.indexOf("?piazzale%20nord") >0)
          {
            digitalWrite(26, LOW);   
            delay (300); 
            digitalWrite(26, HIGH); 
            Serial.println("Led On");
          }         
          if(readString.indexOf("?fari%20bassi") >0)
          {
            digitalWrite(28, LOW);    
            delay (300); 
            digitalWrite(28, HIGH); 
            Serial.println("Led On");
          }         
          if(readString.indexOf("?piazzale%20sud") >0)
          {
            digitalWrite(30, LOW);    
            delay (300); 
            digitalWrite(30, HIGH); 
            Serial.println("Led On");
          }         
           if(readString.indexOf("?viali") >0)
          {
            digitalWrite(32, LOW);    
            delay (300); 
            digitalWrite(32, HIGH); 
            Serial.println("Led On");
          }         
           if(readString.indexOf("?box%20auto") >0)
          {
            digitalWrite(34, LOW);    
            delay (300); 
            digitalWrite(34, HIGH); 
            Serial.println("Led On");
          }         
           if(readString.indexOf("?fontana") >0)
          {
            digitalWrite(36, LOW);    
            delay (300); 
            digitalWrite(36 , HIGH); 
            Serial.println("Led On");
          }         
         
          //clearing string for next read
          readString="";
 
        }
      }
    }
  }
}

se ho scritto male qualcosa illuminatemi

:roll_eyes:
intanto… grassie!

Ah! ho scoperto una cosa (ringrazio Leo72 per avermelo fatto notare)

la scheda è a logica inversa! funzionano al contrario gli HIGH e i LOW. rispetto a come era prima non era normale che la luce rossa fosse accesa. si deve accendere quando il relè si eccita al contrario deve restare spenta.

Grassie (grazie) per la collaborazione

:)

Comunque te l'avevamo detto in diversi che era a logica inversa ;) ;)

leo72: Comunque te l'avevamo detto in diversi che era a logica inversa ;) ;)

Nooo, ma va!!! http://forum.arduino.cc/index.php?topic=222478.msg1615404#msg1615404 :grin:

P.S. OT: @pippo la foto è il tuo gattone? bello

:blush: :blush: :blush: :blush: :blush: :blush: :blush: :blush: :blush:

si vero... scusatemi... in tanti, in tantissimi melo avevate detto ma come scritto nel messaggio di presentazione mi sono avvicinato all'elettronica grazie proprio ad arduino XD quindi perdonatemi l'incompetenza.

il gattone si... è il nostro! ho preso una moglie e un gatto in un colpo solo XD XD XD XD XD