giovedì 30 giugno 2016

Protocollo 1-wire: Test sonda Dallas DS18B20

Iniziamo con il dare alcuni cenni sul protocollo 1-wire. Creato dalla Dallas Semiconductor come sistema di comunicazione a filo unico a bassa velocità di comunicazione e lungo raggio e per dispositivi molto economici. 

Attualmente spesso utilizzato in dispositivi economici come termometri, sensori di pressione e umidità.

Il sistema a bus 1-wire è di tipo Master / Slave con la possibilità quindi di avere più dispositivi collegati che realizzano una sorta di micro-lan, ogni dispositivo è dotato di un proprio identificativo a 64 bit assegnato i fase di produzione ed inciso nella ROM.

Ora occupiamoci di testare la nostra sonda Dallas DS18B20 (acquistabile qui), lo schema generale di collegamento è il seguente:




Abbiamo due possibilità per testare il componente.

Utilizzare la nostra development board EtaBeta Idea per chi ne è in possesso, già pronta per lo studio del sensore di temperatura, oppure preparare un test con ARDUINO UNO ed una breadbord seguendo lo schema riportato in figura 1.


Figura 1

Con EtaBeta IDEA basta semplicemente abilitare la sonda Dallas preinstallata posizionando il Dip Switch DS1 - 7 in posizione ON come in figura 2.


Figura 2

Ed ecco uno sketch di prova per testare la nostra sonda di temperatura, i dati vengono stampati sulla seriale dell' IDE di Arduino una volta aperta. 


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
 * Tutorial test Dallas DS18B20 su pin digital 8 
 *
 * Acqua - Pinto 
 * https://etabetastudio.blogspot.com
 */

#include <OneWire.h> 
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);

void setup() 
{
delay(1000);
Serial.begin(9600);
Serial.println("TEMPERATURA RILEVATA DALLA SONDA");
Serial.println("DS18B20");
delay(1000); 
sensors.begin();
}

void loop() 
{
Serial.println();
sensors.requestTemperatures();
Serial.print("Temperatura = ");
Serial.print(sensors.getTempCByIndex(0));
Serial.println(" gradi C");
delay(5000); // ogni 5 secondi stampo il valore della sonda
}



Per chi  non avesse le librerie OneWire.h , DallasTemperature.h caricate, possono essere installate in questo modo. 

Aprite  la  "Gestione librerie " della IDE in  Sketch > Inclusione librerie > Gestione Librerie. Modificare i parametri di ricerca in "tutti" e cercare la libreria onewire e dopo dallas DS18B20. 

Una volta identificate cliccate su installa per ogni singola libreria. Riavviate l'IDE ed il gioco è fatto.

Per installare manualmente le librerie puoi scaricarle ai link seguenti: 

One_Wire clicca qui.
DallasTemperature clicca qui.













sabato 25 giugno 2016

TUTORIAL: Comando relè a distanza via web

Comando a distanza dei relè iniziamo ad impostare il progetto.

Difficoltà Media

Ed ecco un progettino molto simpatico , che oltre ad avere uno scopo didattico è anche molto utile. Spesso capita di essere fuori casa e
si ha la necessità di accendere o spegnere qualcosa come un irrigatore, il riscaldamento o semplicemente le luci per simulare la nostra presenza. Come fare? Semplice possiamo in breve tempo realizzare un oggetto che possa soddisfare le nostre esigenze utilizzando Arduino oppure la nostra piattaforma EtaBeta IDEA ,con una ethernet shield .

Elenco del materiale occorrente utilizzando ARDUINO:
  • n°1 Scheda ARDUINO 2009 / UNO (acquistabile qui)
  • n°1 Shield Arduino Ethernet (acquistabile qui)
  • n°1 MicroSD da inserire nella Ethernet Shield
  • n°1 Breadbord bella capiente (acquistabile qui)
  • n°2 Relè a 5Vdc di tensione bobina tipo OMRON G5LA-14 (acquistabile qui)
  • n°2 Pulsanti tattili switch (acquistabili qui)
  • n°2 Resistenze da 1.5K
  • n°4 Resistenze da 1K
  • n°2 Transistor BC337
  • n°2 Diodi 1N4148
  • Cavo vari colori per breadboard
  • n°1 Cavo di rete LAN
  • n°1 Cavo USB
Elenco del materiale occorrente utilizzando ETABETAIDEA:
  • n°1 Scheda EtaBeta IDEA
  • n°1 Shield Arduino Ethernet (acquistabile qui)
  • n°1 MicroSD da inserire nella Ethernet Shield
  • n°1 Cavo di rete LAN
  • n°1 Cavo USB
Per chi utilizza Arduino iniziamo a collegare tutti i componenti che ci occorrono sulla breadboard come da schema:


Figura 1




Mentre con ETABETA IDEA occorre solo abilitare 2 switch button ed i 2 relè configurando i dip switch DS1 e DS2 come in foto:

Figura 2

Prima di tutto bisogna analizzare in dettaglio il progetto, mentre con la board studio EtaBeta IDEA abbiamo tutto l'occorrente per poter iniziare a scrivere il nostro bel firmware, con Arduino dobbiamo cimentarci in qualche collegamento elettronico. 

Seguiamo i collegamenti come in Figura 1 posizionando prima i due pulsanti che ci permetteranno di azionare localmente i relè sulla breadboard con le rispettive resistenze di  pull-down da 1KOhm che permettono di rendere stabile il libello logico di segnale alla pressione del pulsante, poi posizioniamo i due relè. 

Per il progetto abbiamo usato due relè della omron facilmente reperibili sul mercato, con tensione alla bobina di 5Vdc. Per comandare i due relè ed evitare che possano danneggiare il micro della nostra board inseriamo due bei classici transistor BC337 NPN (nella configurazione CBE: Collettore - Base - Emettitore). 

Grazie al transistor possiamo comandare il relè con una bassa corrente di base. 

Al transistor va aggiunta una resistenza da 1K Ohm verso massa tra base ed emettitore, mentre una resistenza di 1,5K Ohm tra base e uscita del micro.

Colleghiamo quindi la nostra Ethernet Shield su Arduino oppure su ETABETA IDEA. 

Iniziamo a scrivere lo sketch

Apriamo la nostra IDE di programmazione Arduino ed iniziamo ad includere le librerie che utilizzeremo per il nostro progetto:

1
2
3
#include <String.h>  
#include <SPI.h>  
#include <Ethernet.h>  

A questo punto occorre configurare i parametri di rete per accedere alla nostra applicazione, prima di far questo lanciamo un ping per verificare che l'indirizzo che vogliamo utilizzare sia libero in rete. Fatto questo continuiamo a scrivere il nostro codice: 


1
2
3
4
5
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };     //Mac address ethernet shield 
byte ip[] = { 192, 168, 1, 50 }; // indirizzo IP assegnato alla shield  
byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router  
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask  
EthernetServer server(80);   //porta configurata sul router per collegarsi alla scheda anche in remoto

Continuiamo con il dichiarare tutte le variabili che ci occorrono:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
int reading1; 
int reading2;  

int rele1 = 7; // pin collegato al relè 1
int rele2 = 8; // pin collegato al relè 2
const int buttonPin1 = 5;    // Pin Button1 su ETA
const int buttonPin2 = 6;    // Pin Button2 su ETA
String readString;
int staterel1 = LOW;         // stato del relè all'accensione 
int staterel2 = LOW;         // stato del relè all'accensione
int buttonState1;             // leggere valore del pulsante dall'ingresso
int buttonState2;             // leggere valore del pulsante dall'ingresso
int aggiorna;                //variabile di aggiornamento di stato dei relè
int lastButtonState1 = LOW;   // stato del pulsante 1 all'accensione
int lastButtonState2 = LOW;   // stato del pulsante 2 all'accensione


long lastDebounceTime1 = 0;  // tempo di commutazione del pulsante 1
long lastDebounceTime2 = 0;  // tempo di commutazione del pulsante 2
long debounceDelay1 = 50;    // tempo di debounce
long debounceDelay2 = 50;    // tempo di debounce

Vediamo ora come impostare la parte del void setup  che contiene tutte le inizializzazioni di sistema, dalla parte di rete, il pin-out per finire all'inizializzazione della seriale:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
void setup(){  
Ethernet.begin(mac, ip, gateway, subnet);  //inizializzare la ethernet shield
pinMode(rele1, OUTPUT);      // Impostare relè 1 come output
pinMode(rele2, OUTPUT);      // Impostare relè 2 come output
  pinMode(buttonPin1, INPUT);      // Impostare pulsante 1 come input
  pinMode(buttonPin2, INPUT);      // Impostare pulsante 2 come input
    digitalWrite(rele1, staterel1);      //stato relè 1
  digitalWrite(rele2, staterel2);        //stato relè 1
Serial.begin(9600);                  //inizializzare seriale
}  

Nella parte successiva quella del void loop si andrà sia a leggere lo stato dei pulsanti che costruire la parte web in html dove sarà possibile inviare i comandi.


Il codice completo dello Sketch



  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*
 * Tutorial comando a distanza rele' con shield 
 *
 * Acqua - Pinto 
 * https://etabetastudio.blogspot.com
 */

#include <String.h>  
#include <SPI.h>  
#include <Ethernet.h>  
  
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };     //Mac address ethernet shield 
byte ip[] = { 192, 168, 1, 50 }; // indirizzo IP assegnato alla shield  
byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router  
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask  
EthernetServer server(80);   //porta configurata sul router per collegarsi alla scheda anche in remoto
int reading1; 
int reading2;  

int rele1 = 7; // pin collegato al relè 1
int rele2 = 8; // pin collegato al relè 2
const int buttonPin1 = 5;    // Pin Button1 su ETA
const int buttonPin2 = 6;    // Pin Button2 su ETA
String readString;
int staterel1 = LOW;         // stato del relè all'accensione 
int staterel2 = LOW;         // stato del relè all'accensione
int buttonState1;             // leggere valore del pulsante dall'ingresso
int buttonState2;             // leggere valore del pulsante dall'ingresso
int aggiorna;                //variabile di aggiornamento di stato dei relè
int lastButtonState1 = LOW;   // stato del pulsante 1 all'accensione
int lastButtonState2 = LOW;   // stato del pulsante 2 all'accensione


long lastDebounceTime1 = 0;  // tempo di commutazione del pulsante 1
long lastDebounceTime2 = 0;  // tempo di commutazione del pulsante 2
long debounceDelay1 = 50;    // tempo di debounce
long debounceDelay2 = 50;    // tempo di debounce


void setup(){  
Ethernet.begin(mac, ip, gateway, subnet);  //inizializzare la ethernet shield
pinMode(rele1, OUTPUT);      // Impostare relè 1 come output
pinMode(rele2, OUTPUT);      // Impostare relè 2 come output
  pinMode(buttonPin1, INPUT);      // Impostare pulsante 1 come input
  pinMode(buttonPin2, INPUT);      // Impostare pulsante 2 come input
    digitalWrite(rele1, staterel1);      //stato relè 1
  digitalWrite(rele2, staterel2);        //stato relè 1
Serial.begin(9600);                  //inizializzare seriale
}  
  
void loop(){ 
 
 // Procedura x creazione pagina web ed attivare i relè in remoto 
EthernetClient client = server.available();  //richiesta del client della pagina web
if (client) {  
 boolean currentLineIsBlank = true;   //  se la variabile currentLineIsBlank è nicazione con il client   
 while (client.connected()) {   //Verificare la comunicazione cliet/server 
 if (client.available()) {  
 char c = client.read();  
 readString.concat(c);   
   
 if (c == '\n' && currentLineIsBlank) {  
   
 Serial.print(readString); //Legge la stringa inviata via web  
   
 if(readString.indexOf("RELE1ON") > 0 ) {    // Attivazione remota del relè 1
   
 digitalWrite(rele1, HIGH);   
staterel1 = HIGH;
 }

 
if(readString.indexOf("RELE1OFF") > 0) {  // Disattivazione remota del relè 1
   
 digitalWrite(rele1, LOW);   
staterel1 = LOW;

 }
if(readString.indexOf("RELE2ON") > 0 ) {  //Attivazione remota del relè 2
   
 digitalWrite(rele2, HIGH);   
staterel2 = HIGH;
 }

 
if(readString.indexOf("RELE2OFF") > 0 ) {  // Disattivazione remota del relè 2
   
 digitalWrite(rele2, LOW);   
staterel2 = LOW;
 }   
 client.println("HTTP/1.1 200 OK");  //Standard HTML
 client.println("Content-Type: text/html");  
 client.println();  
 client.print("<html><head><title>ETA BETA STUDIO WEB CONTROL ARDUINO IDEA</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");   
 client.print("<h2><a href='/?RELE1ON=1'>RELE1ON</a> | <a href='/?RELE1OFF=1'>RELE1OFF</a></h2>");     //tasti di attivazione/disattivazione relè 1 
 client.println("</body></html>");
 client.print("<h2><a href='/?RELE2ON=1'>RELE2ON</a> | <a href='/?RELE2OFF=1'>RELE2OFF</a></h2>");    //tasti di attivazione/disattivazione relè 2
 client.println("</body></html>"); 
 readString="";  
 client.stop();  
  
 }   
 }   
 }   
}
// Procedura di attivazione dei relè in locale
   reading1 = digitalRead(buttonPin1);
if (reading1 != lastButtonState1) {
    //delay(10);
    lastDebounceTime1 = millis();
   
    }
     if ((millis() - lastDebounceTime1) > debounceDelay1) {
    debounce();   // richiamo alla funzione debounce per il tasto 1
    }
  
  digitalWrite(rele1, staterel1);
  lastButtonState1 = reading1;

   
   reading2 = digitalRead(buttonPin2);
if (reading2 != lastButtonState2) {
    lastDebounceTime2 = millis();
   
    }
     if ((millis() - lastDebounceTime2) > debounceDelay2) {
    debounce2(); // richiamo alla funzione debounce per il tasto 2
    }
  
  digitalWrite(rele2, staterel2);
  lastButtonState2 = reading2;
}


void debounce(){

    if (reading1 != buttonState1) {
      buttonState1 = reading1;

      if (buttonState1 == HIGH) {
        staterel1 = !staterel1;
        if (staterel1 == HIGH){
    aggiorna = 1;
      }
      else{
  aggiorna = 0;
        }
    }
  }
}


void debounce2(){

    if (reading2 != buttonState2) {
      buttonState2 = reading2;

      if (buttonState2 == HIGH) {
        staterel2 = !staterel2;
        if (staterel2 == HIGH){
    aggiorna = 1;
      }
      else{
  aggiorna = 0;
        }
    }
  }
}

domenica 5 giugno 2016

Presentazione di EDI


EDI



Spesso le idee, il lavoro e la passione per quello che fai ti portano a trovare e realizzare soluzioni per spingerti sempre "oltre". Il nostro concetto di "oltre" è quello di condividere con voi le nostre idee perché queste possano diventare realtà.

Abbiamo creato a questo scopo Edi uan Board di studio e prototipazione veloce, per dare a tutti uno strumento dove poter eseguire i primi test ed esperimenti elettronici in modo rapido seguendo i nostri tutorial che passo passo vi faranno acquisire quei blocchetti si conoscenza, che come i famosi mattoncini vi faranno costruire e realizzare le vostre idee.

Edi la assembli tu e gia questo è il tuo primo traguardo, fare qualcosa con le tue mani, che ti possa seguire nel tuo percorso didattico.


Vediamo cos'è EDI



La scheda Edi prima di ogni cosa la assembli da solo, poi è compatibile al 100% con ARDUINO sia per il software di programmazione che per le shields che trovi in commercio e che testeremo con dei tutorial nel corso del tempo.

Il suo core è caratterizzato dal microcontrollore ATMEL ATMEGA328, con package PDIP28.




Tutti i tutorial verranno illustrati sia sulla nostra scheda studio Edi che con ARDUINO, in modo da permettere a tutti di eseguirli.
Sulla Edi trovi già dei pulsanti, relè, una sonda di temperatura, buzzer, seriale e bus RS485 già pronti all'uso ed accompagnati da schema elettronico, senza la necessità di procurarsi breadboard, fili e componenti che spesso non abbiamo a portata di mano.

Tramite dip switch possiamo configurare EtaBeta IDEA a secondo delle esigenze.




Inoltre Edi è dotata di morsetti a vite che rendono il tuo progetto più stabile. Per finire puoi alimentare la tua scheda Edi, via usb, con connettore jack, o tramite morsetto fino a 12V. Edi ti fornirà le tensioni di 3.3, 5 e 12V ( se alimentata a 12V) su morsetto tuoi test.
Spero che il nostro lavoro e la nostra passione per l'elettronica possano aiutarti.
Buon divertimento!
Massimo

EDI ARDUINO COMPATIBILE

ARDUINO e Tutti i marchi riportati appartengono ai legittimi proprietari.