Rele wifi con Raspberry Pi


Gracias el bajo coste y  la gran popularidad de la Raspberry Pi  , hoy en día  es muy fácil  ofrecer soluciones  muy flexibles de control de dispositivos por Internet mediante diferentes vías de una forma muy sencilla  sin necesidad de realizar  una gran inversión ,saber  electrónica   ni  por supuesto escribir una sola línea  de código para ello

La solución que vamos a  proponer  es una utilidad  capaz de controlar  8 cargas de hasta 10 Amp pero  también  se puede expandir  con  otras 6 cargas mas ( añadiendo una placa de mas relés) pudiendo por tanto controlar  hasta 14 cargas simultáneamente sin multiplexar ,todo  ello como decíamos  sin escribir ninguna línea de código  gracias a  la solución  gratuita Cayenne ,la cual  consigue una gran automatización , pues es capaz de gracias  a una app  móvil instalar un agente en la Raspberry  Pi, que una vez instalado, permite  poderlo controlar ( y ver el estado ) de forma remota desde cualquier parte del mundo, bien desde un navegador o bien desde la propia app móvil.

Para empezar   si contamos con una Raspberry Pi  , lo primero es  si aun no lo ha hecho ,es generar  la imagen del SO con la que arrancara la Raspberry Pi .  Aunque hay diferentes opciones (de hecho en este blog  hemos visto que es posible  instalar otras  SO  incluso Windows 10.) , para la solución propuesta,  lo mejor es   usar  la ultima distribución disponible de Raspbian pues al  ser el sistema operativo mas instalado en el mundo en la Raspberry Pi  es la distribución compatible con el software propuesto (además precisamente hace unos días , Raspbian hace acaba de recibir una actualización intensa conocida como Pixel   llena de muchísimas novedades y mejoras tanto en el diseño como en el rendimiento del software).

Si no ha instalado  Pixel  puede  hacerlo  descargando la imagen de la SD  a partir del sitio  oficial Raspbian ,donde  hay dos opciones :la versión previa mínima (Jessie) o la nueva de Jessie con Pixel:

raspbian

Lógicamente si la SD es suficiente grande , lo interesante es descargar la primera  en lugar de la versión mínima que ademas esta obsoleta

Una vez   descargada la imagen correspondiente  en su ordenador   siga los siguientes pasos:

  • Inserte la tarjeta SD en el lector de tarjetas SD  de su ordenador comprobando cual es la letra de unidad asignada. Se puede ver fácilmente la letra de la unidad, tal como G :, mirando en la columna izquierda del Explorador de Windows. Puede utilizar la ranura para tarjetas SD, si usted tiene uno, o un adaptador SD barato en un puerto USB.
  • Descargar la utilidad Win32DiskImager desde la página del proyecto en SourceForge como un archivo zip; puede ejecutar esto desde una unidad USB.
  • Extraer el ejecutable desde el archivo zip y ejecutar la utilidad Win32DiskImager; puede que tenga que ejecutar esto como administrador. Haga clic derecho en el archivo y seleccione Ejecutar como administrador.
  • Seleccione el archivo de imagen que ha extraído anteriormente de Raspbian.
  • Seleccione la letra de la unidad de la tarjeta SD en la caja del dispositivo. Tenga cuidado de seleccionar la unidad correcta; si usted consigue el incorrecto puede destruir los datos en el disco duro de su ordenador! Si está utilizando una ranura para tarjetas SD en su ordenador y no puede ver la unidad en la ventana Win32DiskImager, intente utilizar un adaptador SD externa.
  • Haga clic en Escribir y esperar a que la escritura se complete.
  • Salir del administrador de archivos  y expulsar la tarjeta SD.
  • Ya puede insertar la SD en su Raspberry Pi en el adaptador de micro-sd , conectar un monitor por el hdmi , conectar un teclado y ratón en los  conectores USB, conectar la  con un cable ethernet  al router  conectividad a Internet y finalmente conectar la alimentación  para comprobar que la Raspeberry arranca con la nueva imagen

Una vez instalado Raspbian en su SD, lo siguiente  es instalar el agente de Cayenne:

Instalación del agente   Cayenne en la Raspberry Pi

El proceso de instalación de Cayenne en la Raspberry Pi es bastante simple y no debería tomar demasiado tiempo para obtener su creación y funcionamiento. Usted tendrá que asegurarse de que ha instalado en su Raspbian Pi. .

  1. En primer lugar, vaya a  myDevices Cayenne y regístrese para obtener una cuenta gratuita.
  2. Una vez que ya se ha registrado usted tendrá que registrarse / conectar el Pi hasta la cuenta que acaba de crear. Para ello sólo tiene que copiar las 2 líneas de comandos que se muestran después de su inscripción. Por ejemplo :
    wget https://cayenne.mydevices.com/dl/rpi_qcps12pc3d.sh
    
    sudo bash rpi_qcps12pc3d.sh -v

    Introduzca estos en el terminal para su Pi.(Estos archivos son únicos para cada instalación nueva)

cayenne
Alternativamente, se puede descargar la aplicación y se puede localizar e instalar en su Cayenne Pi automáticamente. (Tenga en cuenta SSH debe estar habilitado )

  1. Tomará unos minutos para instalar en el Pi en función de la velocidad de su conexión a Internet es. El navegador web o aplicación deben actualizar automáticamente con información sobre el proceso de instalación.
  2. Una vez instalado el tablero de instrumentos se mostrará y debe verse como algo más adelante.

Pi tablero de cayena

 

Placa de Relés

Para implementar el control  vamos a utilizar una placa de relés de 5V y ocho canales de bajo coste ( unos 8 € en Amazon), que para  mayor seguridad esta optoacoplada para proteger la Raspberry PI

Obviamente los relés electromecánicos también ofrecen un separación galvánica entre la lógica  y la parte de AC pero como que los aparatos que vamos a controlar funcionan con 220V, y los pines GPIO de Raspberry trabajan con un máximo de3,3V no esta mal que la placa cuente con este doble factor de aislamiento para evitar problemas.

Un módulo económico y perfecto para nuestro propósito es  el Timetop distribuido por Andoer   , un  módulo  con alimentación de  5V , la cual  tomara directamente de la Raspberry Pi .Se trata de una placa de interfaz de relé de 8 canales, que puede ser controlada directamente por una amplia gama de microcontroladores tales como Arduino, AVR, del PIC, ARM, PLC, Raspberry Pi etc

El contacto de cada relé   soporta una  salida máxima en  AC 250V  de  10A y en corriente continua DC30V    también de 10A lo cual lo hace ideal para  controlar varios aparatos y otros equipos de la corriente grande. .

gpio

En  la  imagen nos muestra en la parte superior los conectores con la Raspberry, el GND lo conectaremos a tierra,  el IN1 de la placa de reles   que controlara el canal de K1 (IN2 para el K2…) los conectaremos a un GPIO y haremos lo mismo con todas las conexiones IN2,IN3,IN4,IN5,IN6,IN7,IN8 ( según el numero de relés que tenga la placa)  Finalmente el VCC lo conectamos a los 5V de la Raspberry.  En la parte izquierda de la  placa de relés  ( donde vemos la clemas azules ) controlaremos  los  circuitos donde conectaremos los cables, si cerramos el circuito entre 1 y 2, el circuito normalmente estará ‘abierto’, si lo cerramos entre el 2 y el 3, el circuito normalmente estará ‘cerrado’.

reles

Prueba Manual desde la Raspberry Pi

Como se puede puede imaginar el circuito es  bastante simple  En la RaspberryPi  para probar localmente que todo esta correcto instalaremos wiringpi y no hay que instalar nada más.

tar xfzv wiringPi-xxx.tar.gz
cd wiringPi-xxx
./build

En el Raspberry ejecutamos:

1
gpio -g mode 18 out

Para encenderla:

1
gpio -g write 18 1

Para apagar la luz ejecutamos:

1
gpio -g write 18 0
Es decir  en reumen;
gpio readall --> Nos saca el status de todos los GPIO.
gpio -g mode 24 out --> Enciende GPIO24.
gpio -g mode 24 in --> Apaga el GPIO24.
gpio -g read 24 --> Saca el status, encendido 0, apagado 1.

Una vez probado el circuito ya desde el interfaz de cayenne ( desde la web o desde la aplicación móvil) si esta nuestra placa correctamente configurada podremos ver el estado de los relés así como interactuar con ellos .

Dudas mas comunes

  • Bien, he descargado la aplicación, ¿qué hago ahora?   En primer lugar, asegúrese de que tiene el Sistema Operativo Raspbian (OS) instalado en su Raspberry Pi. Este es el sistema operativo estándar que viene de los propios fabricantes de Raspberry Pi. Si usted compró NOOBS, la tarjeta SD pre-formateada, entonces se debe instalar fácilmente Raspbian para usted.
  • ¿Necesito un poco más de instrucción? Raspberry Pi tiene un tutorial aquí  que le guiará a través de cómo instalar el sistema operativo Raspbian en su Raspberry Pi. En segundo lugar, su Raspberry Pi debe estar conectada a Internet. Si su Raspberry Pi está conectada a la misma red que su teléfono, entonces la aplicación myDevices Cayenne encontrará automáticamente su Raspberry Pi y descargará el agente para que puedas empezar a construir tus proyectos IoT en un abrir y cerrar de ojos.
  • ¿Tengo que saber programar para utilizar myDevices Cayenne? He probado otras plataformas y me exigían programar. Una vez que el agente Cayenne está instalado en su Raspberry Pi, myDevices Cayenne se encarga de toda la codificación. De esta forma, ¡puedes centrarse en crear!
  • He oído hablar del término «agente», ¿qué es? Es un software que instalamos en tu Raspberry Pi y que le permite controlar y gestionar todos los sensores, actuadores y extensiones que utilices en tus proyectos IoT. También significa que usted no tiene que escribir ningún código.
  • ¿Tengo que estar conectado a la misma red WiFi que mi Raspberry Pi para poder controlarla y gestionarla? No, conectan su Raspberry Pi a la nube por esta misma razón.
  • El panel de control de mi cuenta tarda un poco en reconocer que he encendido mi Raspberry Pi, ¿por qué? Esto es correcto. Después de arrancar su Raspberry Pi, se tarda aproximadamente un minuto para que todo se cargue. Esto es normal en todos los ordenadores.
  • ¿Tendré que pagar alguna vez para utilizar la aplicación myDevices Cayeene o el panel web?De momento, no. Si alguna vez planeamos cobrar por algo, serás el primero en saberlo.
  • ¿Debo apagar mi Raspberry Pi cuando conecte sensores, actuadores o extensiones? Sí, debe desconectar la alimentación de su Raspberry Pi cuando añada o quite cables. Una vez que haya terminado, conecte su Raspberry Pi de nuevo a la fuente de alimentación.
  • ¿Funciona myDevices Cayenne a través de bluetooth?Todavía no. Por favor, ¡hágales saber a los programadores de Cayenne si esta es una característica importante!
  • La función de escritorio remoto no funciona.Es posible que tenga que permitir las ventanas emergentes para que funcione el acceso remoto.

Usando una Raspberry Pi para obtener información de dos sensores PZEM004T que están conectados al microcontrolador Arduino Mega


El objetivo de este post es ver un ejemplo der cómo medir el voltaje, la corriente y la potencia con dos sensores PZEM 004T de una Raspberry Pi .

En el ejemplo los sensores no están conectados directamente a la Raspberry, pero están conectados a un microcontrolador Arduino (Mega 2560) y este se conecta a la Raspberry a través de un cable USB.

Primero obtenemos todos estos valores usando el microcontrolador Arduino con capacidad de dos puertos serie como podria ser también un ESP32 (NodeMCU) o por supuesto un Arduino Mega, y luego los enviamos a la Raspberry Pi.

Es interesante observar cómo al proporcionar los módulos PZEM004 una salida serie necesitamos usar ese protocolo para recepcionar los datos motivo por el cual precisamente utilizamos dos puertos serie del microcontrolador ( y no sería posible por tanto añadir más módulos PZEM004)

Gracias a la biblioteca PZEM-004T v3.0 para el monitor de energía Peacefair PZEM-004T-10A y PZEM-004T-100A v3.0 utilizando la interfaz ModBUS y un microcontrolador, podemos monitorizar el consumo eléctrico junto a otras variables eléctricas como la tensión , la frecuencia , el factor de potencia, etc.

Es interesante destacar que debemos usar la ultima version del modulo, pues la versión 3.0 PZEM es una versión mejorada del antiguo PZEM-004T 

Respecto a las conexiones eléctricas debemos tener especialmente cuidado en el conexionado de las clemas de BT , las cuales viene claramente especificadas en la hoja de característica del modulo PZEM que usemos, pues una parte es para la medida del voltaje ( la medición se hace en paralelo ) y la parte contigua es la parte de la medida de la Intensidad (la medida se toma en serie en versiones de menos intensidad maxima admisible, pero para la version de 100A se suele tomar con una bobina toroidal o con un pinza amperimétrica)

¡Asegúrese de que el dispositivo esté conectado a la alimentación de CA! Los 5V solo alimentan los optoacopladores, no el chip real. Además, tenga cuidado, ¡la corriente alterna es peligrosa! ¡Si no sabe lo que estás haciendo, puede morir ! Es usted responsable de su propia estupidez. Así que no sea estúpido

Peor tanto ,debemos extremar el cuidado especialmente en estas conexiones (las que van con tornillo).

Observe por ejemplo las conexiones del módulo de 100 Amp. usado para escribir este post:

Esta versión PZEM tiene una UART Serial que funciona a 5V, por lo que se debe realizar una simple modificación soldando una resistencia de 1K a 1/4W para permitir que la comunicación funcione a 3.3v en los casos de placas como Raspberry Pi, ESP32 y esp8266, con esta modificación la UART funcionará a 5v o 3.3v.

Nota: Esta es la manera más sencilla y económica si no tienen al alcance un convertidor TTL de 5 a 3.3v, pero no se garantiza que funcione en todos los casos y con todos los medidores (en el prototipo probado funciona sin problemas).

El circuito final para el montaje de los dos PZEM quedaría como se puede ver en la imagen donde vemos como los alimentamos a +5V DC desde el microcontrolador, usamos las lineas tx/rx de forma inversa hacia el microcontrolador y finalmente el microcontrolador lo comunicamos con la Raspberry pi mediante un cable USB

Como se indicó anteriormente, el primer paso es recopilar todos los valores del microcontrolador Arduino, por lo que para hacerlo debemos usar la biblioteca . Esta biblioteca se puede descargar desde la página web: https://github.com/olehs/PZEM004T como un paquete zip, luego se debe agregar dentro del IDE de Arduino

El siguiente paso es conectar los sensores al microcontrolador arduino. Usaremos la librería SoftwareSerial para permitir la comunicación serial en otros pines digitales del Arduino y poder leer más de un dispositivo serial. Entonces, los terminales RX y TX del primer sensor están conectados a los pines 11 y 10 del microcontrolador y los terminales RX y TX del segundo sensor están conectados a los pines 13 y 12 respectivamente.

Ahora es el momento de desarrollar el código en Arduino IDE de la siguiente manera:

///////////////////////////////////////////////////////// ///////////////////////////////////////////////// // /////////////////////////////////////////
 //* Código para obtener el voltaje, corriente y potencia de dos sensores AC PZEM conectados al microcontrolador Arduino Mega, luego todos los valores *//
 // se concatenan en una variable char para poder enviarla a través de comunicación serie //
 ///////////////////////////////////////////////////////// ///////////////////////////////////////////////// // ///////////////////////////////////////
  
 #include
           
 #include
           
            
  
 IPAddress ip(192,168,1,11);
 IPAddress ip1(192,168,1,10);
  
 charix[10];
 char iy[10];
 char iz[10];
 charconc[360];
  
 charix1[10];
 char iy1[10];
 char iz1[10];
  
 flotante V, V1;
 flotar i, i1;
 flotante p, p1;
  
 void setup () {
 Serial.begin(9600);
 }
  
 void loop () {
   
 PZEM004T pzem(10,11); //(RX TX)
 pzem.setAddress(ip);
 V=pzem.voltage(ip); //voltaje obtenido de la biblioteca pzem
 i = pzem.current(ip); // actual obtenido de la biblioteca pzem
 p = pzem.power(ip);//potencia obtenida de la biblioteca pzem
 dtostrf(V,7,3,ix); //función utilizada para almacenar el valor actual en la variable char ix, especificando 3 como el número de dígitos después del punto
 dtostrf(i,7,3,iy); //función utilizada para almacenar el valor actual en la variable char iy, especificando 3 como el número de dígitos después del punto
 dtostrf(p,7,3,iz); //función utilizada para almacenar el valor de potencia en la variable char iz, especificando 3 como el número de dígitos después del punto
 retraso (1000);
  
 PZEM004T pzem1(12,13); //(RX TX)
 pzem1.setAddress(ip1);
 V1=pzem1.voltage(ip1); //voltaje obtenido de la biblioteca pzem
 i1 = pzem1.current(ip1); // actual obtenido de la biblioteca pzem
 p1 = pzem1.power(ip1);//potencia obtenida de la biblioteca pzem
 dtostrf(V1,7,3,ix1);//función utilizada para almacenar el valor actual en la variable char ix1, especificando 3 como el número de dígitos después del punto
 dtostrf(i1,7,3,iy1); //función utilizada para almacenar el valor actual en la variable char iy1, especificando 3 como el número de dígitos después del punto
 dtostrf(p1,7,3,iz1); // función utilizada para almacenar el valor de potencia en la variable char iz1, especificando 3 como el número de dígitos después del punto
 retraso (1000);
  
 sprintf(conc,":%s,:%s,:%s,:%s,:%s,:%s,\n", ix,iy,iz,ix1,iy1,iz1); // función utilizada para concatenar todos los valores en una sola variable char
 Serial.write(conc);
  
 }  /////////////////////////
 

Observaciones:

  • Los sensores no se leen al mismo tiempo.
  • El tipo de los valores dados por el sensor es flotante.
  • Después de obtener todos los valores, estos se convierten de tipo flotante a char utilizando la función «dtostrf» en la que los lugares decimales se limitan a tres.
  • Los 6 valores se concatenan mediante la función «sprintf», en una única matriz de caracteres y luego se envían como datos en serie.
  • Además de poner todos los valores juntos en la matriz char, también ponemos los caracteres ‘:’ y ‘,’. Al final, la matriz de caracteres se ve así: “:val1,:val2,:val3,:val4,:val5,:val6,:”. Se hace con el fin de analizar y sacar los valores fácilmente en python.   

Después de cargar y probar el código en el microcontrolador, es hora de lidiar con el script de python. El microcontrolador Arduino debe conectarse a la Raspberry mediante un cable USB.

Antes de comenzar con el código, podría ser bueno saber cómo crear un archivo python desde la terminal de Linux. Se hace escribiendo la siguiente línea de comando:

toque PZEM_Sensors.py

Luego para abrir el archivo ya creado, debemos teclear la siguiente línea de comando:

nano PZEM_Sensores.py

import serial
 import time
 import re
  
 port = "/dev/ttyACM0"
 s1 = serial.Serial(port,9600)
  
 while True:
     if s1.inWaiting()>0:
         inputValue = s1.readline().decode() 
         m = re.search('.*:(.*),.*:(.*),.*:(.*),.*:(.*),.*:(.*),.*:(.*),',inputValue) # command used to read the information and split it between the charcaters ':' and ','
         v1 = m.group(1).replace(" ","") ## command used to saved the information splitted before in a the variable 
         i1 = m.group(2).replace(" ","")
         p1 = m.group(3).replace(" ","")
         v2 = m.group(4).replace(" ","")
         i2 = m.group(5).replace(" ","")
         p2 = m.group(6).replace(" ","")
         a = float(v1)
         b = float(i1)
         c = float(p1)
         d = float(v2)
         e = float(i2)
         f = float(p2)
         print("Voltage1:",+a)
         print("Current1:",+b)
         print("Power1:",+c)
         print("Voltage2:",+d)
         print("Current2:",+e)
         print("Power2:",+f)  


Observaciones:

  • Deberíamos especificar el puerto de la Raspberry donde está conectado el sensor. Para saberlo, solo debemos escribir el siguiente comando desde la ventana de la Terminal LX: ls /dev –> Los nombres de los dispositivos USB conectados comienzan con: “ttyUSBX”. Donde X indica el número de cada dispositivo USB conectado.
  • El puerto serie se lee y decodifica para asegurarse de que tenemos una cadena de caracteres. Se hace con la función readline() y decode() respectivamente.
  • Los seis valores se obtienen mediante el uso de expresiones regulares. Usando ‘.*:(.*),’, tomamos todos los caracteres que están entre ‘:’ y ‘,’ y luego los almacenamos en grupos.
  • Al final los valores se convierten de tipo char a tipo float.  

Después de escribir todo el código y presionar las teclas Ctrl + X, se le pedirá que lo guarde o no. Debe presionar la tecla y o n y luego Enter.

Para ejecutar el código, debemos escribir la siguiente línea de comando:

python PZEM_Sensores.py

Luego, todos los resultados y mensajes aparecerán en las ventanas de la Terminal o aparecerá un mensaje de error si hay algo incorrecto dentro del código.

La siguiente figura muestra todos los resultados obtenidos de los dos sensores PZEM. La corriente 1 es 0 debido a que no hay ningún sensor de corriente conectado y por eso la potencia 1 también es 0. Si hay algún problema de comunicación el valor que obtendremos es -1.

Mas información en https://miniprojets.net/index.php/2019/08/21/using-a-raspberry-pi-3-to-get-information-of-two-pzem004t-sensors-which-are-connected-to-the-arduino-mega-microcontroller/