Alarma con estación meteorológica


También decidió utilizar un servidor MQTT para subir esta información en la web por lo que se puede desde cualquier lugar, tener un vistazo a la información meteorológica captada por este prototipo.

Elementos del montaje:

  1. nodeMCU (regulador Micro,  versión 0.9)
  2. Pantalla LCD – 16 x 2
  3. Botones – 3
  4. Sensor de temperatura DHT11
  5. Timbre o zumbador
  6. Placa de prototipos tamaño  mini
  7. Cables de puente
  8. Resistencia de 1000 Ω – 3
  9. Caja de madera para montar todas las cosas dentro.

Asignación de pines y planificación

Bien, así que vamos a hablar acerca de cómo tenía que distribuir los pasadores entre todos los componentes.

La pantalla LCD

La pantalla LCD,  necesita al menos 6 pines de I/O interfaz con el microcontrolador. Puede darse como sigue: Habilitar, register select, D04, D05, D06 D07.

  • Enable – pin I/O digital 0
  • Seleccione Registro – pin I/O digital 1
  • D04 – pin I/O digital 2
  • D05 – pin I/O digital 3
  • D06 – pin I/O digital 4
  • D07 – pin I/O digital 5

Los botones

Hay tres botones que vamos a usar, por lo queo bviamente  necesitaríamos tres pins de I/O digitales,

  • LeftButton – pin I/O digital 6
  • CenterButton – pin I/O digital 7
  • RightButton – pin I/O digital 8

El zumbador

El puede ser conectado al pin I/O digital 9.

El sensor de temperatura DHT11

Este sensor tiene un pin de salida y sigue para el pin de I/O digital 10

 

Ensamblaje

En una caja de madera ser practican agujeros para el lcd  y lo botones y entonces es hora de montar todo dentro de esa caja.

  1. Creo que tenemos que empezar con los botones. Usé un palito de helado estrecho para hacer una base para los botones.
  2. Luego tomar el nodeMCU y las placa de prototipos y pegarloo a la base de la caja con cinta de doble cara.
  3. Entonces conectar los botones a los pines de I/O digitales apropiados.
  4. En tercer lugar, colocar  la pantalla LCD y luego agarrarla bien a la caja con algunas cintas desde el interior. .
  5. Hacer las conexiones de la pantalla LCD.
  6. Luego conectar el timbre o buzzer en el interior de la caja con cinta de doble cara y conectar su terminal positivo al pin digital 9
  7. El sensor DHT11 tiene tres piness: 5v, gnd y la salida. Por lo tanto el pin de salida irá al pin digital 10 de la nodeMCU . 5v y tierra son obvias dónde deben ir.
  8. También para agregar, DHT11 es lo único que se quedará fuera de la caja para detectar la temperatura exterior. .

 

El código

El código qeu ha escrito Techovator0819      es cerca de 450 líneas de longitud. y cuenta  con  algunas bibliotecas importantes que se necesitan para descargar  asi que lo primero es asegúrarse de tener el IDE de Arduino instalado asi como tener los drivers del  esp8266 instaladas también. Si no lo ha hecho, haga clic aquí.

El primer paso antes de ver  el código, es entender la funcionalidad de nuestro dispositivo y el código en consecuencia:

  • Nestro WB(weather box)  accede a internet y recupera la información de tiempo apropiado a través de una llamada a la API.
  • También  tomara  la temperatura del medio ambiente  con un sensor propio y enviara esa información a un corredor de MQTT.
  • También podría mantener alarmas y temporizadores para usted.
  • También es capaz de mostrar hora y fecha.

Todo , esto significa que necesitamos integrar todas estas funciones bajo un título o código.

¿Cuáles son las bibliotecas que necesitamos?

  1. Librería LiquidCrystal . Como estamos usando una pantalla LCD como la principal interfaz entre usted y el NodeMCU, esta biblioteca es indispensable. Paranuestra comodidad, esta biblioteca, por defecto, es una biblioteca integrada en el IDE de Arduino.
  2. Biblioteca de ESP8266WiFi . Esta biblioteca permite el ESP8266 conectar con el Wifi y tener acceso a internet. Esta librería viene en un paquete que debe descargar durante la instalación del ESP8266 en el administrador de la placa.
  3. Biblioteca de ArduinoJson . Cuando se llama a la API, los datos que usted recibirá estaran en formato JSON (JavaScript Object Notation). Así que si quiere convertirlo a un formato utilizable, necesita analizarlo. Y la biblioteca de ArduinoJson lo hace por nosotros.
  4. Biblioteca para el sensor DHT11.
  5. Biblioteca en tiempo de. Para mantener a nuestro tiempo. Las funciones de biblioteca se enumeran aquí.
  6. Biblioteca de TimeAlarms . Se utiliza para que nos establezcan alarmas y temporizadores. Las funciones de biblioteca se enumeran aquí.

Las dos últimas bibliotecas deben utilizarse juntos. Puede usar la biblioteca en tiempo de forma independiente pero no de la biblioteca de TimeAlarms.


La llamada de API

 

The API Call

 

 

 

 

Lo más importante es una llamada a la API es la API key. Estoy conectando a la página web openweathermap.org para obtener toda la información de tiempo. Así que hay que seguir el procedimiento para abrir una cuenta allí y obtener un API key y es absolutamente gratis. Para llamar a la API key,
El primer paso es conectarse al servidor.

En segundo lugar, usted necesita utilizar su API key en la URL.Usted deberá utilizar el método GET para recuperar los datos de la URL.

Para hacer los datos disponibles en un formato utilizable,necesita para luego almacenar los datos en una cadena.

Los datos que reciba serán en formato JSON. Así que hay que analizarlo.

Y luego, se almacenan la información deseada en algunas variables globales que se pueden utilizar en cualquier lugar en el código.

     El siguiente es un ejemplo de código  para demostrar cómo funciona. Esta parte básicamente declara las bibliotecas utilizadas, crea las variables y objetos de la biblioteca a consultar.

include <ArduinoJson.h>
#include <ESP8266WiFi.h>
String result; 
// la cadena en la que se almacenarán los datos después de la llamada a la API
char servername[]="api.openweathermap.org"; //mombre servidor
String APIKEY = "YOUR_API_KEY"; //el API key
String CityID = "1264527"; //el  ID de la ciudad

//Asignación de sus variables globales para almacenar la información meteorológica recibida
String Description;
String Place;
float Temperature;
float Humidity;
float w;
WiFiClient client; >

Código de configuración básica.

void setup()

{

// Ponga su código de configuración aquí, para ejecutar una vez:
Serial.begin(9600);
WiFi.begin(“your ssid”, “your password”);

//empieza  conexion WIFI
while(WiFi.status() != WL_CONNECTED)

{

// espera hasta que se establezca la conexión
Serial.print(“.”);
delay(500);
}
Serial.println(“Connectado!”);
Serial.println(WiFi.localIP());   //imprime direccion  IP
}<

Código para crear una función que obtiene los datos.

void weatherData(){

if (client.connect(servername, 80)) {

// inicia la conexión del cliente, comprueba la conexión
client.println(“GET /data/2.5/weather?id=”+CityID+”&units=metric&APPID=”+APIKEY);

//// llama a la api usando el método get antes de la URL. Nota: La URL utiliza la clave api.
Serial.println(“Server esta accesible”);
client.println();
}
else { //  si el servidor no esta disponible
Serial.println(“fallo de conexion  “); //mensaje de errorsi no esta conectado el cliente
Serial.println();
}
result = “”;

//Hace que la cadena nula de cualquier dato almacenado previamente para almacenar nuevos datos
while (client.available()) { //connected or data available
char c = client.read(); //gets byte from ethernet buffer
result = result+c;
}
Serial.println(result);
result.replace(“[“, ” “);

//Estoy enfrentando un error. Sólo para evitarlo, tengo que escribir esto
result.replace(“]”, ” “);

//y esto tambien.
client.stop(); //para  cliente
Serial.println(“Recieved”);

//Analiza la cadena llamada resultado

StaticJsonBuffer<1024> jbuff;

JsonObject &root = jbuff.parseObject(result);
if (!root.success())
{
Serial.println(“parseObject() failed”);
}

// almacena toda la información deseada en variables temporales.
String location = root[“name”];
float temperature = root[“main”][“temp”];
float humidity = root[“main”][“humidity”];
String description = root[“weather”][“description”];
float wind = root[“wind”][“speed”];

//Transfiere toda la información de las variables temporales a variables globales a las //que puede acceder en cualquier parte del código.
Place = location;
Temperature = temperature;
Humidity = humidity;
w = wind * 3.6;
Description = description;
}

La función de bucle para mostrar todo lo que te quieren en el monitor serie.

void loop() {

weatherData(); //Llama a la función que hemos discutido anteriormente
Serial.println(Temperature);
Serial.println(Place);
Serial.print(“H: “);
Serial.println(Humidity);
Serial.print(w);
Serial.println(” kmph”);
Serial.println(Description);
delay(8000); //retardo de  8 segundos
}

Como vemos  es un ejemplo básico de una llamada a la API y el análisis de datos JSON.

 

MQTT cliente y agente

 

MQTT Client and Broker

 

 

Como hemos visto en este blog el autor h aoptado  por el frameworl Cayyene de MyDevices para salvar la informacion procedente del sensor DHT11

one.jpg

 

 

two.jpg

 

 

 

 

four.jpg

 

 

five.jpg

 

 

Como vemos va  subiendo nuestros datos de los sensores a un corredor de MQTT en internet por lo que podemos ver desde cualquier lugar.
Pesonalmente pienso que el tablero de instrumentos del Cayenne es el más conveniente así queno me sorprende que el autor lo hay usado
Resumidamente esto son los pasos  para usar el servicio
  • En primer lugar, debe crear una cuenta.
  • Después de haber conectado la placa a Cayena se le dirigirá automáticamente a la consola donde se pueden utilizar los widgets personalizados disponibles.
  • Asegúrese de especificar correctamente el canal y corresponden a ese canal para enviar datos en el código.
  • Después de que hayas hecho eso, cree un nuevo proyecto y arrastrar y soltar widgets como de sus dispositivos.
  • El siguiente es un código de ejemplo para que comprendas cómo Protocolo MQTT. También utilizaremos la biblioteca Cayena-MQTT-ESP8266 para hacer las cosas mucho más fácil para nosotros.
    <#include 
    
    char ssid[] = "ssid";
    char wifiPassword[] = "wifiPassword";
    
    char username[] = "MQTT_USERNAME";
    
    char password[] = "MQTT_PASSWORD";
    char clientID[] = "CLIENT_ID";
    
    void setup() {
    
      Serial.begin(9600);
      Cayenne.begin(username, password, clientID, ssid, wifiPassword);
    }
    
    void loop() {
    
     Cayenne.loop(); //this function must be called regularly to keep the connection stable
      float sensorInfo = analogRead(A0);
      Cayenne.virtualWrite(0, sensorInfo); //virtualWrite(channel, data) is function with two parameters. Channel - you want to send the data to and second parameter is the data itself.
    }
  • Después de eso, usted será capaz de enviar y recibir datos sin problemas. Para este , se ha usado sólo dos widgets icono es decir ‘temperatura’ y ‘humedad’.
  • Después de crear una cuenta, haga clic en ‘Add New’.
  • A continuación, haga clic en ‘Dispositivo/Widget’Haga clic en “Traiga su propia cosa”, que es en la parte inferior.Una nueva página aparecerá indicando su nombre de usuario MQTT, contraseña y el ID de cliente que son únicas para usted. Estos se aplicarán en el código para identificar el dispositivo.

Estructura del código final

La longitud total del código es alrededor de 550 líneas.

El código está dividido en dos secciones. Una PageDisplay y otra DecMaker (abreviatura de decisiones). Cada vez que usted pulsa cualquier botón, basado en que (derecha o izquierda), la pantalla mostrará esa página. Cuando en página y el centerButton, el código se moverá a la DecMaker. Dentro de la función DecMaker y basado en qué página estaba finalmente abierta, ejecutará las acciones correspondientes. Puede recibir datos meteorológicos, sensores, alarmas y temporizadores.

Las páginas se muestran según los modos. Los modos son cuatro. Pueden ser,

  1. Inicio modo: para obtener los datos meteorológicos y visualizarlos. Así como percibir el entorno.
  2. Modo set timer – establecer temporizadores para usted
  3. Modo de programar la alarma – establecer alarmas para que usted
  4. Panel de control – cuando tu no en cualquiera de los modos, prefiere podría quedarse en el tablero de instrumentos.

A continuación, vamos a hablar sobre el sketch principal 

Paso 9: El código principal

El siguiente es el código principal.

Para descargar el código, haga clic aquí.

LiquidCrystal lcd(16, 5, 4, 0, 2, 14);
#define rightButton 13
#define centerButton 15
#define leftButton 12
#define buzz 3
int page = 1;
byte leftArrow[8]
{ B00000,
 B00010,
 B00110,
 B01110,
 B11110,
 B01110,
 B00110,
 B00010
};
byte rightArrow[8]{
 B00000,
 B01000,
 B01100,
 B01110,
 B01111,
 B01110,
 B01100,
 B01000
};
byte line[8]
 { B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110
};
String result;
char servername[]="api.openweathermap.org";
String APIKEY = "Your Api key";
String CityID = "Your city ID";</p><p>String Description;<br>String Place;
float Temperature;
float Humidity;
float w;
WiFiClient client;
dht DHT;#define pin 1
int set=1; // for configuring the alarm
int a, b, c; // used to denote the hour, minute and second while setting an alarm</p>
char username[] = "MQTT_username";<br>char password[] = "MQTT_password";
char clientID[] = "Client ID";

void setup() {
 // put your setup code here, to run once:
 Serial.begin(9600);
 WiFi.begin("ssid", "password");
 lcd.print("Weather box");
 delay(2000);
 lcd.clear();
 if (WiFi.status() == WL_CONNECTED){
 Cayenne.begin(username, password, clientID);
 lcd.print("Connected!");
 delay(3000);
 lcd.clear();
 Serial.println(WiFi.localIP());
 } else {
 lcd.print("Not conn");
 delay(3500);
 }
 lcd.clear();
 lcd.begin(16, 2);
 lcd.createChar(0, leftArrow);
 lcd.createChar(1, rightArrow);
 lcd.createChar(3, line);
 
 pinMode(rightButton, INPUT);
 pinMode(centerButton, INPUT);
 pinMode(leftButton, INPUT);
 pinMode(buzz, OUTPUT);
 digitalWrite(buzz, LOW);
 
 setTime(15, 12, 50, 25, 5, 17);
 delay(1000);
}
int val = 1;
int x,y; //for setting timer minutes and seconds
int trig; //for coniguring the timer
int counter = 0;
void loop() {
 // put your main code here, to run repeatedly:
 while(val == 1){
 if (digitalRead(leftButton)==HIGH)
 { val = 0;}
 lcd.clear();
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 lcd.write(byte(3));
 lcd.print("WiFi:");
 if (WiFi.status() == WL_CONNECTED){
 lcd.print("conn"); } 
 else {
 lcd.print("Nconn");} 
 lcd.setCursor(0, 1);
 lcd.write(byte(0));
 lcd.print("Menu");
 lcd.write(byte(3));
 
 if (digitalRead(centerButton)){
 DHT.read11(pin);
 lcd.print("T:");
 int a = DHT.temperature; //converting float to int
 lcd.print(a);
 int b = DHT.humidity; // converting float to int
 lcd.print(" H:");
 lcd.print(b);
 delay(3000);
 }else {
 date();
 }
 counter++;
 if (counter == 60){
 if (WiFi.status()==WL_CONNECTED){
 Cayenne.loop(); 
 DHT.read11(pin); 
 Cayenne.virtualWrite(1, DHT.temperature);
 Cayenne.virtualWrite(2, DHT.humidity); 
 } 
 counter = 0;
 }
 delay(50);
 }
 while (val != 1){
 delay(200);
 pageDisplay();
 if (digitalRead(rightButton)){
 if (page == 4){
 page = page;
 } else {
 page++;
 }
 pageDisplay();
 
 } else if (digitalRead(leftButton)){
 if (page == 1){
 page = page;
 } else {
 page--;
 }
 pageDisplay();
 
 } else if (digitalRead(centerButton)== HIGH){
 decMaker();
 }
 }
}
void pageDisplay()
{ switch(page){
 case 1:
 lcd.clear();
 lcd.setCursor(6, 0);
 lcd.print("Home");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 2:
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Set Timer");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 3: 
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Set Alarm");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 4:
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Dash Board");
 break;
 default:
 lcd.clear();
 lcd.print("Error 002");
 break;
 }
}
void date(){
 lcd.print(day());
 lcd.print(" ");
 int a = month();
 switch(a){
 case 1:
 lcd.print("Jan");
 break;
 case 2:
 lcd.print("Feb");
 break;
 case 3:
 lcd.print("Mar");
 break;
 case 4:
 lcd.print("Apr");
 break;
 case 5:
 lcd.print("May");
 break;
 case 6:
 lcd.print("Jun");
 break;
 case 7:
 lcd.print("Jul");
 break;
 case 8:
 lcd.print("Aug");
 break;
 case 9: 
 lcd.print("Sep");
 break;
 case 10:
 lcd.print("Oct");
 break;
 case 11:
 lcd.print("Nov");
 break;
 case 12:
 lcd.print("Dec");
 break;
 default:
 lcd.print("005");
 }
 if (day()<10){
 lcd.print(" ");
 }
 lcd.print(year());
 }
void decMaker(){
 switch(page){
 case 1:
 lcd.clear();
 lcd.print(". . .");
 weatherData(); 
 lcd.clear();
 while (digitalRead(leftButton) == LOW){
 weatherData();
 digitalRead(leftButton);
 lcd.setCursor(6, 0);
 lcd.print("IST:");
 lcd.setCursor(5, 1);
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 delay(3000);
 lcd.clear();
 lcd.print("Wthr in ");
 lcd.print(Place);
 lcd.setCursor(0, 1);
 lcd.print("T:");
 lcd.print(Temperature);
 lcd.setCursor(9, 1);
 lcd.print("H:");
 lcd.print(Humidity);
 delay(3000);
 lcd.clear();
 digitalRead(leftButton);
 lcd.print("Wind: ");
 lcd.print(w);
 lcd.print("kmph");
 lcd.setCursor(0, 1);
 lcd.print(Description);
 delay(2000);
 lcd.clear();
 DHT.read11(pin);
 lcd.print("Room: ");
 lcd.setCursor(0, 1);
 lcd.print("T:");
 lcd.print(DHT.temperature);
 lcd.setCursor(9, 1);
 lcd.print("H:");
 lcd.print(DHT.humidity);
 delay(2000);
 lcd.clear();
 }
 lcd.begin(16, 2); // In my case the lcd doesn't work without this. But don't know why.
 break;
 case 2:
 setTimer();
 break;
 case 3:
 setAlarm();
 Serial.print("THREE");
 lcd.begin(16, 2);
 break;
 case 4:
 Serial.print("FOUR");
 val = 1;
 break;
 default:
 Serial.print("not a valid entry");
 lcd.clear();
 lcd.print("error 001");
 break;
 }
}
void weatherData()
{ if (client.connect(servername, 80)) 
{ //starts client connection, checks for connection
 client.println("GET /data/2.5/weather?id="+CityID+"&units=metric&APPID="+APIKEY);
 Serial.println("Server is accessable");
 client.println();
 } 
 else {
 Serial.println("connection failed"); //error message if no client connect
 Serial.println();
 }
 result = "";
 while (client.available()) { //connected or data available
 char c = client.read(); //gets byte from ethernet buffer
 result = result+c;
 }
 result.replace("[", " ");
 result.replace("]", " ");
 client.stop(); //stop client
 Serial.println("Recieved");
 
 StaticJsonBuffer<1024> jbuff;
 JsonObject &root = jbuff.parseObject(result);
 if (!root.success())
 {
 Serial.println("parseObject() failed");
 }
String location = root["name"];
 float temperature = root["main"]["temp"];
 float humidity = root["main"]["humidity"];
 String description = root["weather"]["description"];
 float wind = root["wind"]["speed"];
Place = location;
 Temperature = temperature;
 Humidity = humidity;
 w = wind * 3.6;
 Description = description;
}
void alarm()
{ Serial.println("Alarm activated");
 lcd.clear();
 lcd.print("Wake up, Lazy");
 for (int i = 0; i <= 10; i++){
 digitalWrite(buzz, HIGH);
 delay(80);
 digitalWrite(buzz, LOW);
 delay(80);
 digitalWrite(buzz, HIGH);
 delay(80);
 digitalWrite(buzz, LOW);
 delay(800);
 }
 digitalWrite(buzz, LOW);
 set = 0;
}
void setAlarm(){
 set = 1;
 int pos = 1;
 a, b, c = 0;
 repeat:
 //timeDisplay();
 lcd.clear(); 
 lcd.setCursor(0, 0); 
 lcd.print(a); 
 lcd.print(":");
 lcd.print(b); 
 lcd.print(":");
 lcd.print(c); 
 lcd.setCursor(0, 1);
 if (pos == 1){ lcd.print("hours");}
 else if (pos == 2){ lcd.print("minutes");}
 else if (pos == 3){lcd.print("seconds");}
 delay(200);
 if (digitalRead(leftButton)){//leftButton
 if (pos == 3)
 {pos = 1;}
 else 
 {pos++;}
 } else if (digitalRead(rightButton)){
 switch (pos){
 case 1:
 if (a == 23){ a = 0;}
 else {a++;}
 break;
 case 2:
 if (b == 59){ b = 0;}
 else {b++;}
 break;
 case 3:
 if (c == 59){ c = 0;}
 else {c++;}
 break;
 }
 } else if (digitalRead(centerButton)){
 confirmAlarm();
 } 
 if (set == 0){
 goto endIt;
 }
 goto repeat;
 endIt:
 Serial.println("Alarm executed successfully");
}

void confirmAlarm()
{ lcd.clear();
 Alarm.alarmOnce(a, b, c, alarm);
 up:
 lcd.setCursor(1, 0);
 lcd.print("Alarm Running");
 lcd.setCursor(3, 1);
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 lcd.print(":");
 lcd.print(second());
 Alarm.delay(200);
 delay(1);
 lcd.clear();
 //timeDisplay();
 Serial.println("...");
 if (set == 0||digitalRead(centerButton)){goto down;}
 goto up;
 down:
 set = 0;
}
void setTimer(){
 int cur = 1;
 x, y = 0;
 trig = 1;
 roof:
 lcd.clear();
 lcd.setCursor(2, 0);
 lcd.print("minutes: ");
 lcd.print(x);
 lcd.setCursor(2, 1);
 lcd.print("seconds: ");
 lcd.print(y);
 if (cur == true){lcd.setCursor(0, 0); lcd.write(byte(1));}
 else {lcd.setCursor(0, 1); lcd.write(byte(1));}
 delay(200);
 if (digitalRead(rightButton)){
 switch(cur){
 case 1:
 if (x == 20){x=0;}
 else {x++;}
 break;
 case 2:
 if (y == 59){y = 0;}
 else {y++;}
 break;
 default: 
 lcd.clear();
 lcd.print("ERROR 003");
 }
 } else if (digitalRead(leftButton)){
 if (cur == 2){cur = 1;}
 else {cur++;}
 }
 if (digitalRead(centerButton)){
 confirmTimer();
 } else {
 goto roof;
 }
 trig = 0;
 lcd.setCursor(0, 0);
 lcd.print("Timer successful");
 delay(2000);
 lcd.clear();
}</p><p>void confirmTimer(){<br> int z;
 z = x*60 + y;
 Alarm.timerOnce(z, timer);
 lcd.clear();
 
 sky:
 Serial.println(".");
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("CountDown Timer");
 lcd.setCursor(7, 1);
 lcd.print(z);
 z--;
 Alarm.delay(999);
 delay(1);
 if (trig == 0||digitalRead(centerButton)==HIGH){goto ground;}
 goto sky;
 ground:
 trig = 0;
 lcd.clear();
}
void timer(){
 Serial.println("Boom, timer is on!! :)");
 lcd.clear();
 lcd.setCursor(3, 0);
 lcd.print("Time's Up!");
 for (int i = 0; i<=10; i++){
 for (int j = 0; j<=3; j++){
 digitalWrite(buzz, HIGH);
 delay(70);
 digitalWrite(buzz, LOW);
 delay(70);
 }
 delay(700);
 }
 trig = 0;
}

Mas información en http://www.instructables.com/id/IoT-Weather-Box-with-Custom-Alarms-Timers/

Anuncios

Cómo instalar Debian Jessi (Linux) en una Orange Pi PC


Desgraciadamente la imagen ofrecida  por parte del fabricante en su site original   http://www.orangepi.org/downloadresources/  , padece de algunas carencias  sobre todo para instalar sw especifico como el agente Cayenne  o por ejemplo Node.js

Buscando   satisfacer  la necesidad  de una imagen linux estable , tenemos una nueva distribución de Debian Jessie ,la cual destaca de forma sobresaliente por encima del resto  de imágenes “oficiales ” que creemos merece probar.

¿Qué necesitamos?

No se diferencia respecto a otras distribuciones. Como orientación necesitaremos los siguientes elementos:

  • Orange Pi PC (obviamente)
  • Samsung 16GB micro SD EVO UHS-I Clase 10 48MB / s
  • Jacer’s Debian Jessie imagen, descargada del  enlace foro topic
  • Win32DiskImager

Pasos para la instalación

El primer paso es descargar la imagen de Debian Jessie de esta url :https://mega.nz/#F!y0Y0SZhJ!RD5an8l9qEo_RppBsxxbrQ!y9ZDECra

Extraeremos el fichero  ‘Debian8_jacer_2.rar’

El resultado de descomprimir terminara con  tres  archivos:

  •  ‘Debian8_jacer_2.img’
  •  ‘Script.bin and uIimage fora OPI-2 OPI-2 MINI.zip ‘. 
  •  ‘Script.bin and uIimage fora OPI-PC_extract to  FAT Partition.zip ‘.

 

dmega

 

Para escribir el archivo de imagen en nuestra tarjeta SD necesitamos una herramienta. Para Windows  lo ideal es usar  Win32DiskImager que es una herramienta para escribir archivos img a su tarjeta sd.

Inicie Win32DiskImager, seleccione ‘Debian8_jacer_2.img’ y asegúrese de que el dispositivo correcto está seleccionado (en el ejemplo   la F 🙂 y  pulse Write para escribir la imagen en la tarjeta SD

Como orientación ,escribir el archivo imagen una tarjeta SD suele tardar unos 3 minutos, con una velocidad de escritura de unos 13 ~ 15 MB / s.

 

win32disk

Estamos casi listos para arrancar nuestro Orange Pi, pero primero extraer ‘uImage’ del archivo (2) a la tarjeta SD.

Vaya a su tarjeta SD y cambie el nombre de ‘script.bin.OPI-PC_1080p60_hdmi_cpu1.2G_gpio30pin’ a ‘script.bin’ (se utiliza la versión 1.2G   pues hay muchas  quejas sobre el sobrecalentamiento de Orange Pi y no es  necesario sobrecalentar  la CPU si no necesita tanto procesamiento)

Ya estamos listos para empezar: extraiga ordenadamente la sd del lector de su pc e insertarla en su Orange Pi.

Conecte un monitor con HDMI al Pi y un ratón / teclado USB básicos. También se puede conectar al Pi mediante SSH, aunque en ambos casos puede iniciar sesión con la combinación: orangepi / orangepi.

Ya puede conectar la alimentación , donde destacar , que en el caso de Orange Pi no sirve por el micro-usb sino que habrá que hacerlo por el conector especial de 5V DC  que lleva

No se deje engañar por el led rojo, pues todo el mundo sabe que el rojo es un color positivo? En el Orange Pi el led rojo significa que encontró una tarjeta SD con un cargador de arranque correcto. El diagnóstico en el Orange Pi no son muy buenos :, sólo tenemos  la esperanza de un led rojo encendido  pues es básicamente la única información que obtendrá.

Redimensionar la partición

Después del arranque, inicie sesión con el usuario orangepi e inicie una sesión de terminal. Recibirá un mensaje de advertencia sobre el tamaño de su partición. Si desea cambiar el tamaño de la partición al tamaño máximo disponible, puede ejecutar ‘sudo fs_resize‘.

Después de cambiar el tamaño debe reiniciar primero.

Redimensionamiento

Script de instalación de Scargill

Existe un impresionante script de instalación hecho por Peter Scargill que automatiza la instalación de nodo-RED, Mosquitto, Apache, SQL-Lite y algunas otras herramientas (se puede elegir lo que desea instalar). La instalación de todo puede tomar unos 50 minutos , probablemente un poco lento debido a la frecuencia máxima de la CPU de 1.2Ghz.

El scrips deshabilita la interfaz gráfica de usuario,asi que  si desea conservar la interfaz gráfica de usuario, puede cambiar el script de sudo systemctl set-default graphical.target ( línea de sudo systemctl set-default graphical.target 417 o ejecutar sudo systemctl set-default graphical.target y sudo systemctl set-default graphical.target .

Si desea acceder fácilmente a los datos de su Pi, puede cambiar la línea de script 187 para habilitar los recursos compartidos de red.

Con todo este sw instalado  la temperatura de la CPU suele ser de alrededor de 45 ° C, que es de unos 25 ° C por encima de la temperatura ambiente.

Resumen del software en ejecución

  • SSH deamon
  • Servidor FTP – ftp: // orangepi: contraseña @ orangepi
  • Apache – http: // orangepi
  • Phpliteadmin – http: // orangepi / phpliteadmin
  • Webmin (muy útil herramienta de administración del sistema) – http: // orangepi: 10000
  • Nodo-RED – http: // orangepi: 1880
  • Mosquitto MQTT corredor – http: // orangepi: 1883

 

Acceso web de Sensores Analogicos para Raspberry Pi (parte 2)


En un post anterior veíamos algunas de las posibilidades de  conexión de sensores digitales  a nuestra Raspberry Pi como puede ser añadir sensores I2C con el CI DS1820 , sensores de Co2 basados en el Mq4, sensores genéricos,sensores de de presión con el BMP180,sensores de temperatura basados en el TMP102, sensores de proximidad basados en el VCNL 4000o  o los sensores de luminosidad basados en el  TSL2561.

Como todos sabemos  existen también una cantidad muy alta de sensores cuya salida no es digital , lo cual en principio no se podrian conectar directamente a nuestra Raspberry, pero esto no es exactamente asi, porque si podemos conectarlos por medio de convertidores A/D y D/A  y otros circuitos como vamos a ver  (y empezamos a  ver en un post  posterior ).

Retomamos nuevamente el mundo analógico y la Raspberry Pi  con mas ejemplos :

 

MCP23017

MCP23017

 Este CI  de coste  contenido  permite agregar 16 salidas a una placa  conectándola al puerto I2C. La conexión es sencilla como vamos a  ver  a continuación

Use el siguiente diagrama para conectar el MCP23017 IO expansor.

Paso 1

Desde el  Pi para alimentar VDD (pin 9) en el MCP23017.
MCP23017

Paso 2

Conectar tierra  de Pi al VSS (pin 10) en el MCP23017.
MCP23017

Paso 3

Conectar los pines SCL del MCP23017 (pin 12) a la Pi.
MCP23017

Paso 4

Conecte las clavijas SDA de la MCP23017 (pin 13) a la Pi.
MCP23017

Paso 5

Conectar toma de tierra a los pines de dirección (pin 15, 16, 17) en el MCP23017. Esto le dará el expansor de una dirección predeterminada de 0 x 20.
MCP23017

Paso 6

Para el Reset (pin 18) en el MCP23017 . Debe conectar  el pin de Reset  para el funcionamiento normal.
MCP23017

Paso 7

¡Listo! Ahora puede Agregar el MCP23017 en el panel de Caynne, con dirección por defecto de 0 x 20.

MCP23009

MCP23009

 El MCP23009-E / SS es un expansor de E / S de 8 bits con salidas de drenaje abierto. Consiste en múltiples registros de configuración de 8 bits para la selección de entrada, salida y polaridad. El maestro del sistema puede habilitar E / S como entradas o salidas escribiendo los bits de configuración de E / S. Los datos de cada entrada o salida se guardan en el registro de entrada o salida correspondiente. La polaridad del registro del puerto de entrada puede invertirse con el registro de inversión de polaridad. Todos los registros pueden ser leídos por el maestro del sistema. El registro de captura de interrupción captura los valores de puerto en el momento de la interrupción, ahorrando así la condición que causó la interrupción. El restablecimiento de encendido (POR) ajusta los registros a sus valores predeterminados e inicializa la máquina de estado del dispositivo. El pin de dirección de hardware se utiliza para determinar la dirección del dispositivo.

Use el siguiente diagrama para conectar su MCP23009 IO expansor.

Paso 1

Desde el pastel de Pi para alimentar VDD (pin 1) en el MCP23009.
MCP23009

Paso 2

Conectar la tierra de la Pi a VSS (pin 18) en el MCP23009.
MCP23009

Paso 3

Conectar los pines SCL de la MCP23009 (pin 3) y la Pi.
MCP23009

Paso 4

Conecte las clavijas SDA de la MCP23009 (pin 4) y la  Pi.
MCP23009

Paso 5

Conectar toma de tierra al pin de dirección (pin 5) en el MCP23009. Esto le dará el expansor de una dirección predeterminada de 0 x 20.
MCP23009

Paso 6

Alimentar el reset (pin 6) en el MCP23009. Conectar  Reset es necesario para el funcionamiento normal.
MCP23009

Paso 7

¡Listo! Ahora puede Agregar el MCP23009 en el panel de cayenne, con dirección por defecto de 0 x 20.

MCP23008

MCP23008

Es un circuito muy similar al anterior que  nso proporciona 8 entradas  o salidas  binarias a traves del SDA

Use el siguiente diagrama para conectar su MCP23008 IO expansor.

Paso 1

Conecte las líneas de energía, conectando a VDD (pin 18) en el MCP23008.
MCP23008

Paso 2

Conecte las líneas de tierra, conexión de tierra al VSS (pin 9) en el MCP23008.
MCP23008

Paso 3

Conecte las clavijas SDA de la MCP23008 (pin 2) y la  Pi.
MCP23008

Paso 4

Conectar los pines SCL de la MCP23008 (pin 1) y la  Pi.
MCP23008

Paso 5

Conectar toma de tierra a los pines de dirección (pines 3, 4, 5) en el MCP23008. Esto le dará el expansor de una dirección predeterminada de 0 x 20.
MCP23008

Paso 6

Alimentar el reset (pin 6) en el MCP23008. Conectar el pin Reset es necesario para el funcionamiento normal.
MCP23008

Paso 7

¡Listo! Ahora puede Agregar el MCP23008 en el  panel de control de Cayenne, con dirección por defecto de 0 x 20.

DS2408

ds2408

 El DS2408 es un chip de E / S 1-Wire® programable de 8 canales. Las salidas PIO se configuran como drenaje abierto y proporcionan una resistencia de 100Ω máx. Un protocolo de comunicación de acceso de canal PIO robusto garantiza que los cambios de configuración de salida PIO se produzcan sin errores. Se puede utilizar una salida estroboscópica válida para datos para bloquear estados lógicos PIO en circuitería externa tal como un convertidor D / A (DAC) o un bus de datos de microcontrolador.

Un par de notas antes de comenzar:

  • Para aprovechar las ventajas de la detección automática de cayena de dispositivos 1-wire, conecte a 4 GPIO.
  • Asegúrese de que Raspberry Pi está apagado al conectar los cables.
  • Cuando utilice un cable de cinta GPIO, asegúrese de que está conectado el cable (es un color diferente que los otros) en la esquina de la Raspberry Pi y la parte superior de tu pastel de Pi.
  • El diagrama proporcionado es sólo un ejemplo de cómo conectar el sensor. Hay muchas maneras para conectar sensores y extensiones, así que trate de lo que funciona mejor para usted!
  • Algunos placas de prototipos (usados en los diagramas a continuación) tienen una  linea de alimentación  que se separa en el medio. Si este es el caso, asegúrese de que sus sensores están conectados en la misma mitad de la placa como el Pi.

Use el siguiente diagrama para conectar su DS2408 “1-Wire” IO expansor.

Paso 1

Desde el  Pi alimentar el DS2408 VCC (pin 3). Asegúrese de que añade  una resistencia de pull-up entre la potencia (pin 3) y pines de datos (pin 4) en el DS2408.
DS2408

Paso 2

Conectar la tierra del Pi a la tierra de DS2408 (pin 5).
DS2408

Paso 3

Conectar la clavija de control DS2408 en GPIO Pin 4 en el Pi. Conexión a 4 GPIO permite la detección automática .
DS2408

Paso 4

¡Listo! Encienda su frambuesa Pi y el agente Cayenne automáticamente detectará el expansor DS2408 y agregara este a su panel de control.

MCP23S09

MCP23S09

 El MCP23S09-E / P es un expansor de E / S de 8 bits con salidas de drenaje abierto. Consiste en múltiples registros de configuración de 8 bits para la selección de entrada, salida y polaridad. El maestro del sistema puede habilitar E / S como entradas o salidas escribiendo los bits de configuración de E / S. Los datos de cada entrada o salida se guardan en el registro de entrada o salida correspondiente. La polaridad del registro del puerto de entrada puede invertirse con el registro de inversión de polaridad. Todos los registros pueden ser leídos por el maestro del sistema. El registro de captura de interrupción captura los valores de puerto en el momento de la interrupción, ahorrando así la condición que causó la interrupción. El restablecimiento de encendido (POR) ajusta los registros a sus valores por defecto e inicializa la máquina de estado del dispositivo. El pin de dirección de hardware se utiliza para determinar la dirección del dispositivo.

Use el siguiente diagrama para conectar su Convertidor A/D de MCP23S09 con interfaz de SPI.

Paso 1

Alimentar desde el  Pi al MCP23S09 pin 1 (VDD) y pin 7 (RESET).
MCP23S09

Paso 2

Conectar la tierra del  Pi al MCP23S09 pin 18 (VSS).
MCP23S09

Paso 3

Conecte la clavija de entrada MCP23S09 chip select (CS) de 3 a uno de los pines del chip select del Pi  CE0 en este ejemplo.
MCP23S09

Paso 4

Conectar patillas SCLK del  Pi y el MCP23S09 4 (SCK).
MCP23S09

Paso 5

Conectar patillas MOSI del Pi y el MCP23S09 5 (SI).
MCP23S09

Paso 6

Conectar patillas MISO del Pi y el MCP23S09 6 (SO).
MCP23S09

Paso 7

¡Listo! Ahora puede Agregar el convertidor de MCP23S09 a tu panel de control usando el chip-select 0.

MCP23S08

MCP23S08

 El MCP23S08 es un “8-Bit I / O Expander con el interfaz de SPI” IC de Microchip . Este dispositivo también está disponible en variaciones I2C (MCP23008) y 16 bits (MCP23x17),

Use el siguiente diagrama para conectar su convertidor A/D de MCP23S08 con interfaz de SPI.

Paso 1

Alimentar desde el  Pi al MCP23S08 pin 18 (VDD) y la clavija 6 (RESET).
MCP23S08

Paso 2

Conectar la tierra del pastel de Pi al MCP23S08 pin 9 (VSS).
MCP23S08

Paso 3

Conectar patillas SCLK del Pi y el MCP23S08 pin 1 (SCK).
MCP23S08

Paso 4

Conectar patillas MOSI del  Pi y el MCP23S08 pin 2 (SI).
MCP23S08

Paso 5

Conectar patillas MISO del  Pi y el MCP23S08 pin 3 (SO).
MCP23S08

Paso 6

Conecte los dos de los pines de dirección de MCP23S08 (pines 4, 5) a tierra. Esto resultará en una dirección predeterminada de 0 x 20.
MCP23S08

Paso 7

Conecte la clavija de entrada MCP23S08 chip select (CS) pin 7 a uno de los pines del chip select Pi , CE0 en este ejemplo.
MCP23S08

Paso 8

¡Listo! Ahora puede Agregar el convertidor de MCP23S08 a su panel de control  de Cayenne usando el chip-select (pin  0).

MCP23S18

MCP23S18

Hablamos de un chip del fabricante MICROCHIP  que es un  Expansor de E/S de 16bit funcionando a  10 MHz con interfaz  SPI

Use el siguiente diagrama para conectar su Convertidor A/D de MCP23S18 con interfaz de SPI.

Paso 1

Alimentar de la Pi  a RESET (pin 16) y VDD (pin 11) en el MCP23S18.
MCP23S18

Paso 2

Conectar la tierra del  Pi a VSS (pin 1) en el MCP23S18.
MCP23S18

Paso 3

Conectar patillas SCLK del  Pi y el MCP23S18 13 (SCK).
MCP23S18

Paso 4

Conectar patillas MOSI del  Pi y el MCP23S18 14 (SI).
MCP23S18

Paso 5

Conecte la clavija de entrada MCP23S18 chip select (CS) del pin  12 a uno de los pines del chip select Pi Zapatero, CE(pin 0 )en este ejemplo.
MCP23S18

Paso 6

Conectar patillas MISO del  Pi y el MCP23S18 pin 15 (SO).
MCP23S18

Paso 7

¡Listo! Ahora puede Agregar el convertidor de MCP23S18 a tu panel de control de Cayenee usando el chip-select 0.

MCP23S17

MCP23S17

Hablamos de un chip del fabricante MICROCHIP  que es un  Expansor de E/S de 16bit funcionando a  10 MHz con interfaz  SPI

 El MCP23s08 y MCP23s17 tiene 3 bits de selección de direcciones por lo que en teoría se puede conectar hasta 8 MCP23s08 y MCP23S17 en la misma señal de selección SPI que le da una capacidad GPIO de una señal adicional de 128 pines por SPI seleccionar cuando se utilizan estos dispositivos. (O el doble que si utiliza 8 más en la 2 ª SPI seleccionar)

Use el siguiente diagrama para conectar su Convertidor A/D de MCP23S17 con interfaz de SPI.

Paso 1

Desde el  Pi alimentar VDD (pin 9) en el MCP23S17.
MCP23S17

Paso 2

Conectar la tierra del  Pi a VSS (pin 10) en el MCP23S17.
MCP23S17

Paso 3

Conecte la clavija de entrada MCP23S17 chip select (CS) del pin  11 a uno de los pines del chip select Pi Zapatero, CE0 en este ejemplo.
MCP23S17

Paso 4

Conectar patillas SCLK del  Pi y el pin 12 del MCP23S17  (SCK).
MCP23S17

Paso 5

Conectar patillas MOSI del  Pi y el  pin 13 del MCP23S17 (SI).
MCP23S17

Paso 6

Conectar patillas MISO del  Pi y el pin  14 del MCP23S17  (SO).
MCP23S17

Paso 7

Conectar toma de tierra a los pines de dirección de MCP23S17 (15, 16, 17). Esto le dará el expansor de una dirección predeterminada de 0 x 20.
MCP23S17

Paso 8

Alimentar al pin de RESET (pin 18) en el MCP23S17. Conectar  el pin de Reset es necesario para el funcionamiento normal.
MCP23S17

Paso 9

¡Listo! Ahora puede Agregar el convertidor de MCP23S17 a su panel de control usando el chip-select 0.

 

Por cierto , para  mas información sobre como configurar el panel de control de Cayenne  , puede encontrar mas información en ingles  aqui 

Alarma inteligente de Humos


Gracias al sw de Cayenne es posible construir equipos muy avanzados sin necesidad de programar nada con un aspecto gratamente muy profesional. Ademas, si sopesamos la gran potencia de calculo de la Raspberrry Pi, junto sus grandes posibilidades de expansión y conectividad ,obtenemos una gran combinación de hardware y software, las cual sin duda nos va a permitir realizar proyectos realmente interesantes .

Sabemos la gravedad que puede suponer un incendio, por lo que es sumamente importante disponer de medidas en los edificios de detección eficaces para protegerlos contra la acción del fuego.

 

En este post  vamos a intentar abordar el grave problema de los incendios desde una perspectiva completamente diferente usando para ello una Raspberry pi 2, un hardware especifico consistente en un DS18B20 , un detector de  gas y un buzzer  junto con  la plataforma  Cayenne.

Tradicionalmente los detectores de incendios difieren en función de los principio de activación siendo los mas habituales los de Tipo Óptico basado en células fotoeléctricas ,las cuales, al oscurecerse por el humo o iluminarse por reflexión de luz en las partículas del humo, disparando una sirena o alarma.Asimismo existen detectores de calor

La solución que se propone se basa en detectores ter micos al ser los mas precisos ,al que se ha añadido para aumentar la fiabilidad y mejorar la flexibilidad un doble sensor permitiendo de esta manera poder modificar los parámetros de disparo con un enorme facilidad como vamos a ver aparte de poder transmitir la información en múltiples formatos y formas hasta nunca vistas.

COMPONENTES NECESARIOS

Para montar la solución propuesta necesitamos los siguientes elementos:

Otros

  • Cable de red
  • Caja de plástico para contener el conjunto
  • Cable de cinta ( se puede reusar un cable de cinta procedente de un interfaz ide de disco)

La solución propuesta se basa en usar una Raspberry Pi y un pequeño hardware de control que conectaremos a los puertos de la GPIO,pero, antes de empezar con el hardware adicional, deberemos ,si aun no lo ha creado todavía , generar una imagen de Raspbian para proporcionar un sistema operativo a la Raspberry Pi.Raspbian trae pre-instalado software muy diverso para la educación, programación y uso general, contando además con Python, Scratch, Sonic Pi y Java

Para instalar Raspbian se puede instalar con NOOBS o descargando la imagen del SO desde la url oficial. y copiando a la SD con el Win32DiskImager desde la página del proyecto en SourceForge

Prueba de acceso y creacion de cuenta

 Prueba de acceso y creacion de cuenta

Creada la imagen del SO, ahora debemos insertar la micro-SD recién creada en su Raspberry Pi en el adaptador de micro-sd que tiene en un lateral . También deberá conectar un monitor por el conector hdmi, un teclado y ratón en los conectores USB, un cable ethernet al router y finalmente conectar la alimentación de 5V DC para comprobar que la Raspberry Pi arranca con la nueva imagen

Para comenzar la configuración de su Raspberry, lo primero es crear una cuenta gratuita en el portal cayenne-mydevices.com que servirá tanto para entrar en la consola web como para validarnos en la aplicación móvil. Para ello, vaya a la siguiente url http://www.cayenne-mydevices.com/ e introduzca lo siguintes datos:

  • Nombre,
  • Dirección de correo elctronica
  • Una clave de acceso que utilizara para validarse.

NOTA: las credenciales que escriba en este apartado le servirán tanto para acceder via web como por vía de la aplicación móvil

Instalación del agente

Una vez registrado , solamente tenemos que elegir la plataforma para avanzar en el asistente. Obviamente seleccionamos en nuestro caso Raspberry Pi pues no se distingue entre ninguna de las versiones ( ya que en todo caso en todas deben tener instalado Raspbian).

Para avanzar en el asistente deberemos tener instalado Raspbian en nuestra Raspberry Pi que instalamos en pasos anteriores .

Concluido el asistente , lo siguiente es instalar la aplicación móvil , que esta disponible tanto para IOS como Android. En caso de Android este es el enlace para su descarga en Google Play.

Es muy interesante destacar que desde la aplicación para el smartphone se puede automáticamente localizar e instalar el software myDevices Cayenne en su Raspberry Pi, para lo cual ambos ( smarphone y Raspberry Pi ) han de estar conectados a la misma red,por ejemplo la Raspberry Pi al router con un cable ethernet y su smartphone a la wifi de su hogar ( no funcionara si esta conectada por 3G o 4G) .

Una vez instalada la app , cuando hayamos introducido nuestras credenciales , si está la Raspberry en la misma red y no tiene instalado el agente, se instalara éste automáticamente .

Hay otra opción de instalar myDevices Cayenne en su Raspberry Pi, usando el Terminal en su Pi o bien por SSH.Tan sólo hay que ejecutar los dos siguientes comandos :

NOTA:la instalación del agente en su Raspberry Pi por comando, no es necesaria .Solo se cita aquí en caso de problemas en el despliegue automático desde la aplicacion movil.

Instalación del sensor temperatura

Instalación del sensor temperatura
582e053f937ddb777c000309.jpeg

Para poder hacer de nuestra Raspberry Pi un detector eficaz de incendios necesitamos añadir sensores que nos permitan medir variables físicas del exterior, para en consecuencia actuar posteriormente

En primer lugar se ha optado por utilizar el sensor DS18B20 creado por Dallas Semiconductor  . Se trata de un termómetro digital, con una precisión que varía según el modelo pero que en todo caso es un componente muy usado en muchos proyectos de registro de datos y control de temperatura.Existen tres modelos, el DS1820, el DS18S20 y el DS18B20 pero sus principales diferencias se observan en la exactitud de lectura, en la temperatura, y el tiempo de conversión que se le debe dar al sensor para que realice esta acción.El DS1820, tiene, además del número de serie y de la interfaz de un conductor, un circuito medidor de temperatura y dos registros que pueden emplearse como alarmas de máxima y de mínima temperatura.

CONEXIÓN DEL DS18B20

El DS18B20 envía  al bus I2C la información de la temperatura exterior en grados C con precisión 9-12 bits, -55C a 125C (+/- 0.5C).a.

Para aprovechar las ventajas de la detección automática de Cayenne de sensores 1-wire, conectaremos este al puerto 4 GPIO (PIN 7) dado que el DS1820 transmite vía protocolo serie 1-Wire

Asimismo es importante conectar una resistencia de 4k7 de pull-up en la línea de datos ( es decir entre los pines 2 y 3 del DS18B20) .

La alimentación del sensor la tomaremos desde cualquiera de las dos conexiones de +5V de nuestra Raspberry (pines 2 o 4 ) y la conexión de masa por comodidad podemos tomarla del pin 9 de las Raspberry

¡Listo! Encienda su Raspeberry Pi y Cayenne automáticamente detectará el sensor DS18B20 y añadirá este a su panel de control

NOTA : Es importante reseñar que los dispositivos 1-Wire se identifican mediante un número (ID) único, razón por la que podríamos conectar varios en cascada, viajando la señal de todos ellos por la misma línea de datos necesitando una única resistencia de pull up para todo el montaje conectándose todos ellos en paralelo (respetando los pines obviamente). El software se encargará de “interrogar” al sensor/dispositivo adecuado.

Instalación de sensor de Co2

Instalación de sensor de Co2m4 bis.jpgIMG_20161115_233915[1].jpg

Para complementar nuestro detector se ha añadido un detector de gases basado en el circuito MQ4 .Este detector se puede montar un circuito con el sensor , o bien se puede adquirir con el sensor y el modulo de disparo con un led ya soldado, lo cual por su bajo coste  (menos de 2€ en Amazon  )es la opción más recomendada. Estos módulos permiten Dual-modo de señal de salida, es decir cuentan con dos salidas diferenciadas:

  • Salida analógica
  • Salida con sensibilidad de nivel TTL (la salida es a nivel alto si se detecta GLP, el gas, el alcohol, el hidrógeno y mas)

Estos módulos son de rápida a respuesta y recuperación ,cuentan con una buena estabilidad y larga vida siendo ideales para la detección de fugas de gas en casa o fabrica .Son ademas muy versátiles , pudiendo usarse para múltiples fines ,detectando con facilidad lo siguientes gases:

  • Gas combustible como el GLP
  • Butano
  • Metano
  • Alcohol
  • Propano
  • Hidrogeno
  • Humo
  • etc.

Algunas de las características del módulo:

  • Voltaje de funcionamiento: 5V DC
  • Rango de Detección: 300 a 10000 ppm
  • Salida TTL señal valida es baja
  • Tamaño: 32X22X27mm

CONEXIONES

Para conectar el  detector de gases a nuestra Raspberry Pi, optaremos por usar el puerto GPIO18 ( pin12) que conectaremos a la salida digital 2 del sensor ( marcado como OUT).

La alimentación del sensor la tomaremos desde cualquiera de las dos conexiones de +5V de nuestra Raspberry (pines 2 o 4 ) conectándo al pin 4 del sensor (marcado como +5v) y la conexión de masa por comodidad podemos tomarla del pin 9 de las Raspberry conectando este al pin1 del detector ( marcado como GND)

Respecto a Cayenne deberemos configurarlo como una entrada genérica como vamos a ver mas adelante.

PRUEBA DEL SENSOR

Para hacer una prueba rápida de que nuestro sensor es funcional :simplemente apuntar a unos cm del sensor con un bote de desodorante (no importa la marca), justo con un sólo disparo hacia el cuerpo del sensor. En ese momento debería encenderse el pequeño led que integra el sensor durante unos minutos para luego apagarse marcando de esta forma que realmente ha detectado el gas .

Ademas simultáneamente si podemos medir con un polímetro, veremos que el pin Out pasa a nivel alto , es decir pasa de 0V a unos 5V , volviendo a cero en cuanto se haya diluido el gas

 

IMG_20161115_234101[1].jpg

Zumbador y montaje final

Ya tenemos los dos sensores, así que aunque podemos intereactuar ante variaciones de las lecturas de los sensores enviando correos o enviando SMS’s (como vamos a ver en el siguiente paso),es muy interesante añadir también un aviso auditivo que podemos activar cuando decidamos.

Para los avisos acústicos, lo mas sencillo es usar un simple zumbador de 5Vque podemos conectar directamente a nuestra Raspberry Pi sin ningún circuito auxiliar.

La conexión del positivo del zumbador normalmente de color rojo , lo haremos al GPIO 17 ( pin 11 ) de nuestra Raspberry y la conexión de masa por comodidad podemos tomarla del pin 9 de las Raspberry conectando este al pin de masa del buzzer ( de color negro)

 

IMG_20161115_233943[1].jpgIMG_20161117_215957[1].jpg

 

Respecto a Cayenne deberemos configurarlo como un actuador genérico como vamos a ver mas adelante en el siguiente paso.

En cuanto a las conexiones dado las poquísimas conexiones de los dos sensores y el zumbador, lo mas sencillo ,a mi juicio, es usar un cable de cinta de 20+20 , que por ejemplo puede obtener de un viejo cable IDE de los usados para conectar antiguos discos duros cortándolo en la longitud que interese y conectando los cables a los sensores y al zumbador (observe que es muy importante respetar el orden de los pines del cable siendo el rojo el pin 1 y cuenta correlativamente).

El siguiente resumen indica todas las conexiones realizadas:

CABLE DE CINTA –> UTILIZACIÓN

  • pin9 (Gnd) –> pin1 DS1820,pin1 MQ4,
  • pin 7 (GPIO4)–> pin 2 DS1820 , resistencia 4k7
  • pin1 (+5V) –>pin 3 DS1820, resistencia 4k7, pin4 MQ4,cable rojo buzzer
  • pin 12(GPIO18)–> pin2 MQ4
  • pin11(GPIO17) –> cable negro buzzer

Zumbador y montaje final

 

 

 

Configuración Cayenne

 Montado el circuito y nuestra Rasberry corriendo con Rasbian y el agente Cayenne ,únicamente nos queda configurar el sensor de gas y el buzzzer así como las condiciones o eventos que harán que disparen los avisos

Del sensor DS1820 no hablamos precisamente porque al estar conectado al bus one wire , el agente Cayenne lo detectara automáticamente presentándolo directamente sobre el escritorio sin necesidad de ningún acción más.

ds18.png

CONFIGURACION SENSOR GAS

Dado que no existe un sensor de estas características en la consola de Cayenne, lo mas sencillo es configurarlo como entrada genérico del tipo Digital Input y subtipo SigitalSensor.

Si ha seguido el circuito propuesto, los valores propuestos que debería configurar son los siguientes

  • Widget Name: Digital Input
  • Widget: Graph
  • Numero de decimals:0

En el apartado “Device Settings” pondremos:

  • Select GPIO: Integrated GPIO
  • Select Channel: Channel 18
  • Invert logic :check activado

Obviamente añadiremos estos valores y pulsaremos sobre el boton “save” para hacer efectiva esta configuración

Configuracion Cayenne

CONFIGURACION ZUMBADOR
Dado que no existe un zumbador como tal en la consola de cayenne, lo mas sencillo es configurarlo como salida genérico del tipo RelaySwitch . Si ha seguido el circuito propuesto, los valores propuestos que debería configurar son los siguientes

  • Widget Name: Buzzer
  • Choose Widget: Button
  • Choose Icon: Light
  • Number de decimals:0

En el apartado “Device Settings” pondremos:

  • Select GPIO: Integrated GPIO
  • Select Channel: Channel 17
  • Invert logic :check deactivado

Obviamente añadiremos estos valores y pulsaremos sobre el boton “save” para hacer efectiva esta configuración

reke.png

TRIGGERS
Si ha seguido todos los pasos anteriores tendremos en la consola de Cayenne nuestra placa Rasberry Pi con la información en tiempo real de la temperatura o detección de gas e incluso un botón que nos permite activar o desactivar a voluntad el zumbador .

Ademas por si fuera poco gracias a la aplicación móvil , también podemos ver en esta en tiempo real lo que están captando los sensores que hemos instalado y por supuesto activar o desactivar si lo deseamos el zumbador..

Pero aunque el resultado es espectacular todavía nos queda una característica para que el dispositivo sea inteligente : el pode interaccionar ante los eventos de una forma lógica,lo cual lo haremos a través de lo triggers , los cuales nos permitirán desencadenar acciones ante cambios en las variables medidas por los sensores.

A la hora de definir triggers en Cayenne podemos hacerlo tantodesencadenado acciones como pueden ser enviar corres de notificaciones o envio de SMS’s a los destinatarios acordados o bien actuar sobre las salidas.

Para definir un disparador en myTriggers,pulsaremos “New Trigger” y nos presentara dos partes:

  • IF ; aqui arrastraemos el desecadenante, lo cual necesariamene siempre sera la lectura de un sensor ( en uestro caso el termometro o el detector de gas)
  • THEN: aqui definiremos lo que queremos que se ejecute cuando se cumpla la condición del IF. Como comentábamos se pueden actuar por dos vías : se puede activar /desactivar nuestra actuador ( el buzzer) o también enviar correos o SMS’s

Como ejemplo se pueden definir lo siguientes triggers:

  • IF DS1820 <42º THEN RELE(channel17) =OFF
  • IF Channel18=ON THEN RELE(channel17) =ON
  • IF Channel18=ON THEN Send e-mail to…
  • IF DS2820>90º THEN Send e-mail to..
  • etc

Es obvio que las posibilidades son infinitas ( y las mejoras de este proyecto también), pero desde luego un circuito así es indudable la gran utilidad que puede tener.¿Se anima a replicarlo?

 

 

Más información aqui