Archives de catégorie : BOA Pi TimeLapse

7 – La capture d’image

Bien que la qualité des images soit moindre par rapport à un véritable appareil photo, j’ai opté pour une webcam. Bien supportée par le Raspberry Pi d’après le site eLinux.org et ne nécessitant pas d’alimentation auxiliaire, la Logitech Logitech C525 s’est imposé d’elle même.

IMG_4468

Voici les caractéristiques principales de la caméra, directement reprises du site de Logitech :

  • Capture vidéo HD: jusqu’à 1 280 x 720 pixels
  • Technologie Logitech Fluid Crystal™
  • Mise au point automatique
  • Photos: jusqu’à 8 mégapixels (avec interpolation logicielle)

Test de capture

Pour se rendre compte de la qualité des photos prises en extérieur, voici quelques exemples (Photos prises depuis mon balcon, en utilisant la commande streamer) :

streamer -f jpeg -s 1280x720 -j 100 -o webcam_`date "+%s"`.jpeg

webcam_1363424816_05

Chaque image prise en qualité 100% pèse environ 380 kB. Avec une image toutes les 10 minutes, de 8h à 18h soit 60 images par jour, on arrive à un peu plus de 22 Mo par jour. La carte mémoire de 32Go suffira largement 🙂

En revanche je suis assez déçu de la qualité de la photo. J’ai l’impression que l’image n’est pas nette… J’ai testé sans la compression jpeg, et le résultat est le même.

En intérieur, le résultat n’est pas mieux :

webcam_1363425719_14

Je pense qu’avec une webcam, on ne peut pas s’attendre à des miracles. Au pire, il suffira d’en changer pour un modèle plus performant.

Le script de capture

Etant donné l’espace mémoire dont je dispose (32Go), je vais prendre les images directement en ppm. Ce qui permettra également de soulager le CPU du Pi qui n’aura pas à compresser les images en JPEG. Il faut alors compter 2,8 Mo par photo, soit environ 168 Mo par jour.

Afin d’être certain que la caméra s’adaptera aux conditions de luminosité ambiante et puisse ajuster le focus, il convient de prendre une rafale d’une dizaine d’images. Heureusement, streamer permet de définir un nombre d’images à capturer et une fréquence. Après quelques tests, 20 images en 2 secondes est un bon compromis.

Il est inutil de conserver toutes les images, on peut supprimer les 15 premières, et conserver les 5 autres pour faire une sélection plus tard lors du montage du time-lapse.

Voici un premier script bash qui permet de réaliser cela en quelques lignes :

#!/bin/bash

output_dir=/root/timelapse

# -f ppm (format ppm)
# -s 1280x720 (résolution de l'image largeur x hauteur)
# -t 20 (capturer 10 images)
# -r 5 (capturer 5 images par seconde)
# -o nom_du_fichier_de_sortie.ppm

streamer -f ppm -s 1280x720 -t 20 -r 5 -o $output_dir/timelapse_`date "+%F_%H-%M"`_00.ppm

# supprime les 15 premières images de chaque série

for i in `seq 0 14` ; do
  if [ $i -lt 10 ] ; then
    j="0$i"
  else
    j=$i
  fi
  rm $output_dir/*_$j.ppm
done

Premier test de TimeLapse

Il est temps de faire un premier test. Une simple tâche CRON programmée toutes les 10 minutes, appel le script. Je mets la webcam à la fenêtre et je laisser tourner jusqu’à demain 🙂

Créer la vidéo à partir des images

Pour rassembler les images et en faire une vidéo, j’utilise mencoder :

mencoder mf://*.jpg -mf fps=5:type=jpeg -ovc lavc -lavcopts vcodec=mjpeg -o timelapse.avi

Voici le résultat d’un premier test :

 

6 – Raspbian

raspbian_logo

Cette page est consacrée à l’installation et à la configuration de l’OS sur le Pi. Raspbian est une distribution Linux qui convient parfaitement à l’usage que je souhaite en faire. Il s’agit en fait d’une Debian optimisée pour le Pi. Cependant, l’image fournis sur le site RaspberryPi.org contient énormément de choses inutiles…

Installation de Raspbian sur la carte SD

lecteur_carte_sdJe passe très rapidement sur ce point, car la procédure est très clairement décrite sur le site elinux.org. J’ai utilisé la méthode Copying an image to the SD card in Linux (graphical interface) depuis un PC sous Linux Mint, en utilisant un lecteur de carte multi format Kingston.

Configuration du système

La commande raspi-config permet d’ajuster un certain nombre de paramètres :

  • expand_rootfs : permet d’étendre la partition racine à la taille de la carte mémoire afin de pouvoir exploiter tout l’espace disponible
  • configure_keyboard : permet de sélectionner un clavier AZERTY
  • change_timezone : permet de choisir le fuseau horaire (GMT+1 Paris)
  • memory_split : permet de définir la mémoire allouée au chipset graphique (n’ayant besoin que d’une interface en ligne de commande, 16Mo suffiront)

Capture-piraspberrypi

Suppression des paquets superflux

Je n’ai besoin que du stricte minimum, je peux donc dégager tout ce qui concerne l’interface graphique et le son :

apt-get remove --purge alsa* alsa-base xserver* x11* x11-xfs-utils x11-xserver-utils xinit libsmbclient libx* lightdm openbox gtk* xdg-tools desktop-file-utils

Et pour finir le nétoyage :

apt-get autoremove

Enfin, pour être certain que tout soit à jour :

apt-get upgrade
apt-get update

Installation des paquets nécessaires

Je n’ai besoin que de trois soft qui ne sont pas installés par défaut sur la Raspbian.

  • streamer : pour capturer les images via la webcam
  • imagemagick : permet, entre autre, de redimensionner, convertir et compresser les images
  • wvdial : permet d’établir une connexion réseau avec le dongle 3G
apt-get install streamer imagemagick wvdial

Configuration des interfaces réseaux

Dans l’absolue, lorsque je voudrai récupérer les photos capturées, je mettrai directement la carte SD du Pi dans un lecteur de carte. Cependant, il peut être intéressant je pouvoir prendre la main sur le système lorsqu’il tourne afin de pouvoir faire des ajustements. C’est pourquoi je configure l’interface réseaux ethernet du Pi avec une adresse IP fixe. Un câble RJ45 croisé me permettra de me brancher dessus avec un PC portable.

Notez que je configure pas de passerelle par défaut, afin de m’assurer que le Pi utilisera l’interface montée par le dongle 3G pour surfer.

auto eth0
allow-hotplug eth0
iface eth0 inet static
	address 192.168.100.22
	netmask 255.255.255.0
	network 192.168.100.0
	broadcast 192.168.100.255

Et voilà, c’est tout pour le Pi 🙂

5 – Schéma global et utilisation

Le dispositif au complet se compose de trois éléments :

  • Le système de capture d’image
  • Le circuit de temporisation de l’alimentation
  • Un serveur de monitoring

schéma global Pi TimeLapse

Le système de capture d’image

Composé du Pi, d’une webcam, d’un dongle 3G et d’une batterie 5V, ce système se contente de prendre une photo à chaque démarrage, puis s’éteint immédiatement. Une fois sur trois, il envoi une requête au serveur de monitoring pour signifier que tout va bien 🙂

Le circuit de temporisation de l’alimentation

Ce circuit alimenté par une batterie 12V, pilote un relais électrique permettant de commander l’alimentation du Pi pendant 2 minutes toutes les 10 minutes, de 8h00 à 18h00, du lundi au vendredi.

Un serveur de monitoring

Un script PHP publié par un serveur web Apache permet d’enregistrer les requêtes POST envoyée par le Pi toutes les 30 minutes. Il réceptionne une miniature d’une la dernière photo prise, et enregistre l’heure exacte à laquelle il l’a reçu dans une base de données MySQL. Si tout est ok, il envoi un mail avec la date et la photo miniature, ce qui me permettra d’être continuellement averti du bon fonctionnement du système de capture d’image.

En parallèle, ce serveur web publie une page web, qui liste l’ensemble des miniatures ainsi enregistrées, ce qui permet d’avoir une vue d’ensemble du bon déroulement des choses sur une semaine.

Scénario d’utilisation

  1. Le circuit de tempo alimente le Pi qui boot immédiatement
  2. Une fois démarré, le Pi prend une phot et lance un shutdown
  3. Une fois sur trois (soit toutes les 30 minutes) le Pi envoi une requête sur un serveur de monotoring distant pour dire qu’il est toujours en vie
  4. Le circuit de tempo coupe l’alimentation du Pi après 2 minutes

4 – L’alimentation – 2/2

Cet article est dédié au circuit de temporisation de l’alimentation. Ce système à entièrement été réalisé par mon P’pa, je vais donc tâcher de retransmettre toutes les étapes de sa fabrication avec pleins de photos 🙂

Cahier des charges

  • Système de tempo totalement indépendant
  • Plage de fonctionnement : pendant 2 minutes, toutes les 10 minutes, de 8h00 à 18h00
  • Autonomie : 7 jours minimum

La création du circuit électronique

IMG_0393

IMG_0392

IMG_0398

IMG_0400

IMG_0401

IMG_0418

IMG_0421

IMG_0425

IMG_0423

Plusieurs semaines s’écoulent, et un jour je reçois ce mail :

Bonsoir Olivier

Je viens de terminer la mise au point du montage tempo.
Je te joins quelques photos retraçant brièvement la création et les essais.

En résumé :
- période de fonctionnement : 8 à 18h00
- relais activé toutes les 8ème et 9ème minutes durant la période de
fonctionnement soit 120 mn par jour
- consommation sans affichage : 15 mA
- consommation avec affichage pour le réglage de l'heure : 250 mA

Je fais fonctionner en continue le montage pour vérifier la précision de
l'heure sur plusieurs jours. Si aucun PB je te l'envoie par courrier lundi.

Bonne soirée. J'ai bien mérité ma bière qui m'attend au frais.

Papa

Le colis arrivera dans ma boite aux lettres quelques jours plus tard 🙂 Merci P’pa !

Branchements et tests

Il est temps de raccorder le circuit de tempo au circuit d’alimentation principale. Pour info, le circuit de temp est alimenté par une batterie au plomb de 12V acheté chez Conrad pour environ 20€.

IMG_4745

Un petit test plein de suspens en vidéo 🙂 On y voit le Pi s’allumer à 14h38, et s’éteindre à 14h40 🙂

 

3 – L’alimentation – 1/2

L’alimentation du système est de loin le point le plus problématique. L’objectif est de tenir au moins une semaine sans avoir à recharger les batteries.

Estimation de la consomation

De base, le Raspberry Pi consomme environ 700 mA sur 5V. Avec la webcam et le dongle 3G, on peut prévoir une consomation instantanée totale d’environ 1 A. La batterie que j’ai choisi a une capacité de 9000 mAh, ce qui veut dire qu’en tirant 1 A, la batterie pourra tenir environ 9 heures (C’est un calcul fait à la louche, pour se faire une idée. En réalité, ce n’est pas tout à fait aussi immédiat).

La batterie TeckNet iEP387-II 7000mAh est une batterie Lithium-ion. Le problème avec ce genre de batterie c’est qu’elles sont sensibles aux variations de températures, en dessous de 10°C et au dessus de 40°C, on peut s’attendre à des problèmes. Le chantier se déroulant entre le mois de mai et le mois de septembre, on peut cependant espérer rester dans cette fourchette de température.

Pour résumer, la batterie que j’ai choisie ne peut alimenter le dispositif que pendant une dizaine d’heures maximum. Ce qui est loin d’être suffisant…

Panneaux solaires

Depuis quelques années, on peut trouver des panneaux solaires nomades pour recharger téléphones mobiles et autres tablettes ou GPS. Ils sont généralement équipé d’une petite batterie au Lithium-Ion de faible capacité (5Ah max).

Ce type de panneau solaire peut être intéressant dans des zones très ensoleillées (genre désert du Sahara). Dans le nord de la France où nous n’avons pas vu le soleil depuis 1429 d’après Wikipédia 😉 il ne faut pas compter dessus.

A noter également qu’il faut compter environ 100€ pour un modèle fiable doté d’une batterie suffisante. Sans compter qu’on peut dire à Dieu à la discrétion avec un panneau solaire au fond du jardin ^^.

Fonctionnement non continue

Il n’est donc pas envisageable d’utiliser des panneaux solaires. Il n’est pas non plus envisageable, économiquement parlant, d’acheter plusieurs batteries. En effet, pour tenir 7 jours, il faudrait pas moins de 17 batteries de 9000 mAh, ce qui représente plus de 660 € (Sans compter l’encombrement, et le poids).

La solution qui apparait naturellement est de ne faire fonctionner le système que lorsqu’on a besoin de prendre une photo. J’ai déterminé qu’il faut environ 80 secondes au Raspberry Pi, pour booter, prendre une photo, et s’éteindre correctement. J’ai besoin de prendre une photo toutes les 10 minutes, de 8h00 à 18h00, du lundi au vendredi. Ce qui veut dire, que j’ai besoin d’alimenter le système pendant 2 minutes (prenons large), toutes les 10 minutes. Au finale, sur la semaine, j’ai donc besoin de tenir :

2 (minutes) * 6 (par heure) * 10 (heures par jour) * 5 (jours) = 600 minutes = 10 heures

J’ai donc besoin de tenir 10 heures. Compte tenu que le Raspebrry Pi ne consommera pas 1 A pendant les 2 minutes où il est alimenter, on peut espérer que ma batterie de 9000 mAh suffise 🙂

J’ai réalisé plusieurs test en faisant tourner le Pi + Webam avec prise de photos toutes les 10 minutes. La batterie a tenue 14h 🙂 Ce qui est une excellente nouvelle ! Avec le dongle 3G qui envoi des infos toutes les 30 minutes, on tombe à un peu plus de 11h d’autonomie, ce qui correspond parfaitement au besoin, avec une petite marge de sécurité en plus 🙂

Programmateur ?

L’idée m’a été soumise par mon cher papa, expert en électronique en son temps 😉 J’en profite pour lui faire un peu de pub, car il vient de lancer sa société spécialisé dans la domotique et l’aménagement de l’habitat : www.asa-habitat.fr 🙂

Il s’agit de construire un petit circuit de tempo, qui va simplement jouer le rôle d’intérupteur dans le circuit d’alimentation du Raspberry Pi :

Schéma circuit alimentation RPi

Ce circuit de temporisation fonctionne indépendamment du reste du système, il est composé :

  • d’un relais (qui joue le rôle de l’interrupteur)
  • d’un circuit électronique doté d’une horloge
  • d’une batterie 12V

Mes connaissances en électronique sont trop limités pour entrer plus dans le détail. Je confie donc cette tâche à mon cher P’pa. Dans l’idée, il s’agit d’un circuit de ce type là (mais en plus complexe) : Velleman VM188

A suivre…

2 – Le choix des composants

Raspberry Pi

IMG_4469Souhaitant pouvoir réutiliser la bête plus tard pour d’autres choses, j’opte tout de suite pour le modèle le plus complet Raspberry Pi Model B rev 2 doté de 512Mo de RAM. Basiquement, j’utiliserai une Raspbian car je suis à l’aise avec Debian et que c’est une solution suffisamment fiable et robuste.

Commandé sur Amazon pour 30 € (frais de port inclus)

Le boitier pour le Raspberry Pi

IMG_4477Pour protéger le Raspberry Pi, j’ai choisi un boitier modulaire, facilement « customisable » créé par le site Adafruit spécialisé dans les kits électroniques, Adafruit Pi Box – Enclosure for Raspberry Pi Computers.

Commandé sur Amazon pour 10 € (livraison gratuite)

La carte mémoire SDHC

IMG_4476Afin de pouvoir stocker suffisamment de photos, j’ai choisi une carte SDHC Kingston SD10V/32GB Carte SD 10 Mo/s 32 Go Classe 10.

Commandé sur Amazon pour 21 € (livraison gratuite)

La caméra

IMG_4468J’ai opté pour une webcam USB standard. L’objectif est d’avoir une résolution suffisante et de ne pas avoir de problème de luminosité ni de mise au point. J’ai donc choisi un modèle de logitech Logitech C525 très bon marché, HD 720p avec autofocus :

Commandé sur Amazon pour 36 € (livraison gratuite)

La connexion réseau – dongle 3G

Dongle 3G + SIM FreeD’après ce que j’ai vu sur le net, le Huawei E220 est particulièrement bien supporté par le Raspberry Pi, et part Linux en général. J’utiliserai une carte SIM Free Mobile, avec l’abonnement à 2€ avec l’option 3G (20Mo inclus) pour 0,99€. Ce sera suffisant pour prendre la main sur le Raspberry Pi via SSH.

Commandé sur Amazon pour 40 € (livraison gratuite)

La batterie

batterie_5VLe Raspberry Pi doit être alimenté par un courant de 1 A (en prenant en compte les périphériques USB, webcam + dongle 3G) sur 5V.

Il existe de nombreux modèles de batterie 5V servant de batterie de secours pour téléphone mobile. De capacité, puissance, prix et qualité très variable, il est difficile de choisir.

En creusant le sujet, il apparait que les batteries de la marque TeckNet soient clairement au dessus du lot. Bonne durée de vie, puissance jusqu’à 2A avec des capacité de 7000 mAh à 12000 mAh. Pour rester dans un budget raisonnable, je choisi le modèle intermédiaire avec une capacité de 9000 mAh.

Commandé sur Amazon TeckNet iEP389 9000mAh  pour 39€ (livraison gratuite)

La boîte

IMG_4740Pour rester discret, je fais place le dispositif dans une boite en plastique (étanche de préférence), et enterrer le tout dans le sol, au fond du jardin. Seule la webcam sortira furtivement du sol, accrochée à une hauteur de un mètre environ, sur un poteau. La webcam sera renforcée pour résister à la pluie, et camouflée.

Prix environ 6 € (en grande surface)