Cajas Nido Inteligentes -...
Transcript of Cajas Nido Inteligentes -...
2
Índice
Introducción.
Caja nido tipo A.
1. Introducción.
2. Descripción general.
3. Control de la caja nido.
4. Componentes.
5. Base de datos.
6. Monitorización con Nagios.
7. Enlaces y referencias.
Caja nido tipo B
1. Introducción.
2. Control de la caja nido.
3. Sensor de temperatura.
4. Servomecanismo.
5. Lector RFID.
6. Cámara y servidor de vídeo.
7. Acceso a los datos recogidos por la caja nido.
8. Enlaces y referencias.
3
Introducción.
Las cajas nido inteligentes recogen información sobre lo que sucede en el interior del
nido, mediante cámaras, sensores y otros equipos. Están conectadas a un servidor al
que envían la información recopilada, que es almacenada en una base de datos
MySQL.
En Horus usamos dos tipos de cajas nido:
Caja nido tipo A. Están controladas por un Arduino Mega. Actualmente
tenemos 20 cajas de este tipo en el silo de la Palma del Condado. Cuentan con
una balanza para recoger el peso de los individuos que entran al nido, un lector
RFID que detecta a los individuos marcados mediante la antena colocada en la
entrada, una cámara analógica en blanco y negro con un iluminador infrarrojo
conectada a un servidor de vídeo, un sensor de temperatura en el interior del
nido, 3 barreras infrarrojas (sobre la balanza y otras dos en el pasillo para
detectar entradas y salidas) y una trampilla para capturar individuos activada
por un servomecanismo.
Caja nido tipo B. Están controlada por una Beaglebone Black. Estas cajas son
más simples: como en el tipo anterior tienen un lector RFID, una cámara
analógica conectada a un servidor de vídeo y un servidor de vídeo y una
trampilla activada por un servomecanismo. No tienen balanza ni barreras
infrarrojas. Las nuevas cajas nido que se instalen en el silo y en el primillar de la
EBD serán de este tipo.
Las placas controladoras de cada caja permiten recoger la información de los sensores
(barreras infrarrojas y temperatura) y del lector RFID y la balanza, así como actuar
sobre el servomecanismo que cierra la trampilla:
Arduino Mega es un modelo de placa Arduino, que es una plataforma de
hardware libre para desarrollar proyectos multidisciplinares en una placa con
un microcontrolador. Para la programación se dispone de un entorno de
4
desarrollo integrado (IDE) que incluye soporte para los lenguajes de
programación C y C++. El programa que hemos elaborado para controlar la caja
nido se lo cargamos desde un ordenador.
Beaglebone Black es una placa computadora de hardware libre. Al ser una
placa computadora (Single Board Computer o SBC) tiene las características de
un ordenador en una placa de tamaño reducido y precio asequible, con las
ventajas que conlleva disponer de un sistema operativo. A diferencia de la
placa Arduino Mega, funciona con un sistema operativo que se puede cargar en
una tarjeta SD. Nosotros utilizamos la distribución Debian de Linux.
Arduino Mega
Beaglebone Black
5
Cajas nido tipo A.
1. Introducción.
Actualmente hay 20 instaladas en el silo de la Palma del Condado, en frente de las
ventanas sexta planta del edificio. En la siguiente imagen puedes ver un plano de la
planta donde están las cajas nido y una de ellas en frente de una de las ventanas (la
6W1). Los nidos se nombran indicando la planta (6), la orientación de la fachada (N,S,E
y W) y el orden (izquierda a derecha en el interior del edificio).
1. Sexta planta del silo
En la parte central de la planta hay una oficina donde está el servidor que procesa la
información recibida por las cajas nido y el servidor de almacenamiento donde para las
fotos y vídeos de los nidos. La imagen 2 muestra las ventanas del lado norte vistas
desde la cámara exterior instalada en la azotea, que se ve en la imagen 3.
6
2, 3 y 4. Interior de la sexta planta silo, ventanas y cámara exterior en la azotea
2. Descripción general.
Cada caja nido consta de un armario para la instrumentación y la caja nido
propiamente dicha (imagen 5). Cada armario tiene conexión a la red eléctrica y a una
red local conectada a internet en la oficina del silo. Todas las cajas nido son dobles, es
decir tienen dos nidos, pero sólo utilizamos la parte izquierda. En futuras ampliaciones
utilizaríamos el lado derecho de la caja para disponer de otro nido (en la figura 6
puede verse un esquema de la parte izquierda). La caja nido tiene un pasillo extraíble
(figuras 6 y 7) que permiten extraer los componentes para quitarlos o sustituirlos. En
este pasillo están los emisores y receptores de las barreras infrarrojas, el plato de la
balanza, que se encuentra justo debajo del pasillo, el sensor de temperatura y la
trampilla activada por el servomecanismo. La antena RFID se encuentra a la entrada de
la caja nido y está conectada al lector del armario de instrumentación.
5. Caja nido en el interior del silo
7
6. Esquema de la caja nido y pasillo
7. Sensores de temperatura, antena RFID y trampilla cerrada por el
servomecanismo
La caja nido está conectada al armario de instrumentación. Dos cables con conectores
RJ-45 en los extremos llevan los datos de la balanza, barreras infrarrojas y sensor de
temperatura a la placa Arduino, que además puede enviar la señal al servomecanismo
para que se mueva y baje la trampilla del pasillo. Tenemos dos fuentes de
alimentación: 12 voltios para el lector RFID, balanza y cámara y 5 voltios para Arduino,
barreras IR, servomecanismo y sensor de temperatura. En la figura 8 puedes ver un
esquema de los componentes y los tipos de conexiones. La placa del lector RFID envía
los códigos recibidos al Arduino, que lleva los datos recibidos de todos los equipos al
servidor en tiempo real.
8
8. Esquema de los componentes de la caja nido
La siguiente figura detalla las señales de cada cable que conecta la caja nido con el
conector del Arduino (caja Arduino se refiere a la caja de la imagen 10 que protege a la
placa).
9. Esquema de conexiones. Se puede descargar aquí
9
En la parte izquierda de la figura 9:
IR+, IR- (1 y 2): son los polos positivos y negativo de los emisores infrarrojos.
RX IR1, RX IR2, RX IR2 (3, 4 y 5): son las señales de los receptores infrarrojos.
DQ TEMP (6): es la señal de temperatura del sensor DS18B20.
BALANZA (7): son los datos transmitidos por la balanza mediante una conexión
serie.
SERVO (8): es la señal PWM que llega al servomecanismo para activarlo cuando
se quiera cerrar la trampilla del pasillo de la caja.
5V y GND (9 y 10): es la alimentación de los componentes de las barreras,
servomecanismo (que usa GND_SERVO en lugar de GND) y sensor de
temperatura.
GND_SERVO: es el polo negativo de la alimentación del servo, que se
desconecta cuando no se está usando.
En la parte derecha de la figura tenemos las conexiones del Arduino. Además de las
conexiones procedentes del pasillo (a color) también conectamos los pines de
transmisión y recepción de la conexión serie del lector RFID (pines 9 y 10 del conector),
una señal digital que está conectada al relé y desconecta la alimentación cuando no se
use (pin 3) y una señal digital procedente del servidor de vídeo (pin 5) que tiene el
objetivo de poder resetear la placa si es necesario.
La parte de abajo de la figura 9 muestra los pines del conector RS-232 de la balanza
conectada al Arduino, el conector de alimentación de éste, el relé que desactiva la
alimentación del Arduino y los pines de un potenciómetro que usamos para regular la
intensidad del emisor infrarrojo de forma que las barreras puedan funcionar
correctamente.
3. Control de la caja nido.
Para controlar la caja nido y conectar la placa Arduino Mega con los componentes
hemos diseñado 2 placas (figuras 11 y 12). Estas placas añaden funciones y además
10
proporcionan la interfaz de conexión. Añadimos la tarjeta Arduino Ethernet Shield para
conectar las placas a la red local. Las placas están diseñadas con KiCad, los esquemas
pueden descargarse en el apartado de enlaces.
A continuación se indican las funciones de las placas Arduino y las placa Horus que las
complementan, que permiten monitorizar todos los componentes del sistema
excepto el sistema de filmación de vídeo que es autogestionable:
Interfaz de conexión. Las placas Arduino están diseñadas para usar como un kit
de desarrollo de electrónica, y para la puesta en práctica es necesario que las
conexiones sean robustas y de fácil manejo, por lo ue añadimos las placas
Horus.
Reloj en tiempo real (RTC). Se ha creído conveniente su uso para proporcionar
una etiqueta de tiempo a la información que se trasmita.
Adaptación de niveles TTL a RS-232 en puertos serie. Los niveles de voltaje que
suministran los puertos serie de la placa arduinos son TTL (0-5 V) por lo que es
necesaria la adaptación a niveles según la norma RS-232.
Posibilidad de interfaz RS-485. Actualmente ningún módulo Arduino lo lleva
incorporado. Es útil porque se pueden conectar a este puerto hasta 32,
mientras que con los puertos RS-232 la comunicación es simpre punto a punto.
Sensor de temperatura interno. Su función controlar la temperatura de las
placas con el objetivo de evitar fallos en el sistema.
Reset remoto por comando. El controlador Arduino no tiene implementado
ningún comando software que realice el reset del dispositivo, aunque se puede
hacer por hardware con el pin de reset. Para ello usamos la salida digital de los
servidores de vídeo.
Recoger y analizar los pesos de la balanza a través de un puerto RS-232.
Recibir los códigos enviados por el lector RFID a través de un puerto RS-232
Detectar cortes en las barreras infrarrojas mediante la salida digital de los
receptores infrarrojos.
Recibir la temperatura del sensor mediante la interfaz 1-wire.
11
Enviar la señal digital al servomecanismo que cerrará la trampilla del pasillo de
la caja nido.
En la placa de la figura 12 o placa Horus 1 conectamos la alimentación de 5V y los
datos procedentes de la caja nido en el conector rojo de la izquierda de la placa, que
vienen de la placa Horus 2. Las funciones de la placa están indicadas en la figura y hay
que señalar que la conversión de 12V para alimentar la placa con 12 voltios no se está
usando ya que disponemos de una fuente de 5V con la que alimentar directamente a
la placa sin convertir la tensión.
La placa de la figura 11 o placa Horus 2 (que colocamos detrás de la caja blanca de la
figura 10) tiene los conectores RJ-45 para la conexión con el pasillo de la caja nido (a la
izquierda de la imagen), el potenciómetro (POT), la conexión con la placa Arduino
(conector rojo), el relé (en la parte superior) y los terminales de conexión para
conectar, como se indicó en el apartado anterior, la señal digital del servidor de vídeo,
la alimentación de 5 V y las señales de la conexión serie del lector RFID. Las conexión
en los terminales la realizamos de la siguiente forma (esquema):
1: alimentación 5V polo negativo.
2: alimentación 5V polo positivo.
3: tierra para la conexión con el servidor de vídeo.
4: señal digital procedente del servidor de vídeo.
5: tierra de la conexión con el lector RFID.
6: señal RX de la conexión con el lector RFID.
7: señal TX de la conexión con el lector RFID.
8-12: no se usan.
12
10. Placas que controlan la caja nido (1)
11. Placa Horus 2
13
12. Placa Horus 1
4. Componentes.
RFID.
La placa de las siguientes figuras muestran la placa RFID que utilizamos
(decodificador LID650 de Dorset para transponders ISO FDX-B) y que conectamos con
las placas de Arduino en el armario de instrumentación de la caja nido (según la
versión de la placa tiene 12 o 13 pines) de acuerdo con los pines indicados en la figura.
A la placa de la izquierda le hemos añadido un fusible de protección a la alimentación
(terminales R y N en la imagen). La figura 15 muestra el transponder en la anilla de PVC
que será detectado por la antena en la entrada de la caja nido y el lector RFID mandará
el código al Arduino.
13. Placa RFID (1)
14
14. Placa RFID (2)
15. Transponder RFID en la anilla de PVC
15
Balanza.
La balanza empleada en este proyecto es el modelo Blauscal-AH600 (imagen 16), que
permite un peso máximo de 600 gramos con una precisión de 0.01 g. Tiene salida de
datos RS-232C y USB. Tiene la ventaja de que transmite tanto medidas estables como
inestables, pudiendo obtener los pesos de los individuos en movimiento.
16. Balanza de precisión
Sensor de temperatura.
El sensor utilizado es el modelo DS18B20 de Maxim (datasheet), que tiene los pines
indicados en la figura 17 (VDQ es el que da la temperatura). Tiene las siguientes
características:
Interfaz 1-Wire.
Precisión configurable de 5°C a 0.0625°C.
Rango de temperatura –55°C a +125°C.
Alimentación de 5V.
16
17. Sensor de temperatura DS18B20
Servidores de vídeo.
Para almacenar fotos y vídeos de los nidos que se graban en el servidor NAS, la imagen
de la cámara analógica se digitaliza mediante un servidor de vídeo. Usamos el servidor
VS8102 de Vivotek y la minicámara KPC-500 blanco y negro, que posee una lente de
2,45 mm con un ángulo de visión de 150º y 0,0003 Lux, adecuado para la poca
luminosidad en el interior de la caja nido. Las conexiónes de este equipo se encuentran
en la figura 18 (usamos los pines 2 y 4 para la conexión de una señal digital con el
Arduino).
Podemos acceder a cada uno de los servidores de vídeo de los nidos del silo de forma
remota. Además hemos compuesto un mosaico con las imágenes de todas las cámaras
para verlas al mismo tiempo. Las cámaras web de los nidos del silo pueden verse en la
página web de Horus en este enlace.
17
18. Servidor de vídeo Vivotek 8102 (1)
19. Servidor de Video Vivotek 8102 (2)
18
20. Mosaico de las cámaras de las cajas nido
Los servidores de vídeo tiene activada grabación por detección de movimiento, de
forma que se graban fotos y vídeos de 10 segundos cada vez que se detecta actividad
en el nido. Entre los años 2011 y 2015 hemos grabado una cantidad de información en
cada nido según su actividad. Aquí puedes ver más información (carpeta de Google
Drive).
21. Tamaño de fotos y vídeos del silo
19
5. Base de Datos.
Los datos que se están recogiendo en el silo en cada nido se almacenan en una base de
datos MySQL, que guarda los datos en el silo, y que se copia periódicamente en la EBD.
Cada nido está almacenando datos en las siguientes tablas:
1. Detección del corte de barrera infrarroja 1 (barrera exterior) o 2 (barrera
interior): se almacena en la tabla SENSORPASO.
2. Pesos de la Balanza en gramos: se almacenan en la tabla BALANZA.
3. Códigos RFID (ISO-FDX-B animal o Trovan Unique): se almacenan en la tabla
RFID
4. Temperatura ambiente en el interior del nido en ºC: se almacena en la tabla
TEMPHUME.
Aquí puedes descargar un esquema de la base de datos (es un archivo con extensión
mwb, que se puede abrir con MySQL Workbench). A continuación se muestran los
campos de cada tabla. A cada nido le corresponde un número de objeto que se
muestra en la siguiente figura.
22. Correspondecia entre el nido y el número de objeto en la base de datos
20
Campos de las tablas de la base de datos.
1.- Barreras infrarrojas:
Campo Tipo Null Clave Comentario
ID_SEIO int(10) unsigned No PRI auto_increment
OBJE_X_SEIO int(10) unsigned No MUL Identificador del nido
CREADO varchar(20) No
FECHACREADO datetime No
MODIFICADO varchar(20) No
FECHAMODIFICADO datetime No
TIPO int(10) unsigned No
1 o 2 según la barrera infrarroja
EVENTO int(10) unsigned No
META_X_PASO int(11) Yes MUL
2.- Balanza
Campo Tipo Null Clave Comentario
ID_BALA int(10)
unsigned No PRI auto_increment
META_X_BALA int(10)
unsigned Yes MUL
OBJE_X_BALA int(10)
unsigned No MUL Identificador del nido
TARA float No MUL tara en gramos
CREADO varchar(45) No
FECHACREADO datetime No
MODIFICADO varchar(45) No
FECHAMODIFICADO datetime No
21
VALOR float No
peso en gramos
MEDIDA int(10)
unsigned Yes
COMENTARIO varchar(255) Yes
TIPOMEDIDA int(10)
unsigned Yes
Indica si la medida es estable (1) o
inestable (0)
MODOPESADA int(10)
unsigned Yes
EVENTO int(10)
unsigned No
3.- RFID:
Campo Tipo Null Clave Comentario
ID_RFID int(10) unsigned No PRI auto_increment
META_X_RFID int(10) unsigned Yes MUL
OBJE_X_RFID int(10) unsigned No MUL Identificador del nido
ANIM_X_RFID int(10) unsigned Yes MUL
CREADO varchar(45) No
FECHACREADO datetime No
MODIFICADO varchar(45) No
FECHAMODIFICADO datetime No
IDENTIFICADO_ISO bigint(20) Yes
TIPO varchar(20) No
CODIGO_PAIS_ISO int(10) unsigned Yes
CODIGO_NO_ISO varchar(40) Yes
EVENTO int(10) unsigned No
22
4.- Temperatura:
Campo Tipo Null Clave Comentario
ID_TEHU int(10)
unsigned No PRI auto_increment
META_X_TEHU int(10)
unsigned Yes MUL
OBJE_X_TEHU int(10)
unsigned No MUL Identificador del nido
CREADO varchar(45) No
FECHACREADO datetime No
MODIFICADO varchar(45) No
FECHAMODIFICADO datetime No
RHUMEDAD double Yes
Anteriormente había instalados sensores
de temperatura y humedad además de
sensores de temperatura. Actualmente
no se utiliza este campo.
TEMPERATURA double No
ºC
TIPO_MEDIDA varchar(20) No
Identificador del sensor de temperatura
6. Monitorización con Nagios.
Nagios es un sistema de monitorización de redes de código abierto muy utilizado, para
controlar equipos y servicios. Para controlar los equipos instalados tanto en el silo
como en la Palma del Condado como en la EBD y comprobar su correcto
funcionamiento se ha instalado Nagios en la máquina virtual de Horus
(horus.ebd.csic.es, cuya IP es 161.111.228.128), junto con otras herramientas
adicionales como Nagvis, para visualizar las comprobaciones en un mapa.
23
23. Nagios en horus.ebd.csic.es
24. Nagvis en horus.ebd.csic.es
Muchas de las comprobaciones que se han programado en el sistema son pasivas, es
decir hechas por programas externos que indican el resultado de cualquier
comprobación a Nagios. Se han utilizado scripts de Linux programados en el cron en la
máquina donde se ha instalado Nagios. Además las comprobaciones indicadas, existen
las comprobaciones de la propia máquina Horus y del servidor del silo, donde se ha
usado NRPE, un plugin de Nagios que permite hacer comprobaciones activas en otros
hosts. Para acceder a los equipos del silo con sus direcciones IP y facilitar las
comprobaciones realizadas por Nagios se ha creado una VPN de tipo Intranet entre el
servidor del silo y la máquina de Horus horus.ebd.csic.es.
24
25. NRPE de Nagios
Se han establecido los siguientes grupos de comprobaciones:
HORUS-SILO: para monitorizar el servidor de silo y la conexión con otros
equipos (cámara de seguridad, cámara exterior, servidor NAS, portátil, PC
“Sínope” y Switch).
HORUS-EBD: para controlar la máquina virtual donde está instalado el propio
Nagios y la conexión con otros equipo (servidor NAS, nidos del primillar y
cámara exterior).
HORUS-CONEXIONES: para monitorizar el estado de las 2 conexiones a internet
que hay en el silo (ADSL, utilizada hasta abril de 2014, y la conexión a través de
un radioenlace, actualmente la conexión principal)
HORUS-SILO-SERVIDORES-VIDEO: para comprobar que los servidores de vídeo
del silo reciben imagen de la cámara analógica y también graban imágenes y
vídeos de los nidos.
HORUS-SILO-ARDUINOS: en este apartado se incluyen siguientes
comprobaciones para cada una de las cajas nidos del silo:
o Que el programa de recogida de datos se está ejecutando en el servidor.
o Que se almacenan datos en la base de datos.
o Número de muestras en la base de datos del sensor de temperatura,
lector RFID, balanza y barreras infrarrojas.
HORUS-SILO-OTROS: este grupo incluye la comprobación de que hay conexión
con otro host externo para determinar si no hay conexión con los equipos
debido a algún corte en el acceso a internet.
25
7. Enlaces y referencias.
1. Código C++ que hemos programado para ejecutar en el Arduino de cada caja
nido (aquí) y para controlar en el servidor las cajas nido (aquí).
2. Esquema de la base de datos del silo.
3. Esquema de conexiones del silo, conexiones terminales Horus 2 (imagen),
placa Horus 2 y placa pasillo caja nido (PDF).
4. Placas Horus (KiCad): 1 y 2.
5. Arduino: Arduino Mega 2560, Arduino Ethernet Shield.
6. Componentes: RFID LID650 (web y manual), sensor de temperatura DS18B20
(datasheet), servidor de vídeo Vivotek VS8102(web y manual) y balanza (web).
7. Recopilación de enlaces Horus.
8. Información sobre las fotos y vídeos grabados entre 2011 y 2015 (carpeta de
Google Drive).
9. Web monotorización de Horus con Nagios (requiere usuario y contraseña).
10. Guía rápida de Nagios para Horus (documento de Google Drive)
26
Cajas nido tipo B.
1. Introducción.
El objetivo de este documento es tener un guía para usar y configurar las cajas nido
que hemos llamado del tipo B. Estas cajas están controlada por una Beaglebone Black y
tienen menos componentes conectados que en el caso anterior: un sensor de
temperatura, un lector RFID, una cámara analógica conectada a un servidor de vídeo y
una trampilla activada por un servomecanismo. Las nuevas cajas nido que se instalen
en el silo y en el primillar de la EBD serán de este tipo. En 2015 se probó instalar una
caja nido de este tipo en el primillar de la EBD, que cuenta con cajas como la que se
muestra continuación.
1. Caja nido del primillar de la EBD
27
Beaglebone Black es una placa computadora de hardware libre. Nos referiremos a ella
como BB o BBB. Al ser una placa computadora tiene las características de un
ordenador en una placa de tamaño reducido y precio asequible, con la ventaja de
poder usar un sistema operativo, a diferencia de la placa Arduino Mega, que además
se puede cargar en una tarjeta SD.
2. Caja nido tipo B
En la imagen anterior vemos el esquema de la caja nido donde conectamos los
componentes a una BBB y vemos los resultados en una interfaz web:
Sensor de temperatura: la temperatura del interior del nido se almacena
periódicamente.
Servomecanismo: el usuario lo activa de forma remota para cerrar una
trampilla.
Lector de RFID: se almacenan RFID detectados.
Cámara: en nuestro caso vamos a usar una cámara analógica conectada a un
servidor de vídeo como en el otro tipo de caja, aunque la BB tiene la posibilidad
de usar una cámara web conectada al puerto USB, que podremos usar más
adelante, para retransmitir directamente un stream de vídeo y grabar fotos y
vídeos del nido cuando se produzcan eventos, por ejemplo una detección de un
código RFID.
28
2. Control de la caja nido.
El control de la caja nido lo realiza la Beaglebone Black (BB o BBB). La BB tiene una CPU
ARM a 1 GHz y 512 MB de RAM. Sus especificaciones y más información puede
encontrarse en su página web: http://beagleboard.org/black. Cuenta con una amplia
comunidad de usuarios y que posibilitan mejoras continuas y correcciones de errores.
Su manual de referencia se puede descargar aquí.
Para controlar la caja nido y conectar la BB hemos diseñado una placa, que añade
funciones y además proporcionan la interfaz de conexión. Las placas están diseñadas
con KiCad, los esquemas pueden descargarse aquí (Google Drive).
3. Placa diseñada para caja nido tipo B
La imagen anterior muestra la placa, que se conecta encima de la BB. Cuenta con el
circuito RTC para que la Beaglebone no pierda la hora cuando se desconecta y la
adaptación de niveles TTL a RS-232 para los puertos serie. En el conector de la
izquierda se conecta la alimentación de 5 voltios y a la derecha (CON1) se pueden
conectar el servo, el sensor de temperatura y el lector RFID. Hay conexiones para dos
servos y lectores RFID, aunque de momento sólo usamos uno de cada. Los pines
utilizamos en la BB se muestran en la siguiente figura. Además hemos usado una
batería LiPo para la BB como se describe en este enlace.
29
4. Pines que usamos en la Beaglebone Black
En Horus utilizamos el sistema operativo Debian para usarlo en la tarjeta SD de la BB.
Puede descargarse en este enlace: http://beagleboard.org/latest-images. Los pasos
que seguimos para usar el sistema operativo en la BB son:
Grabar archivo imagen *.img en una tarjeta SD con Ubuntu Image Writer
mediente imagewriter.
Acceder por ssh a través del cable USB usando la dirección IP 192.168.7.2:
root@jesus:~#ssh [email protected]
Instalar x11vnc o tightvnc en BB, para poder acceder por escritorio remoto
además de por consola, además de los programas como emacs que puedan ser
útiles.
Configurar idioma, fecha y hora mediante dpkg-reconfigure
Para ejecutar tareas al inicio para leer automáticamente la temperatura,
códigos RFID, activar el servo, etc. se crean scripts en la carpeta /etc/init.d y se
utiliza update-rc.d para crear los enlaces a los scripts de inicio.
30
Las modificaciones realizadas para controlar la caja nido las hemos grabado en una
imagen del sistema operativo, que se puede descargar en la siguiente carpeta (Google
Drive). Una vez copiada una imagen de la tarjeta SD, podemos arrancar una nueva
placa BB con esta tarjeta. Para empezar a usarla correctamente editamos los archivos
/var/www/identificador.txt y /root/identificador.txt cambiando el identificador a
BBB_nn (donde nn es un número que identifica la caja nido, 02 por ejemplo).
En la siguiente figura se muestra un esquema de los programas utilizados en la BB para
recoger datos de temperatura, RFID y activaciones del servo (el programa de la cámara
no se va usar ya que utilizamos una cámara analógica conectada a un servidor de vídeo
en lugar de una cámara web conectada al puerto USB de la BB).
5. Programas que usamos en la Beaglebone Black
3. Sensor de temperatura.
El sensor de temperatura que usamos es el mismo que en el otro tipo de caja nido, el
sensor DS18B20 (datasheet). La comunicación se realiza a través del bus 1-Wire, que
requiere una sola línea de datos. El rango de funcionamiento es -55 ° C a + 125 ° C y
tiene una precisión de± 0.5 ° C en el rango de -10 ° C a + 85 ° C.
31
6. Sensor de temperatura DS18B20
En la siguiente figura se muestra la conexión del sensor con una BB:
7. Sensor de temperatura DS18B20 con BB
Para usar el sensor hay que crear y compilar el Device Tree para la interfaz 1-Wire del
dispositivo DS18B20, siguiendo los siguientes pasos, que se han incluido en el arranque
en /etc/inti.d/inicio:
Crear el archivo /root/sensor_temperatura/w1.dts, que se puede descargar
aquí (enlace a Google Drive)
Compilarlo, copiarlo a la carpeta /lib/firmware y cargarlo:
32
root@beaglebone:~# dtc -O dtb -o w1-00A0.dtbo -b 0 -@ w1.dts
root@beaglebone:~# cp w1-00A0.dtbo /lib/firmware
root@beaglebone:~# echo w1>/sys/devices/bone_capemgr.9/slots
Y por último comprobar que lo anterior es correcto:
root@beaglebone:~# cat /sys/devices/bone_capemgr.9/slots
...
4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
7: ff:P-O-L Override Board Name,00A0,Override Manuf,w1
Para leer la temperatura del sensor conectado a la placa (la carpeta 28… indica la
dirección del sensor):
root@beaglebone:~/sensor_temperatura#cat /sys/devices/w1_bus_master1/28-
00000315d5f3/w1_slave
9c 01 4b 46 7f ff 04 10 7a : crc=7a YES (Indica una temperatura de 25.750 ºC)
Para leer la temperatura y almacenarla en un fichero de forma automática se usa el
script leer_temperatura.sh que lee la temperatura en grados centigrados del sensor
DS18B20 (ver el correspondiente código en esta carpeta de Google Drive). La
temperatura se guarda automáticamente incluyendo este script en el cron y los
resultados se guardan en 3 ficheros de texto:
/root/sensor_temperatura/registro_temperatura.txt
/var/www/registro_temperatura.txt: para mostrar el último registro en la
interfaz web.
/var/www/registro_temperatura_horus.txt: para mostrar todo el registro en la
interfaz web.
El formato de estos archivos es temperatura(ºC) – fecha – identificador. El contenido
de /root/sensor_temperatura/registro_temperatura.txt es similar a (se puede abrir con
editor de archivos csv con los campos separados por punto y coma):
33
…
25.250 - FECHA: 11-18-2014 12:40:02 - BBB_01
25.250 - FECHA: 11-18-2014 12:41:02 - BBB_01
25.250 - FECHA: 11-18-2014 12:42:02 - BBB_01
25.250 - FECHA: 11-18-2014 12:43:02 - BBB_01
4. Servomecanismo.
El servomecanismo se utiliza para cerrar una trampilla en la entrada del nido y realizar
capturas de individuos que entren en la caja nido. Usamos el mismo servomecanismo
digitales en los dos tipos de caja (en la imagen), que conectamos a una BB usando un
relé, de acuerdo a las tablas siguientes.
8. Servomecanismo con BB
SERVO BB
Señal PWM (cable naranja) Resistencia 1K para proteger BBB - P8_13 BBB
GND (cable marrón) ⅂ Relé
Servo VDD (cable rojo) 5V fuente externa
Tabla conexión servo – BB
34
RELÉ FUENTE 5V EXTERNA / BB / SERVO
VCC 5 V fuente externa
IN P9_12 BBB (GPIO_60)
GND GND fuente externa - P8_2 (DGND) BBB
୮ no conectar
\ GND relé
⅂ GND SERVO
Tabla conexión BB con relé (desconecta alimentación del servo mientras no se esté
usando)
Para activar la señal PWM de la Beaglebone (am33xx_pwm), y utilizar el pin
correpondiente para ello (P8_13 en el caso de Horus) seguimos los siguientes pasos:
root@beaglebone:~# echo am33xx_pwm > /sys/devices/bone_capemgr.?/slots
root@beaglebone:~# echo bone_pwm_P8_13 > /sys/devices/bone_capemgr.?/slots
root@beaglebone:~# cat /sys/devices/bone_capemgr.?/slots
...
4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
7: ff:P-O-L Override Board Name,00A0,Override Manuf,am33xx_pwm
8: ff:P-O-L Override Board Name,00A0,Override Manuf,bone_pwm_P8_13
root@beaglebone:~# cd /sys/devices/ocp.?/pwm_test_P8_13.??/;ls
driver duty modalias period polarity power run subsystem uevent
Como podemos ver ya podemos usar el pin correspondiente para activar el servo. En la
siguiente tabla se encuentran las funciones de los ficheros de la carpeta PWM:
Fichero Función
period Período (ns) de la señal PWM conectada al servo. Debe ser igual o mayor que
duty
duty Período de tiempo en el que la señal permanece en el valor indicado en duty
run Habilita (1) o deshabilita (0) señal PWM
polarity Si vale 1: la señal empieza a nivel alto durante la duración de duty
35
Si vale 0: la señal empieza a nivel bajo durante la duración de duty
Tabla con las funciones de los arrchivos PWM
Los parámetros los ajustamos para usarlos en la caja nido:
root@beaglebone:/sys/devices/ocp.3/pwm_test_P8_13.15#echo 0 > run (Desactivar PWM)
root@beaglebone:/sys/devices/ocp.3/pwm_test_P8_13.15#echo 500000 > period
root@beaglebone:/sys/devices/ocp.3/pwm_test_P8_13.15#echo 200000 > duty
root@beaglebone:/sys/devices/ocp.3/pwm_test_P8_13.15#echo 1 > run (Activar PWM)
root@beaglebone:/sys/devices/ocp.3/pwm_test_P8_13.15#echo 0 > run (Desactivar PWM)
Para realizar las tareas anteriores en el inicio del sistema, se ha modificado el archivo
/etc/init.d/inicio como se indicó anteriormente. También es posible editar el archivo
/boot/uboot/uEnv.txt e incluir la siguiente línea (de acuerdo al pin que estamos
usando): cape_enable=capemgr.enable_partno=am33xx_pwm,bone_pwm_P8_13
Además tenemos que usar una señal digital para controlar el relé que activa y
desactiva la alimentación del servo. Para ello se ha usado la salida digital P9_12
mediante:
root@beaglebone:~# echo 60 > /sys/class/gpio/export
Podemos activar el servo de forma remota usamos el script servo.sh que gira el servo
dos veces cerrando la trampilla de la caja nido. Este script está en la siguiente carpeta
compartida de Google Drive.
El servo puede activarse desde la interfaz web. Para ello se utiliza el script
/etc/init.d/activar_servo_web que ejecuta en segundo plano desde el arranque el
programa /root/servo/codigo/servocpp (ver código fuente en la carpeta compartidao).
5. Lector RFID.
La placa de las siguientes figuras muestran la placa RFID que utilizamos (decodificador
LID650 de Dorset para transponders ISO FDX-B) y que conectamos con la placas BB
(según la versión de la placa tiene 12 o 13 pines) de acuerdo con los pines indicados en
36
la figura. A la placa de la izquierda le hemos añadido un fusible de protección a la
alimentación (pines R y N en la imagen).
9. Placa RFID (1)
10. Placa RFID (2)
37
Las siguientes figuras muestran cómo se hace la conexión del lector con la BB.
11. Lector RFID
12. Conexión RFID – BB
38
El lector RFID transmite los datos por el puerto serie, conectado a la UART1 de la BB a
través del circuito conversor RS-232 – TTL. De forma similar a los apartados anteriores,
se habilita el puerto serie 1 de la BB mediante:
root@beaglebone:~# echo BB-UART1 > /sys/devices/bone_capemgr.*/slots
Para habilitar el puerto serie 1 de la BB al inicio incluimos la línea echo BB-UART1 >
/sys/devices/bone_capemgr.9/slots en el archivo /etc/init.d/inicio de acuerdo con lo
descrito anteriormente.
Podemos ver los códigos RFID recibidos por el puerto serie se puede usar algún
programa como Cutecom, usando el puerto serie 1 de la BB (/dev/ttyO1) a 19200 bps,
sin paridad, con 8 bits de datos y un bit de parada. Del mismo modo mediante stty se
puede configurar el puerto serie para ver luego las tramas recibidas del lector RFID con
od. La opción cs8 de stty indica 8 de bits de datos y -cstopb un bit de parada en la
configuración del puerto serie de la BB.
Para leer los códigos RFID e insertarlos en ficheros de texto de forma automática se ha
escrito un programa en C++(ver código fuente de Example1.cpp en la carpeta de
Google Drive). Para compilar el código fuente del programa:
root@beaglebone:~/rfid/codigo/serialib# g++ Example1.cpp serialib.cpp -o serial
De forma similar a temperatura, los códigos RFID guardan en 3 ficheros de texto:
/root/rfid/registro_rfid.txt
/var/www/registro_rfid.txt: para mostrar el último registro en la interfaz web.
/var/www/registro_rfid_horus.txt: para mostrar todo el registro en la interfaz
web.
El formato de estos archivos es RFID-decimal fecha identificador. El contenido de
/root/rfid/registro_rfid.txt es similar a (se puede abrir con editor de archivos csv con
los campos separados por punto y coma):
39
…
5099597 - FECHA: 18-11-2014 12:28:38 - BBB_01
5099597 - FECHA: 18-11-2014 12:40:52 - BBB_01
3580199 - FECHA: 18-11-2014 12:41:02 - BBB_01
…
Los códigos RFID se leen de forma automática desde del arranque mediante el script
/etc/init.d/rfid que ejecuta en segundo plano desde el arranque el programa
/root/rfid/codig/serialib/serial.
El programa que lee los códigos serial tiene la posibilidad de ejecutar otro script
/root/rfid/codigo/serialib/test.sh. Esto se puede utilizar para ejecutar el script
/root/webcam/webcam.sh y almacenar una foto y/o video de la webcam en
horus.ebd.csic.es cada vez que se lee un código RFID. Esto no se está usa actualmente
ya que en lugar de una webcam conectada al puerto USB de la BB hemos optado por
usar, al menos de momento, la misma cámara analógica que en el caso del otro tipo de
caja nido, conectada también a un servidor de vídeo.
El manual del lector RFID que usamos está disponible en este enlace y el programa
para conectarnos con un portatil al lector RFID en este otro (ambos enlaces llevan a la
web de Dorset)
La configuración que hemos usado en el lector RFID para estas cajas es la siguiente:
Communications: 19200 bps
Settings:
Transponders list: Trovan Unique, ISO FDX-B. Hexadecimal.
Read options: Use all ID codes.
Decoder options: Use LED during read, 2 sec waittime after read, Use LED
during waittime, Antenna on, Relay continously on.
Trovan Flex: 7 Number of blocks
Conexión del lector RFID:
40
En las cajas nido el lector RFID lo podemos conectar directamente a la Beaglebone.
Solemos usar conectores RS-232 (hembra en el lector y macho en la BB), por si
queremos conectarnos directamente al lector con un portátil utilizando ese
conector. En este documento de Google Drive se ha indicado más detalles sobre la
configuración del lector RFID y su conexión con la BB, directamente o través
conectores RS-232.
6. Cámara y servidor de vídeo.
De la misma forma que las cajas instaladas en el silo, la imagen de la cámara analógica
se digitaliza mediante un servidor de vídeo y grabamos imágenes y vídeos de los nidos
por detección de movimiento que guardamos en un servidor de almacenamiento.
Utilizamos un iluminador infrarrojo junto con la cámara para ver el nido en la
oscuridad. En la siguiente imagen aparecen la cámara y el servidor de vídeo que
usamos (Vivotek 8100, más pequeño pero similar al que utilizamos en el silo).
13. Cámara y servidor de vídeo VS8100
También existe la posibilidad de conectar una webcam al puerto USB de la BB, o
incluso conectar una cámara analógica a una capturadora de vídeo y la salida de ésta al
puerto USB de la BB. La cámara web que se probó aparece en la siguiente imagen. Para
retransmitir el stream de la cámara usamos mjpg-streamer, para ver la imagen a través
de internet con la IP de la placa. Capturar una imagen o grabar un vídeo de la webcam
es sencillo ya que basta usar el comando wget en la propia BB, y en el caso del vídeo
se puede convertir al formato mp4 mediante ffmpeg.
41
14. Cámara web conectada al puerto USB de la BB
15. Captura de la cámara web
7. Acceso a los datos recogidos por la caja nido.
Mediante la interfaz web que hemos realizado en la BB podemos acceder a la imagen
de la cámara del nido, a las lecturas del sensor de temperatura, los códigos RFID leídos,
y así como activar el servo de forma remota. Se accede en la dirección
http://IP_BB:8080/horus.php, donde IP_BB es la dirección IP de la BB en la interfaz
42
eth0 (en el acceso por USB se utiliza la IP 192.168.7.2). Además podemos acceder por
FTP a los datos guardados en la BB en la dirección ftp://IP_BB.
En la interfaz web se muestran:
La imagen de la cámara.
El último registro de temperatura y RFID leído.
Un botón para activar el servo.
Enlaces para los registros almacenados de temperatura, lecturas RFID y
activaciones del servomecanismo.
16. Interfaz web caja nido tipo B (1)
43
17. Interfaz web caja nido tipo B (2)
Los datos de temperatura, RFID y activaciones del servo contenidos en los ficheros de
la BB pueden almacenarse en una base de datos. En 2015 se instaló una caja tipo B en
el primillar de la EBD para probar este tipo de caja nido y se utilizó con base de datos
MySQL con el esquema de la imagen siguiente. Para introducir los datos en la base de
datos se realizó un programa para parsear los ficheros de datos de la BB
periódicamente accediendo desde el servidor de Horus en la EBD.
18. Esquema de la base de datos de la caja nido que se instaló en el primillar
44
8. Enlaces y referencias.
1. Manual de referencia de la Beaglebone Black y página web de Beagleboard.
2. Utilización de batería LiPo con Beaglebone Black.
3. Sensor de temperatura (datasheet) y servidor de vídeo (manual de usuario)
4. Información sobre el acceso a los datos de la caja nido que se instaló en el
primillar: archivo de txt.
5. Recopilación de enlaces Horus.
6. Esquemas de KiCad de la placa diseñada para añadir a la BB: enlace de Google
Drive.
7. Web monotorización de Horus con Nagios (requiere usuario y contraseña).
8. Guía rápida de Nagios para Horus (documento de Google Drive)