En realidad es bastante sencillo poder enviar correos electrónicos gracias a Mutt , un cliente de correo electrónico libre basado en texto, para sistemas similares a Unix que fue escrito originalmente por Michael Elkins en 1995 y publicado bajo la Licencia Pública General de GNU. Inicialmente se asemejaba a elm, ahora el programa es muy similar al lector de noticias slrn.
Mutt soporta la mayoría de los formatos de correo electrónico (en particular, tanto mbox y Maildir) y protocolos (POP3, IMAP, etc.) También incluye soporte MIME, en particular PGP/GPG y S/MIME.
Este programa es bastante configurable pues: tiene cientos de directivas de configuración y personalización de los comandos. Ademas permite cambiar todas las teclas y hacer macros de teclado para acciones complejas, así como los colores y el diseño de la mayoría de la interfaz. A través de las variantes de un concepto conocido como «ganchos», muchos de sus ajustes se pueden cambiar sobre la base de criterios tales como el actual o buzón de correo saliente los destinatarios del mensaje. Hay muchos parches disponibles y extensiones que añaden funcionalidad, como soporte NNTP o una barra lateral similar a los que a menudo se encuentran en clientes de correo gráfico.
Mutt es totalmente controlado con el teclado, y tiene soporte para hilos de correo, es decir, uno puede fácilmente desplazarse largas discusiones, como en listas de correo. Los mensajes nuevos se componen con un editor de texto externo por defecto, a diferencia de pine que incorpora su propio editor conocido como pico (aunque se puede configurar para depósito de pino a un editor externo).
Para instalar el cliente de correo mutt en nuestra Raspberry Pi , la cual por ejemplo nos va permite enviar correos desde una cuenta de gmail tenemos que seguir unos sencillos pasos.
En primer lugar debe actualizar el sistema e instalar la utilidad mutt;
sudo apt-get update sudo apt-get install mutt
Ahora con el paquete instalado, lo vamos a configurar para enviar desde el directorio root.de nuestra Raspberry Pi ,`para ello ,creamos el fichero .muttrc y rellenamos con nuestra información sobre nuestra cuenta de correo.
Para ello ejecute el siguiente comando:
sudo nano /root/.muttrc
Ahora en dicho fichero deberá escribir el siguiente contenido:
set from = «[email protected]» set realname = «usuario gmail» set imap_user = «[email protected]» set imap_pass = «password» set folder = «imaps://imap.gmail.com:993» set spoolfile = «+INBOX» set postponed =»+[Gmail]/Drafts» set header_cache =~/.mutt/cache/headers set message_cachedir =~/.mutt/cache/bodies set certificate_file =~/.mutt/certificates set smtp_url = «smtp://[email protected]:587/» set smtp_pass = «password»
Donde pone [email protected] , lógicamente tendrá que escribir su usuario de gmail y donde pone password la clave que usemos para acceder a este. En smtp-url tampoco olvide que xxxx representa el usuario de gmail
Lógicamente salvaremos el fichero con nuestra información de nuestra cuenta de gmail y abandonaremos el editor nano.
Ahora crearemos la siguiente carpeta ( cache) para lo cual ejectaremos,
sudo mkdir -p /root/.mutt/cache
Ya estamos listos para enviar un correo para lo cual recuerde que hemos configurado el correo para enviar desde la carpeta root (si lo queréis desde el usuario pi donde pone root lo puede cambiar por pi).
Vamos a enviar nuestro primer correo para ello hacemos sudo su. Y tecleamos el siguiente código:
Donde pone [email protected] , lógicamente es el destinatario de gmail, y «Contenido » es el contenido del mensaje y en Prueba ira el asunto del mensaje.
Ahora ya podemos ir nuestra bandeja de entrada y si la Raspberry Pi contaba con conectividad a Internet via wifi ( si es una Raspberry pi 3) o por ethernet , allí tendremos el correo.
Asimismo también podemos enviar un archivo adjunto, para lo cual crearemos un archivo con nano adjunto.c y lo relleneraremos con texto.
Para adjuntar este fichero al correo se hace de la siguiente forma:
echo «Este correo incluye un adjunto» | mutt -s «Archivo Adjunto» [email protected] -a /root/adjunto.c
donde /root/adjunto.c es la ruta del archivo del fichero a enviar e [email protected] , lógicamente es el destinatario de gmail, .
Puede parecer una vanalidad pero la potencia de enviar correos desde la Raspberry Pi , es una idea muy interesante para automatizar procesos asociados a dispositivos conectados a los GPIO por ejemplo relacionados con el cambio de estado de un pin asociado a un pulsador o cuando varíe un valor asociado a un determinado sensor
Puede parecer extraño , pero cada vez tenemos dispositivos conectados a nuestro TV que suelen ser el origen de vídeo por defecto como pueden ser dispositivos Android TV, reproductores blueray, etc. o sobre todo descodificadores de TV
En este sentido podría ser interesante supeditar automáticamente el encendido de la TV al de la fuente de vídeo ( normalmente un descodificador de TV) , para lo cual vamos a intentar implementar una solución que lo automatice
Pensando en una solución , una aproximación podría ser basarse en las señales de infrarrojos entre el TV y la fuente de vídeo ,pero esto conlleva mucha complejidad pues en el mercado existe una infinidad de marcas y modelos de dispositivos diferentes , que haría muy difícil contemplar un método practico para resolverlo , así que debemos pensar en otra solución …
Pensando en la variación del consumo de un dispositivo ,una solución puede pasar por detectar esa variación de consumo y con ello sabremos si debemos o no activar la TV , para lo cual nos puede basta el sensor ACS712 , un Modulo Sensor de corriente para Arduino con un rango de medida máximo de 5 Amperios ( suficiente para la mayoría de los dispositivos que conectaremos al TV)
Este sensor esta basado en efecto Hall que detecta el campo magnético que se produce por inducción de la corriente que circula por la línea que se está midiendo , por lo que no hay disipación de potencia a través de este como ocurriría con soluciones clásicas que usarían una resistencia de valor bajo en serie para medir la corriente que circula por ella y el circuito (pero con el consiguiente disipación de potencia en esta )
Concretamente en las pruebas junto a un Arduino UNO , usaremos el chip sensor ACS712ELC-05A alimentado con 5V a través del propio Arduino ( lleva un led a bordo como e indicador de energia)
El modulo puede medir los positivos y negativos de máximo 5 amperios, correspondiente a la salida analógica 185mV / A entregando una salida de voltaje proporcional a la corriente, Dependiendo la aplicación podemos usar otros módulos como el ACS712-05A, ACS712-20A o el ACS712-30A, para rangos de 5, 20 o 30 amperios respectivamente
El ACS712 podemos encontrarlo en módulos, los cuales nos facilitan sus conexiones, Este modulo trae una bornera para conectar la línea que queremos medir ( el descodificador) y 3 pines por el otro extremo: dos para conectar la alimentación y un pin para la salida analógica.
Para las conexiones en el módulo debe guiarse por los nombres de los pines, en algunos modelos vienen en diferente orden pero marcados en la serigrafia como Gnd,Out y Vcc . En nuestro caso Vcc ira al pin +5V de Arduino, GND al GND del Arduino y Out lo conectaremos al pin analógico de Arduino A0
En los terminales opuestos del ACS712 conectaremos en serie la alimentación del Descodificador ,o dispositivo que vaya a controlar la TV . Para medir la corriente se debe conectar en serie con el dispositivo o carga, nunca conectar en paralelo a la fuente de voltaje.
El rango de corriente que podemos medir y sensibilidad varían dependiendo del modelo del integrado, existen tres modelos los cuales detallamos a continuación:
Modelo
Rango
Sensibilidad
ACS712ELCTR-05B-T
-5 a 5 A
185 mV/A
ACS712ELCTR-20A-T
-20 a 20 A
100 mV/A
ACS712ELCTR-30A-T
-30 a 30 A
66 mV/A
El sensor ACS712 nos entrega un valor de 2.5 voltios para una corriente de 0A y a partir de allí incrementa proporcionalmente de acuerdo a la sensibilidad, teniendo una relación lineal entre la salida de voltaje del sensor y la corriente. Dicha relación es una línea recta en una gráfica Voltaje vs Corriente donde la pendiente es la sensibilidad y la intersección en el eje Y es 2.5 voltios. La ecuación de la recta seria la siguiente
Donde la pendiente es m y equivale a la Sensibilidad
Despejando tendremos la ecuación para hallar la corriente a partir de la lectura del sensor:
Para realizar la lectura de corriente simplemente se necesita leer la entrada analógica y con la formula antes expuesta obtener la corriente.
A continuación se muestra el código para un realizar la lectura de corriente:
float Sensibilidad=0.185; //sensibilidad en Voltios /Amperio para sensor de 5A void setup() { Serial.begin(9600); } void loop() { float voltajeSensor= analogRead(A0)*(5.0 / 1023.0); //lectura del sensor float I=(voltajeSensor-2.5)/Sensibilidad; //Ecuación para obtener la corriente Serial.print("Corriente: "); Serial.println(I,3); delay(200); }
En nuestro caso estamos trabajando con un sensor de 5A ( ACS712 ) por eso usamos el valor de sensibilidad de 0.185V/A que es el equivalente 185mV/A que nos da el fabricante, si están trabajando con el sensor de 20A, reemplazar el valor de la sensibilidad por 0.100 V/A.
Existen varios tipos de filtros, que dependiendo de la complejidad pueden consumir recursos en la programación de nuestro Arduino, en nuestro caso simplemente usaremos la media aritmética de varias lecturas consecutivas, implementar el promedio de las lecturas en Arduino es sencillo y fácil de entender, simplemente hay que sumar las lecturas y dividirlas en un número de muestras suficiente. La cantidad de muestras para calcular el promedio depende del nivel de ruido que tengan .En nuestro ejemplo con 200.000 son un valor lo suficiente bueno para que nos de un resultado bastante preciso
El programa mejorado seria el siguiente:
float Sensibilidad=0.185; //sensibilidad en Voltios/Amperio para sensor de 5A void setup() { Serial.begin(9600); } void loop() { float I=get_corriente(200000);//obtenemos la corriente promedio de 200.00 muestras Serial.print("Corriente: "); Serial.println(I,3); delay(100); } float get_corriente(int n_muestras) { float voltajeSensor; float corriente=0; for(int i=0;i<n_muestras;i++) { voltajeSensor = analogRead(A0) * (5.0 / 1023.0); ////lectura del sensor corriente=corriente+(voltajeSensor-2.5)/Sensibilidad; //Ecuación para obtener la corriente } corriente=corriente/n_muestras; return(corriente); }
Como el error que obtenemos aun con el numero tan elevado de muestras es grande, debemos de recalibrar y hallar los valores reales puesto que los valores que nos da el fabricante no son exactos.
Recordemos la ecuación que usamos para hallar la corriente:
En esta ecuación solo tenemos dos constantes: los 2.5 que es el voltaje del sensor cuando la corriente es 0V y la sensibilidad, que equivale a la pendiente de la recta Voltaje Vs Corriente; tenemos que calcular los valores reales de estas dos constantes. Al ser una recta, basta con obtener dos puntos y con estos podemos calcular constantes.
Para esto necesitamos un polimetro en la escala de Intensidad ( debe ser de buena precisión, ya que este será la herramienta para calibrar) . El polimetro, el ACS712 y la carga deben de conectarse en serie.
Después de conectar el aparato de medida y el sensor, debemos de tomar lecturas de voltaje del sensor, esto se hace con el siguiente programa.
El primer punto que debemos medir es para una corriente de 0 amperios: esta es una de las constantes, en nuestro caso 2.527, que corresponde al punto P1(2.527,0)
Para hallar la segunda constante necesitamos una segunda medida, se recomienda que no sea cercano al valor de la primera medida, en nuestro caso usaremos una carga cuya corriente es superior a 1 amperio.Como se observa en el sensor un voltaje de 2.687, y en el amperímetro medimos 1.155A, este sería nuestro segundo punto P2(2.687,1.155) ,
Para calcular la sensibilidad simplemente calculamos la pendiente.
Teniendo estos dos valores la ecuación para calcular la corriente es:
Donde sensibilidad=0.139 V/A
Con estos nuevos valores debemos trabajar los ejemplos anteriores
Tener en cuenta que cada sensor tiene su propia característica
Otra forma puede ser en tomar varios puntos y al final aplicar regresión y hallara la ecuación de la recta.
Con estos dos valores contemplados en el programa, toca ejecutar el programa y observar la salida del monitor serie en función de cuando activamos el descodificador y lo apaguemos . En nuestro caso , las lecturas son inferiores a 0.207 cuando esta en stand-bye , superando este valor cuando esta encendido
Estos valores son precisamente los que podemos usar como umbral para activar o desactivar un pin de salida por ejemplo para activar/desactivar un rele que a su vez alimente al TV
Con todos estos cambios , el código final del programa que detecta si se enciende o no el descodificador es el siguiente:
const int sensorPin = A0; // seleccionar la entrada para el sensor int sensorValue; // variable que almacena el valor raw (0 a 1023) float value; float Sensibilidad=0.185; //sensibilidad en Voltios/Amperio para sensor de 5A
void setup() {
// Iniciamos comunicacion serie Serial.begin(9600); }
void loop() {
float I=get_corriente(200000);//obtenemos la corriente promedio de 500 muestras
if (I<0.207) {Serial.print(«Apagado: «); // aqui podemos desactivar un pin binario de salida para deactivar un rel Serial.println(I,3); delay(100); } else {Serial.print(«Encendido: «);// aquí podemos activar un pin binario de salida para activar un relé Serial.println(I,3); delay(100); }
}
float get_corriente(int n_muestras) { float voltajeSensor; float corriente=0; for(int i=0;i { voltajeSensor = analogRead(sensorPin) * (5.0 / 1023.0);////lectura del sensor corriente=corriente+(voltajeSensor-2.5)/Sensibilidad; //Ecuación para obtener la corriente } corriente=corriente/n_muestras; return(corriente); }
Debe estar conectado para enviar un comentario.