Ecco il listato di uno sketch per l’arduino.

/* ESEMPIO CHE DIMOSTRA COME USARE ARDUINO UNO REV 3 CON ETHERNETSHIELD E DISPLAY LCD 16X2

L’ESEMPIO CORRENTE PERMETTE DI ACCENDERE E SPEGNERE UN LED TRAMITE INTERFACCIA WEB EMETTENDO
ANCHE UN SUONO TRAMITE IL BUZZER QUANDO VIENE SPENTO O ACCESO.
INOLTRE VISUALIZZA SUL DISPLAY LE INFORMAZIONI DI TEMPERATURA ED UMIDITA’ DEL SENSORE DHT

1 LED
1 DISPLAY
1 ARDUINO ETHERNET SHIELD
1 ARDUINO UNO REV 3
1 BUZZER
1 POTENZIOMETRO
1 SENSORE DI TEMP E UMIDITA’ DHT

PRESTARE ATTENZIONE AL COLLEGAMENTO DEL DISPLAY IN QUANTO DOVRANNO ESSERE USATE LE USCITE ANALOGICHE.

ATTENZIONE – IL DISPLAY DEVE ESSERE COLLEGATO IN MODO DIFFERENTE QUANDO USATO ASSIEME ALL’ETHERNET SHIELD
IN QUANTO LA PIEDINATURA DELLE DIGITALI VIENE RISERVATA DALL’ETHERNET SHIELD.

A TALE PROPOSITO OCCORRE COLLEGARE IL DISPLAY COME SEGUE PER QUANTO CONCERNE CIO CHE ERA COLLEGATO ALLE DIGITALI:

PIN 1 (VSS) SU GND
PIN 2 (VDD) SU 5V
PIN 3 (VO) SU PIN CENTRALE DEL POTENZIOMETRO (POT)
PIN 4 (RS) SU A0
PIN 5 (RW) SU GND
PIN 6 (E) SU A1
PIN D4 SU A2
PIN D5 SU A3
PIN D6 SU A4
PIN D7 SU A5
PIN 15 (A) COLLEGATO ALLA 5V
PIN 16 (K) COLLEGATO AL GND

USARE QUESTA DICHIARAZIONE : LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);

COLLEGAMENTI POTENZIOMETRO :

* pin SX potenziometro/trimmer collegato a +Vcc (5V)
* pin DX potenziometro/trimmer collegato a GND
* i pin SX e DX del potenziometro/trimmer possono essere interscambiati
* PIN CENTRALE DEL POTENZIOMETRO COLLEGATO A PIN 3 (VO)

COLLEGAMENTI BUZZER :

POSITIVO DEL BUZZER AL PIN DIGITALE 7 DI ARDUINO
NEGATIVO DEL BUZZER AL PIN GND SULLA BREADBOARD O ARDUINO

COLLEGAMENTI LED :

NEGATIVO (GAMBA CORTA) SU GND
POSITIVO (GAMBA LUNGA) SU PIN 8 (DIGITALE) DI ARDUINO

COLLEGAMENTI SERVO O SECONDO LED :

NEGATIVO (GAMBA CORTA) SU GND
POSITIVO (GAMBA LUNGA) SU PIN 5 (DIGITALE) DI ARDUINO

COLLEGAMENTI SENSORE DHT

CAVETTO ROSSO DA D4 a PIN 5V (POWER)
CAVETTO VERDE DA D3 a PIN A0 (ANALOG IN)
CAVETTO NERO DA D1 a GND (DIGITAL)
SENSORE DI TEMPERATURA DHT DA A1 ad A4 CON GRIGLIA RIVOLTA VERSO LETTERA D DELLA BREADBOARD

*/

//DI SEGUITO I COMMENTI ORIGINALI RIPORTATI SOLO A TITOLO INFORMATIVO

//simple button GET server code to control servo and arduino pin 5
//for use with IDE 1.0
//open serial monitor to see what the arduino receives
//use the slash to escape the ” in the html
//for use with W5100 based ethernet shields
//Powering a servo from the arduino usually DOES NOT WORK.
//note that the below bug fix may be required
// http://code.google.com/p/arduino/issues/detail?id=605
/*
/* uso del display LCD 16×2 standard Hitachi HD44780

Circuito ORIGINALE SENZA ETHERNETSHIELD:

* COLLEGARE GND dell’arduino alla zona GND della breadboard
* pin 1 (VSS) a zona GND della breadboard
* pin 2 (VDD / +Vcc) collegato a 5V
* pin 3 (V0) dell’LCD va collegato al centrale del potenziometro/trimmer da 10 KOhm
* pin 4 (RS) (dell’LCD) collegato al pin digitale 12
* pin 5 (R/W) collegato al GND della breadboard
* pin 6 (E) (Enable) collegato al pin digitale 11

* Il pin 15 (A) (Anodo) è il piedino a cui collegare una tensione positiva (nel caso del display descritto +4,2V)
che serve per la retroilluminazione del display. La retroilluminazione del display si può ottenere in 2 modi elencati di seguito:

Metodo 1 : pin 15 collegato direttamente alla 5V (se collegato in questo modo non occorre scrivere altro codice rispetto al metodo 2)

Metodo 2 : pin 15 collegato al pin digitale 13 dell’arduino usando poi il seguente codice per attivare la tensione nel pin 13 e permettere
la retroilluminazione :

Nelle dichiarazioni di variabili scrivere : int backLight = 13; // pin 13 will control the backlight
Nel codice setup o loop usare il seguente : pinMode(backLight, OUTPUT);
digitalWrite(backLight, HIGH); // turn backlight on. Replace ‘HIGH’ with ‘LOW’ to turn it off.

* pin 16 (K) (Catodo) – piedino da collegare a GND per consentire la retroilluminazione.

* pin D4 collegato al pin digitale 5
* pin D5 collegato al pin digitale 4
* pin D6 collegato al pin digitale 3
* pin D7 collegato al pin digitale 2

* pin SX potenziometro/trimmer collegato a +Vcc (5V)
* pin DX potenziometro/trimmer collegato a GND
* i pin SX e DX del potenziometro/trimmer possono essere interscambiati

* http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/

**** Ho notato un’icongruenza con le istruzioni del sito in quanto dice di collegare il pin RS (che sarebbe il pin 4) al digitale 12
**** e poi mi dice che i pin 1 e 4 vanno collegati al GND!! Ma se RS è pin 4 e va sul digitale 12 , come mai poi mi dici di collegare il pin 4 (RS) al GND?
*/

// include le librerie:
#include <LiquidCrystal.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>



#include <dht.h> //LIBRERIA PER IL SENSORE DI TEMP E UMIDITA’
#define dht_dpin 6 //CANALE SUL QUALE E’ COLLEGATO IL SENSORE TEMP E UMIDITA’ – VIENE IMPOSTATO COME COSTANTE TRAMITE FUNZIONE DEFINE.
dht DHT; // RIGUARDA IL SENSORE DHT MA NON SO COSA FACCIA ESATTAMENTE QUESTA DICHIARAZIONE !!!!!!





// INIZIALIZZA LA LIBRERIA CON IL NUMERO DI PIN DELL’INTERFACCIA

LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); // IMPOSTA I PIN A CUI E’ COLLEGATO IL DISPLAY LCD
Servo myservo; // CREA UN OGGETTO SERVO PER POTERLO CONTROLLARE
int Buzzer = 7; // IMPOSTA IL PIN DEL BUZZER

// IMPOSTAZIONI DI RETE DELLE ETHERNET SHIELD

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // INDIRIZZO FISICO DELLA SCHEDA (MAC ADDRESS). SOLITAMENTE SCRITTO SULL’ETTICHETTA DELLA SHIELD.
byte ip[] = { 192, 168, 1, 177 }; // INDIRIZZO IP IN RETE
byte gateway[] = { 192, 168, 1, 1 }; // INDIRIZZO IP DEL GW PER ACCEDERE A INTERNET
byte subnet[] = { 255, 255, 255, 0 }; // SUBNET MASK
EthernetServer server(80); // PORTA DEL SERVER WEB CHE VERRA’ CREATA E CHE RESTERA’ IN ASCOLTO.

String readString; // VARIABILE DI TIPO STRINGA CHIAMATA READSTRING
String statoled; // VARIABILE IN CUI SCRIVE LO STATO DEL O DEI LED
void setup(){

pinMode(Buzzer, OUTPUT); // IMPOSTA COME OUTPUT IL PIN DEL BUZZER DICHIARATO IN PRECEDENZA
lcd.begin(16,2); // COLONNE, RIGHE. usa 16,2 per un led 16×2 , etc.
pinMode(8, OUTPUT); // pin da controllare – a cui è collegato il led nel nostro caso
pinMode(5, OUTPUT); // pin da controllare – a cui è collegato un motorino

//INIZIALIZZA MODULO ETHERNET

Ethernet.begin(mac, ip, gateway, subnet); // INIZIALIZZA LA RETE

server.begin();

Serial.begin(9600);
Serial.println(“Arduino Ethernet Server Test”); // SCRIVE NEL MONITOR SERIALE PER TENERE TRACCIA DI COSA ACCADE
lcd.print(“Arduino Ethernet Server Test”); // SCRIVE SUL DISPLAY

}
void loop(){

DHT.read11(dht_dpin); // LEGGE I VALORI DAL SENSORE DI TEMP E UMIDITA’

lcd.setCursor(0,1); // IMPOSTA IL CURSORE IN POSTIZIONE COLONNA 0, RIGA 0 (PRIMA RIGA)
lcd.print(“T=”); // SCRIVE SUL DISPLAY LA SCRITTA T=
lcd.print(DHT.temperature); // SCRIVE SUL DISPLAY LA TEMPERATURA RILEVATA
lcd.print(” U=”); // SCRIVE SUL DISPLAY LA SCRITTA U=
lcd.print(DHT.humidity); // SCRIVE SUL DISPLAY L’UNIDITA’ RILEVATA

delay(800); // ATTESA PRIMA DI RILEGGERE VALORI DAL SENSORE DHT, NON PROVARE AD ACCEDERE TROPPO FREQUENTEMENTE …. IN TEORIA!

// CREA UNA CONNESSIONE CLIENT

EthernetClient client = server.available();

if (client) {

while (client.connected()) {
if (client.available()) {
char c = client.read();

//legge carattere per carattere della richiesta HTTP
if (readString.length() < 100) {
readString += c; //memorizza caratteri nella stringa

}

//se richiesta HTTP e’ terminata
if (c == ‘n’) {

///////////////
Serial.println(readString); //SCRIVE SUL MONITOR SERIALE PER POTER FARE DEBUGGING

client.println(“HTTP/1.1 200 OK”); //INVIA UNA NUOVA PAGINA
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>Home Automation</TITLE>”);
client.println(“</HEAD>”);
client.println(“<BODY>”);
client.println(“<H4>Controllo LED da remoto</H4>”);
client.println(“<hr />”);
client.println(“<br />”);
client.println(“<a href=”/?lighton””>Accendi LED</a>”);
client.println(“<a href=”/?lightoff””>Spegni LED</a><br />”);
client.println(“<br />”);
client.println(“<a href=”/?servoon””>Accendi SERVO</a>”);
client.println(“<a href=”/?servooff””>Spegni SERVO</a><br />”);
client.println(“<br />”);
client.println(“<hr />”);
client.println(“</BODY>”);
client.println(“</HTML>”);

delay(1);

client.stop(); //FERMA IL CLIENT

///////////////////// CONTROLLA IL PIN DI ARDUINO

if(readString.indexOf(“?lighton”) >0) //CONTROLLA SE ACCESO

{

digitalWrite(8, HIGH); // IMPOSTA IL PIN 8 a HIGH (QUINDI ACCESO)

//lcd.begin(16,2); // COLONNE, RIGHE. usa 16,2 per un lcd 16×2 , etc.
lcd.clear(); // CANCELLA TUTTO LO SCHERMO LCD
lcd.setCursor(0,0); // IMPOSTA IL CURSORE IN POSTIZIONE COLONNA 0, RIGA 0 (PRIMA RIGA)
statoled = “Led Acceso”;
lcd.print(statoled); // SCRIVE SUL LCD
Serial.println(statoled); // SCRIVE SUL SERIAL MONITOR

tone(Buzzer, 1000, 200); // EMETTE SUONO TRAMITE BUZZER
Serial.println(“Buzzer”); // SCRIVE SUL SERIAL MONITOR

}

else{

if(readString.indexOf(“?lightoff”) >0) // CONTROLLA SE E’ SPENTO

{

digitalWrite(8, LOW); // IMPOSTA IL PIN 8 a LOW

//lcd.begin(16,2); // COLONNE, RIGHE. usa 16,2 per un lcd 16×2 , etc.
lcd.clear(); // CANCELLA TUTTO LO SCHERMO LCD
lcd.setCursor(0,0); // IMPOSTA IL CURSORE IN POSTIZIONE COLONNA 0, RIGA 0 (PRIMA RIGA)
statoled = “Led Spento”;
lcd.print(statoled); // SCRIVE SUL LCD
Serial.println(statoled); // SCRIVE SUL SERIAL MONITOR

tone(Buzzer, 1000, 200); // EMETTE SUONO TRAMITE BUZZER
Serial.println(“Buzzer”); // SCRIVE SUL SERIAL MONITOR

}

else{

if(readString.indexOf(“?servoon”) >0) // CONTROLLA SE E’ SPENTO

{

digitalWrite(5, HIGH); // IMPOSTA IL PIN 5 a LOW

//lcd.begin(16,2); // COLONNE, RIGHE. usa 16,2 per un lcd 16×2 , etc.
lcd.clear(); // CANCELLA TUTTO LO SCHERMO LCD
lcd.setCursor(0,0); // IMPOSTA IL CURSORE IN POSTIZIONE COLONNA 0, RIGA 0 (PRIMA RIGA)
statoled = “Servo Acceso”;
lcd.print(statoled); // SCRIVE SUL LCD
Serial.println(statoled); // SCRIVE SUL SERIAL MONITOR

tone(Buzzer, 1000, 200); // EMETTE SUONO TRAMITE BUZZER
Serial.println(“Buzzer”); // SCRIVE SUL SERIAL MONITOR

}

else{

if(readString.indexOf(“?servooff”) >0) // CONTROLLA SE E’ SPENTO

{

digitalWrite(5, LOW); // IMPOSTA IL PIN 5 a LOW

//lcd.begin(16,2); // COLONNE, RIGHE. usa 16,2 per un lcd 16×2 , etc.
lcd.clear(); // CANCELLA TUTTO LO SCHERMO LCD
lcd.setCursor(0,0); // IMPOSTA IL CURSORE IN POSTIZIONE COLONNA 0, RIGA 0 (PRIMA RIGA)
statoled = “Servo Spento”;
lcd.print(statoled); // SCRIVE SUL LCD
Serial.println(statoled); // SCRIVE SUL SERIAL MONITOR

tone(Buzzer, 1000, 200); // EMETTE SUONO TRAMITE BUZZER
Serial.println(“Buzzer”); // SCRIVE SUL SERIAL MONITOR

} // CHIUDE IL PRIMO IF

} // CHIUDE IL SECONDO IF

} // CHIUDE IL TERZO IF

} // CHIUDE IL QUARTO IF

readString=””; //SVUOTA LA STRINGA READSTRING PER POTER LEGGERE IL PROSSIMO VALORE
statoled = “”; // SVUOTA LA STRINGA DI STATOLED

}

}

}

}

}

 

Categorie: Arduino

0 commenti

Lascia un commento