Con la reciente salida al mercado de la nueva Raspberry Pi Zero con slot para cámara, se abre un gran abanico de posibilidades gracias al reducido tamaño de este dispositivo, que ofrece las mismas prestaciones que el modelo B+.
Si a ello añadimos el nuevo modelo de cámara de 8 megapíxels que la fundación ha lanzado recientemente, se nos pueden ocurrir infinidad de proyectos; en este tutorial veremos como realizar de forma sencilla uno, o varios timelapses aprovechando el demonio del sistema cron, y la herramienta raspistill.
De los cambios en el diseño que ha sufrido Pi Zero de un modelo a otro, únicamente cabe destacar el conector para la cámara, el leve desplazamiento que han sufrido las conexiones PP1 y PP6 ya que puede afectar a la compatibilidad con algunos HAT del mercado, y la necesidad de adquirir un cable adicional, distinto al original en uno de sus extremos debido al reducido tamaño de la ranura de conexión.
Para empezar a desarrollar este pequeño proyecto, primero actualizaremos tanto el sistema como el kernel de nuestra Raspberry, para que esta detecte nuestro nuevo modelo de cámara, y finalmente la activaremos en el menú raspi-config.
pi@zero:~$ sudo apt-get update && sudo apt-get upgrade && sudo rpi-update
pi@zero:~$ sudo raspi-config
Tras reiniciar para aplicar los cambios probaremos la cámara con la herramienta raspistill, con la siguiente línea de ejemplo, generaremos siete imágenes en un lapso de tiempo de un minuto; podemos ver todas las opciones que nos ofrece raspistill consultando el manual de la herramienta mediante la orden man del terminal.
pi@zero:~$ raspistill -o a%04d.jpg -t 60000 -tl 10000
A continuación, y tras comprobar que la cámara funciona crearemos el directorio timelapse en el directorio home del usuario pi, que contendrá los subdirectorios destinados a alojar las imágenes capturadas mediante la cámara de nuestra Raspberry.
pi@zero:~$ mkdir /home/pi/timelapse
Dentro de la carpeta creada en el anterior paso, vamos a escribir un script al que he llamado «tomafoto«; cada vez que lo ejecutemos obtendremos una fotografía de la cámara con la hora y el minuto actuales como nombre, y en formato jpg.
#!/bin/bash
MIN_FOTO=$(date +%H:%M)
DIRECTORIO=$(date +%d_%m_%y)
raspistill -o /home/pi/timelapses/$DIRECTORIO/$MIN_FOTO.jpg
Para terminar añadiremos las siguiente líneas de código en el archivo /etc/rc.local para que cada vez que iniciemos el sistema, se cree un subdirectorio para el día en el caso de que no se haya hecho con anterioridad, y con la fecha actual como nombre; es importante situarlas sobre la última linea de dicho script, que es la que contiene «exit 0«.
#Comprueba si existe la carpeta de hoy, y si no, la crea.
if [ ! -d /home/pi/timelapses/$(date '+%x'|tr -s “/” “_”) ]; then
su -c "mkdir /home/pi/timelapses/$(date '+%x'|tr -s “/” “_”)" pi
printf "Se ha creado el directorio de timelapse de hoy"
fi
exit 0
Tras reiniciar, podemos comprobar que se ha creado correctamente el directorio que contendrá las imágenes captadas a lo largo del día de hoy mediante la salida en pantalla durante el arranque del sistema, o en su defecto mediante el comando «ls«.
En mi caso, voy realizar un viaje en el que pretendo desconectar tras un duro año de trabajo y estudios, por lo que mi idea es que el proyecto empiece a capturar imágenes automáticamente al alimentar mi Raspberry Pi; utilizaré para ello el demonio del sistema cron, ya que para el uso que le daré resultará más estable que la opción timelapse de la propia herramienta raspivid.
pi@zero:~$ crontab -e
no crontab for pi - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano
3. /usr/bin/vim.tiny
Choose 1-3 [2]: 2
En el archivo cron del usuario, debemos añadir una línea invocando al script tomafoto e indicándole con que frecuencia debe ser ejecutado automáticamente; a continuación podemos ver algunos ejemplos de sintaxis con distintas frecuencias de ejecución.
# m h dom mon dow command
#Capturamos una imagen cada minuto.
* * * * * /home/pi/timelapses/tomafoto
#Capturamos una imágen cada 5 minutos.
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/pi/timelapses/tomafoto
#Capturamos una imágen cada 10 minutos.
0,10,20,30,40,50 * * * * /home/pi/timelapses/tomafoto
Las variables utilizadas para dar nombre a los subdirectorios y las imágenes que estos contienen, nos permiten identificar mediante la fecha en el caso de los directorios, y la hora y el minuto en el de las capturas con el fin de compilar luego un vídeo partiendo de las imágenes tomadas como veremos en la siguiente entrega de este tutorial.
Si te ha gustado puedes seguirme en Twitter, Facbook, Google+, Linkedin, Feedly, o compartirlo con los botones ubicados debajo de esta publicación, si tienes cualquier pregunta o sugerencia no dudes en comentar.
Te agradezco todo el esfuerzo de este estupendo site, vaya por delante mi reconocimiento. Hola estoy tratando de desarrollar algo similar a lo que has propuesto en controles domóticos, pero he tenido problemas en el control de la raspicam (No funciona). He colocado el código en la dirección web. No funciona el código raspicam. Por otro lado no me funciona el sistema cronetap, lo he probado en otro ordenador a parte de la raspi, con LinuxMint y no ejecuta las tareas programadas. Algo no estoy haciendo bien. Un saludo.