Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Aplicación de ZigbeeV1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 14

Laboratorio # 6

Aplicación de Zigbee
Fecha: 13/11/2021
Grupo: Click or tap here to enter text.
Integrantes:
Albert Josue Valencia Santacruz

Paralelo: 101
Profesor: Ing. Nestor Arreaga

Tipo de trabajo: ☐Grupal ☒Individual

Objetivo
Realizar una pequeña aplicación con el protocolo Zigbee para el control de escenarios
domóticos mediante la configuración de un sistema embebido.

Duración
Noventa (90) minutos.

Materiales y herramientas
• Proteus Professional 8, Arduino y Virtual Serial Port Tools.

Procedimiento
Paso 1: Elaboración del circuito esquemático

Figura 1 Diagrama de conexiones del emisor

a) Abrir Proteus Professional 8 y crear un proyecto con el nombre “ZigbeeEmisor”.


b) En la sección Devices, en Component Mode, escoger los siguientes dispositivos:
ARDUINO UNO, KEYPAD-SMALLCALC, y XBEE MODULE.
c) Agregar un dispositivo de cada uno de los anteriores y un VIRTUAL TERMINAL al
entorno de trabajo.
d) Realizar las conexiones de acuerdo con la figura 1.
e) Abrir otra instancia de Proteus y crear un nuevo proyecto con el nombre
“ZigbeeReceptor”.
f) En la sección Devices, en Component Mode, escoger los siguientes dispositivos:
ARDUINO UNO, CELL, LAMP, RELAY y XBEE MODULE.
g) Agregar un dispositivo de cada uno de los anteriores y realizar las conexiones de
acuerdo con la figura 2.

Figura 2 Diagrama de conexiones del receptor

Paso 2: Codificación de los sistemas embebidos


h) Abrir Arduino, en el menú superior escoger la opción Tools-> Board-> Arduino AVR
Boards-> Arduino Uno.
i) Abrir Arduino, en el menú superior escoger la opción Sketch-> Include Library->
Manage Libraries.
j) En la barra de búsqueda, escribir Keypad e instalar la librería con el mismo nombre.

k) Desde el menú superior escoger la opción File-> Examples-> Keypad->


CustomKeypad.
l) Modificar el código para que el teclado se asemeje al dispositivo KEYPAD-
SMALLCALC y que los pines correspondan a los conectados en el esquemático del
emisor.
Copie el código a continuación.
#include <Keypad.h>

const byte ROWS = 4; //four rows


const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'7','8','9','/'},
{'4','5','6','*'},
{'1','2','3','-'},
{'C','0','=','+'}
};
byte rowPins[ROWS] = {6, 7, 8, 9}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {2, 3, 4, 5}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad


Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins,
ROWS, COLS);

void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
m) Crear un código llamado Receptor.ino, y agregar las siguientes líneas dentro de la
función setup().
Serial.begin(9600);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
n) Dentro de la función loop(), programe un código que lea los datos desde la interfaz
Serial y cumpla con las siguientes condiciones:
o Si el usuario presiona la tecla 1, la lámpara se enciende y se presenta el
mensaje “Lámpara encendida”.
o Si el usuario presiona la tecla 2, la lámpara se apaga y se presenta el
mensaje “Lámpara apagada”.
o Si el usuario presiona cualquier otra tecla, la lámpara no cambia su estado y
se presenta el mensaje “Tecla inválida, intente otra vez”.
Tenga en cuenta que debe manipular la salida de los pines conectados al RELAY con la
función digitalWrite(pin,state);

Copie el código a continuación.


#include <Keypad.h>
#define relay 8

const byte ROWS = 4; //four rows


const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char keys[ROWS][COLS] = {
{'7','8','9','/'},
{'4','5','6','*'},
{'1','2','3','-'},
{'C','0','=','+'}
};
byte rowPins[ROWS] = {6, 7, 8, 9}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {2, 3, 4, 5}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()){
char keyMain = Serial.read();
if(keyMain == '1'){
Serial.println("Lampara Encendida");
digitalWrite(8, HIGH);
}
if(keyMain == '2'){
Serial.println("Lampara Apagada");
digitalWrite(8, LOW);
}
if(keyMain > '2') {
Serial.println("Tecla Incorrecta, Try Again");
}
}
}
Paso 3: Implementación de la aplicación
o) Compilar y generar los archivos binarios de cada uno de los códigos creados en el
paso anterior. Dar clic en Sketch->Export compiled Binary.
p) Para que los módulos Xbee funcionen de forma virtual es necesario virtualizar los
puertos seriales del computador de tal manera que puedan ser reconocidos en la
simulación. En el escritorio, abrir el software Virtual Serial Port Tools.

Figura 3 Pantalla principal del software Vitual Serial Ports Tools

q) Seleccionar Create Local Bridge, y crear un puente entre los puertos seriales COM1
y COM2.
r) En el proyecto de Proteus, ZigbeeEmisor, dar doble clic sobre el módulo Xbee y
establecer COM 1 en la opción Physical port. También cargar el archivo binario del
código CustomKeypad al ARDUINO UNO, dar doble clic sobre el componente y
luego ir a la opción Program File (el archivo debe terminar en formato
.ino.standard.hex).
s) En el proyecto de Proteus, ZigbeeReceptor, dar doble clic sobre el módulo Xbee y
establecer COM 2 en la opción Physical port. También cargar el archivo binario del
código Receptor al ARDUINO UNO, dar doble clic sobre el componente y luego ir a
la opción Program File (el archivo debe terminar en formato .ino.standard.hex).
t) Ejecutar. primero la simulación de ZigbeeEmisor y después ZigbeeReceptor. Probar
la funcionalidad de la aplicación.
Colocar capturas del resultado.
Presionar 1
Presionar 2

Presionar cualquier otra tecla

P4: Integración con Ubidots


u) Nos vamos a dirigir a la página de https://ubidots.com/. En caso de no poseer una
cuenta en la plataforma debemos crearnos una y posteriormente iniciar sesión.

v) Vamos a crear un nuevo dispositivo en blanco, el nombre de este queda a su


elección.

w) Una vez creado el nuevo dispositivo en blanco, damos clic en él y entramos para
crear una nueva variable de tipo raw, el nombre de esta puede ser “Encendido”,
que es como yo la he nombrado en la figura.

x) Luego de eso damos clic en la variable y vamos a modificar su rango para que
vaya de 1 a 2.

y) Luego iremos a Dashboard, en caso de no tener uno creamos uno nuevo y allí
agregaremos un “Indicator widget”.

z) Al momento de agregar el “Indicator widget”, debemos agregarle la variable que


creamos en pasos anteriores, en mi caso la variable era “Encendido”
aa) En el parámetro “Color Logic” configuramos los parámetros de la siguiente manera:

bb) En el proyecto en proteus del “ZigbeeReceptor” vamos a agregar un nuevo


componente llamado “COMPIM” y lo conectamos como se muestra a continuación.

cc) En el código de Arduino correspondiente al receptor debemos agregar las líneas


de tal manera que el puerto 10 y 11 sean virtualizados para envío y recepción de
información.

#include<SoftwareSerial.h> //Librería para virtualizar puerto RX y TX


SoftwareSerial pserial(10,11); //RX, TX

int dataCheck = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pserial.begin(9600); //Inicializo puerto virtual serial
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
Serial.println("BIENVENIDO");
Serial.println("Presione la tecla 1 para encender");
Serial.println("Presione la tecla 2 para apagar");
}

void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()){
char data = Serial.read();
Serial.print(data);
Serial.print(" ==========> ");
if(data == '1'){
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
pserial.write(1); //Envío dato de encendido python por puerto serial
virtual
Serial.println("Lampara encendida");
}else if(data == '2'){
digitalWrite(8,LOW);
digitalWrite(9,LOW);
pserial.write(2); //Envío dato de apagado a python por puerto serial
virtual
Serial.println("Lampara apagada");
}else{
Serial.println("Elija 1 para encender y 2 para apagar.");
}
}
}

dd) Adicional a esto cuando vayamos a ejecutar nuestras simulaciones en proteus


debemos ejecutar el siguiente código usando Python, para establecer la conexión
con Ubidots. Los detalles de esto lo encontrarán en el siguiente video:
https://espolec.sharepoint.com/:v:/s/Section_7840/Ed9asB828vtCmzECbU8q0M8B
LxMvzyL8Jxub7W0tghQyZQ

from ubidots import ApiClient


import serial
import time

if __name__ == '__main__':
dato = 0.0

try:
print("Conectando con el puerto serial...")
arduino = serial.Serial('COM5', 9600, timeout=2.0) #En caso de usar
otro puerto sustuir el valor COM5
time.sleep(1)
except:
print("Fallo en la conexión con arduino(Proteus)")

try:
print("Conectando con API...")
api = ApiClient(token='TOKEN DE SU DISPOSITIVO') #Token de su
Dispositivo

encendido = api.get_variable('API DE SU VARIABLE') #Api de la


variable creada
print(encendido)
print("Probando conexión")
except:
print("Fallo en la conexión con API")

while True:

enc = arduino.read()
print(enc)

if len(enc) > 0:
dato = int.from_bytes(enc, byteorder='big', signed=False)
print("Encendido(1 si, 2 no):", end=" ")
print(dato)
newTemp = encendido.save_value({'value': dato})

Reto
Agregar un sensor de temperatura DHT22/11 en el proyecto ZigbeeEmisor para controlar a
un ventilador FAN-DC en ZigbeeReceptor. Si la temperatura es mayor a 24°C, encender el
ventilador, caso contrario apagarlo. Adicional a esto el valor de temperatura medido por el
sensor debe ser enviado a Ubidots y mostrado en un “Thermometer widget”.
Conclusiones
La configuración de la luz para que se encienda y apague se realizo mediante un sistema
embebido por Zigbee.

Recomendaciones
Tener en cuenta que se debe actualizar e instalar la nuevas librerías del Arduino IDE, no
olvidar los archivos: ino – hex – standard, para el respectivo Arduino que se encuentre en el
Proteus.

Rúbrica de evaluación
Criterio Excelencia Desarrollado En desarrollo Inicial
Los códigos
Los códigos presentados Los códigos
Los códigos presentados presentados
Código no se adecuan al presentados son
funcionan exitosamente presentan errores de
funcionamiento requerido incorrectos
sintaxis
Presenta solo una
Presenta todas las Presenta las capturas, No presenta capturas
captura del
capturas y se evidencia el pero no se evidencia el del funcionamiento de
Capturas funcionamiento de lo
funcionamiento de lo funcionamiento de lo lo realizado en la
realizado en la
realizado en la práctica realizado en la práctica práctica
práctica
Da su opinión tomando en
Da su opinión tomando Da su opinión Da su opinión sin
cuenta las actividades
en cuenta las actividades tomando en cuenta tomar en cuenta las
realizadas y sus
realizadas, sus las actividades actividades realizadas,
Conclusiones argumentos son válidos
argumentos son válidos, realizadas, pero o, no presenta las
dando a conocer
pero no menciona carece de argumentos conclusiones
información relevante
información relevante detallados solicitadas
tratada durante la práctica
Completa el reto de forma Completa el reto, pero no Completa el reto, pero
No completa el reto
Reto exitosa y presenta las presenta el no presenta las
solicitado
evidencias completas funcionamiento solicitado evidencias completas

También podría gustarte