Club robotique de Sophia-Antipolis

Accueil > Projets, études > Nos jeunes roboticiens l’ont fait > Nichoir connecté par les élèves de 1ère S du CIV

Nichoir connecté par les élèves de 1ère S du CIV

lundi 24 novembre 2014, par Julien H., Olivier D.

Ce projet est l’initiative d’un groupe de lycéennes au lycée international de Valbonne. Dans le cadre d’un concours, elles ont conçu un dispositif d’observation des oiseaux pour les cours de SVT sous la forme d’un nichoir équipé d’électronique permettant la prise de vue et la capture d’informations sur l’intérieur et l’extérieur du nid.

Pobot apporte ses connaissances et moyens techniques en réponse au dispositif scientifique élaboré et mis en œuvre par les élèves du CIV. Un groupe de travail se réunit chaque semaine, plusieurs fois, afin de définir les actions à mener en collaboration.

Lycéens, professeurs, spécialistes de la nature, ingénieurs, techniciens, ... concourent à la réussite de cette belle idée qui permettra grâce à une publication ouverte de reproduire ce nichoir à moindre frais pour de nombreuses expérimentations.

Les travaux de Pobot sont publiés sur GitHub.

L’équipe de 1ère S en pleine conception du nichoir

On commence à en parler dans les journaux (Nice Matin du 3 décembre) :

L’article de Nice Matin annonce le nichoir

Makery France également : Bricole It Youself

Le contexte initial : ParticipaScience

Fabrication du nichoir

Un premier prototype a été réalisé en carton par les élèves.

Prototype du premier nichoir

Ils sont venus à SoFAB pour tester la découpe au laser sur différentes essences de bois.

Atelier à SoFAB pour la découpe laser

Plans 3D et fichiers

Afin d’isoler les boitiers techniques contenant l’électronique, et pour masquer les câbles, les élèves ont défini un plan de nichoir avec une chambre interne permettant d’utiliser des cloisons de 5 mm à 30 mm.

Une pièce spéciale permet de combler l’interstice autour de l’entrée, tout en pouvant y fixer la barrière optique qui détectera l’entrée des oiseaux.

Les plans sont disponibles en SVG (découpe laser) et pour Galaad (fraiseuse numérique) ainsi qu’en modèle 3D pour Sketchup, un outil de conception très facile d’utilisation.

Modèle 3D (SketchUp)
Mise en plans (SketchUp)
Plans CAO des pièces internes pour fraiseuse (Galaad)
Plans CAO du boitier extérieur pour fraiseuse (Galaad)

Matériel électronique

L’essentiel de l’électronique est un mini-ordinateur équipé d’entrées/sorties et d’une connectivité le rendant autonome et capable de communiquer sur le web :
 carte Raspberry Pi
 carte RaspiO’Mix de Digital Spirit
 batterie rechargeable
 adaptateur USB pour Wifi

Les capteurs sélectionnés sont analogiques ou numériques :
 fourche optique pour l’entrée du nichoir (0,4 mA d’intensité)
 capteur de lumière IR à base de TSL2561
 capteur précis de température et d’humidité SHT21
 2 jauges de contrainte pour peser jusqu’à 500 grammes

Pour prendre des images et des vidéos :
 caméra Raspicam sans filtre IR
 éclairage infrarouge commandé par des sorties TOR de la RaspiO’Mix
 éclairage normal commandé par I2C (cercle de 24 leds)

Pour les tests, différents convertisseurs et amplificateurs qui resserviront pour nos ateliers ont été étudiés :
 ADS1115
 INA125
 HX711

Mais pour rester conforme à l’objectif de pouvoir refaire facilement ce nichoir, nous avons préféré essayer de faire fonctionner les jauges de contraintes avec un amplificateur différentiel de la même famille que les capteurs, Grove. Ce sera donc un INA125 ou un INA132.

Capteurs de température

Pour la température extérieure, nous avons choisi le capteur TH02 de HopeRF pour sa précision (0,5 °C) et sa petite taille, puisque nous devrons le positionner vers l’extérieur et pas à l’intérieur du nid.

Il est documenté ici et .

Connexion de la RaspiO’Mix

La carte est équipée de différents connecteurs ou interrupteurs. Nous compléterons ici la liste des fonctions associées afin de nous assurer de ne pas manquer de place :

 interrupteur DIP0 : bouton d’arrêt de la carte
 interrupteur DIP1 :
 GPIO 0 :
 GPIO 1 :
 GPIO 2 :
 GPIO 3 :
 entrée analogique 0 :
 entrée analogique 1 : capteur de température (temporaire)
 entrée analogique 2 : capteur de lumière (temporaire)
 entrée analogique 3 :
 connecteur série :
 connecteur I2C 0 :
 connecteur I2C 1 :

Utilisation des jauges de contraintes

Jean-Marc a sollicité un spécialiste de la pesée réglementée. Les jauges de contrainte déjà utilisées sur la ruche de Georges sont un bon choix pour les besoins de précision des lycéens.

Afin de détecter une variation de 100 mg pour une cellule qui peut aller jusqu’à 500 grammes, il faut donc pouvoir compter au moins 5000 points différents sur toute la plage de tension variable.

Avec une résolution de 10 bits, on obtient uniquement 1024 valeurs différentes. Il faut donc plus de 12 bits de précision (4096 points).

Une cellule classique est composée d’un pont de Wheatstone dont les résistances reliées au positif sont variables. Ce point devra être explicité ultérieurement. On utilise un amplificateur différentiel pour faire l’acquisition de la résistance variable.

Il existe le composant HX711 qui peut accepter en entrée deux cellules, amplifie le signal analogique (faible tension maximale de 10 mV) puis le convertit en numérique. Il faut un gain de 500 fois pour avoir une tension variable entre 0 et 5 volts (si on reste en 5 volts).

Ce composant est délicat à utiliser car le signal en sortie nécessite un micro-contrôleur pour gérer l’horloge et le protocole de lecture des valeurs (surtout si on veut lire deux jauges de contrainte, l’une à vide comme référence).

Donc on peut avoir recourt à un amplificateur différentiel (comme le INA125) qu’on connectera en entrée d’un convertisseur analogique/numérique (celui du RaspiO’Mix par exemple).

Démarrage du nichoir

Lorsque la carte démarre, le système Linux exécute le contenu du fichier /etc/rc.local auquel on peut donc ajouter le lancement de nos propres programmes.

Par exemple :

sudo /usr/bin/python /home/pi/NichoirConnecte/src/button_halt.py &

Et le programme "button_halt" va utiliser un bouton pour arrêter proprement la carte, sur le modèle de ce qu’Éric a déjà fait :

# vérification qu'on peut exécuter le programme
import os, sys
if not os.getuid() == 0:
    sys.exit('Needs to be root for running this script.')

# appel des fonctions pour les entrées/sorties de la Raspberry Pi
import RPi.GPIO as GPIO

# pour compter le temps et lancer des programmes
import time
import subprocess

# la patte 4 est en entrée, par défaut à niveau haut (un appui met l'entrée à la masse)
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down = GPIO.PUD_UP)

print('Monitoring started')

# on teste en permanence
while True:
    pressed = (GPIO.input(4) == 0)
    if pressed:
        # on a détecté l'appui sur le bouton, on compte 4 secondes
        time.sleep(4)
        pressed = (GPIO.input(4) == 0)
        if pressed:
            # le bouton est toujours pressé après 4 secondes : il faut éteindre
            # pour cela, on sort de la boucle infinie
            break
    else:
        # on met en pause le programme 
        time.sleep(0.1)

# On va éteindre la carte, donc on prévient tout le monde
print('Shutdown button pressed. System is going to halt now')

# On appelle le programme "halt" qui arrête le système d'exploitation
# attention la carte restera sous tension, manipuler avec soin
subprocess.call('halt')

Installation des logiciels

Comme souvent avec Linux la première étape consiste à mettre à jour tous les paquets (logiciels préparés pour la distribution du système d’exploitation) avec un outil comme le gestionnaire de paquet APT.

pi@raspberry $ sudo apt-get update
... (téléchargements)
pi@raspberry $ sudo apt-get upgrade
... (liste des paquets à mettre à jour, à valider par O)

Lorsqu’on prépare un nouveau nichoir qui doit utiliser une caméra et des entrées/sorties, il est aussi important de mettre à jour le logiciel bas-niveau (firmware) de la carte Raspberry Pi afin d’accéder à toutes les fonctionnalités matérielles.

pi@raspberry $ sudo rpi-update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7635  100  7635    0     0  34573      0 --:--:-- --:--:-- --:--:-- 50900
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Downloading specific firmware revision (this will take a few minutes)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   168    0   168    0     0    311      0 --:--:-- --:--:-- --:--:--   414
100 23.0M  100 23.0M    0     0   220k      0  0:01:46  0:01:46 --:--:--   99k
 *** Updating firmware
 *** Updating kernel modules
 *** depmod 3.12.33+
 *** Updating VideoCore libraries
 *** Using HardFP libraries
 *** Updating SDK
 *** Running ldconfig
 *** Storing current firmware revision
 *** Deleting downloaded files
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully updated to 7c60d6b268cbc7a2ac6b652cb0ecb3495c636ad8
 *** A reboot is needed to activate the new firmware

Puis on lance la configuration de la carte :

pi@raspberry $ sudo raspi-config

Il faut activer toutes les options nécessaires, dont la caméra. Dans les options avancées, il est également utile de changer le nom de la carte (raspberrypi par défaut) pour que ce soit plus facile : "nichoir-civ1" par exemple. Dans notre cas, on utilise "nichoircube" car les développements Python sont basés sur la solution d’un projet Cube Média permettant de réaliser facilement des modules autonomes.

Par contre évitez de changer le login et le mot de passe de la Raspberry Pi (login : pi et mot de passe : raspberry) pendant vos développements. Changez le mot de passe lorsque vous installerez le nichoir sur un réseau Internet public, pour éviter que des petits malins viennent accéder et supprimer tous votre travail.

On a besoin de modules Python. On utilise l’outil "pip" pour les installer.

pi@nichoircube $ sudo pip install pytumblr
pi@nichoircube $ sudo pip install github3.py

Communication avec la carte RaspiO’mix

Le protocole I2C permet de parler avec des cartes d’extensions (Philips l’a inventé pour relier ses cartes dans les magnétoscopes) et c’est ce que nous faisons, avec deux liaisons avec la carte d’extension RaspiO’Mix de Digital Spirit :
 une liaison I2C avec le convertisseur analogique numérique
 une liaison I2C avec l’horloge temps réel (RTC) DS1307

Pour s’assurer que la carte est bien vue de la Raspberry Pi, on utilise la commande "i2cdetect". Comme nous avons un modèle B seconde version, le fichier Linux pour l’I2C porte le numéro 1, donc la commande est :


pi@nichoircube $ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00 : — — — — — — — — — — — — —
10 : — — — — — — — — — — — — — — — —
20 : — — — — — — — — — — — — — — — —
30 : — — — — — — — — — — — UU — — — —
40 : — — — — — — — — — — — — — — — —
50 : — — — — — — — — — — — — — — — —
60 : — — — — — — — — 68 — — — — — 6e —
70 : — — — — — — — —

On peut donc voir les adresses 68 et 6E utilisées par la carte RaspiO’Mix, tout se passe bien. A noter que le code UU indique que le noyau Linux utilise l’adresse 39, cela ne nous concerne pas.

Le Cube

Un dispositif permettant d’ajouter facilement des fonctions a été développé pour le projet #LeCubeMedia sur Raspberry Pi également :
 on écrit un nouveau programme Python dans le répertoire " /NichoirConnecte/src/lecube/nichoir"
 on le déclare dans le fichier de configuration " /NichoirConnecte/src/lecube/nichoir.cfg"
 on relance le Cube : "sudo service lecube restart"

Module de stockage

Voici par exemple le contenu du module "storage.py" qui gère l’enregistrement en base :

#!/usr/bin/env python
# -*- coding: utf8 -*-

import logging
import time
import datetime
import threading
import sqlite3
import os

import nytumblr
import nysensors

# définition de la base de données

dbfile = "/home/pi/NichoirConnecte/config/nichoir.db"

# ouverture de la connexion avec une adaptation des types Python et Sqlite et surtout la possibilité d'utiliser le multi-threading (la même connexion est partagée)
conn = sqlite3.connect(dbfile,detect_types=sqlite3.PARSE_DECLTYPES, check_same_thread=False)

# stockage de la température toutes les N secondes
def stocke_temperature():
   # on relance la fonction au bout de 2 secondes grâce à un thread
   threading.Timer(2.0, stocke_temperature).start()
   # on lit la température
   temp = nysensors.sensor_temp()
   # on l'enregistre
   conn.execute("""INSERT INTO temps VALUES (date('now'),time('now'),(?),(?))""",('interieur', temp))

# toutes les heures, on affiche la taille de la base de données (puis on l'enverra sur les réseaux sociaux, une fois par jour par exemple).
def publie_taille():
   taille = os.stat(dbfile).st_size
   logging.info("La taille de la base est de %s octets." % taille)
   threading.Timer(3600.0, publie_taille).start()

def stocke_commit():
   logging.debug("%s enregistrements en base sauvegardés" % conn.total_changes)
   threading.Timer(10.0, stocke_commit).start()
   conn.commit()

# lancement comme un module du Cube
def init(cube, params):
   logging.info("Lancement des boucles de stockage")
   stocke_temperature()
   stocke_commit()
   publie_taille()

Base de données

Le nichoir stocke les données sur une carte SD pour éviter tout problème de réseau qui provoquerait une rupture dans les valeurs captées. Une base de données (SQLite) est donc initiée dans la Raspberry Pi. Chaque jour, un fichier est construit à partir des données et envoyées sur le tumblr afin d’être récupérées par les élèves et les professeurs.

Voici les commandes les plus utiles pour gérer la base de données. Son contenu est stocké dans un fichier ("nichoir.db"). Le $ indique une commande du shell Linux, tandis que le > indique une commande de l’invite sqlite.

$ sqlite3 ~/NichoirConnecte/config/nichoir.db
> .schema
> SELECT * FROM temps;
> .tables
> .exit

Caméra

On utilise un module "raspicam" (caméra pour Raspberry Pi) capable de prendre des vidéos en 1080p (Full HD) à 30 images par seconde, avec compression matérielle grâce à la puce Broadcom de la RPi. Elle est reliée directement à la carte par une nappe pour utiliser le protocole CSI qui garantit un haut débit, sans passer par une puce USB qui ralentirait le transfert.

Des bibliothèques de code Python existent pour accéder aux fonctions de prises de vue et d’enregistrement vidéo. Il faut par contre les installer :

pi@nichoircube $ sudo apt-get install python-picamera python-picamera-docs
...
Paramétrage de wwwconfig-common (0.2.2) ...
Paramétrage de javascript-common (7) ...
Paramétrage de libjs-jquery (1.7.2+dfsg-1) ...
Paramétrage de libjs-underscore (1.1.6-1+deb7u1) ...
Paramétrage de libjs-sphinxdoc (1.1.3+dfsg-4) ...
Paramétrage de python-picamera (1.8-1) ...
Paramétrage de python-picamera-docs (1.8-1) ..
pi@nichoircube $

On peut suivre pour cela les explications de Dave Jones, l’auteur du module picamera : http://www.raspberrypi.org/learning/python-picamera-setup/

Réseaux sociaux

Le nichoir va communiquer en permanence sur les réseaux sociaux. Une page de test a été créée : http://nichoirlive.tumblr.com.

Une bibliothèque Python (pytumblr) permet de poster automatiquement du texte ou des images sur ce blog.

On peut également suivre les courbes de valeurs grâce au service web Plotly (page temporaire). Les graphiques seront régulièrement enregistrés en image et automatiquement postés sur Tumblr.

Suite du projet

En mars, nous relançons le projet pour faire aboutir l’expérimentation.

Pour permettre aux élèves d’effectuer une corrélation entre l’expérimentation réelle, quotidienne, à l’échelle locale, et l’expérimentation à long terme puis de comparer aux points de vue scientifiques parfois divergents sur les pollutions et le réchauffement climatique, le nichoir est complété de capteurs environnementaux :

 CO2
 particules fines (1 µm)
 anémomètre et sens du vent

Possibilités supplémentaires :
 fixer une girouette miniature pour aligner le capteur d’air

Plusieurs objectifs et un calendrier :

Dates Événement Pilote
7-8 mai 2015 Fab Lab à Toulouse Julien H.
4-5 juin 2015 MedCOP21 à Marseille http://medcop21.regionpaca.fr Olivier D.
7 juillet 2015 Sophia Conf à Sophia Antipolis Julien H.
Octobre Fête de la Science 2015 au CIV Olivier D.
Octobre Fête de la Science 2015 à Antibes Julien H.
Décembre Paris Climat 2015 / COP21 Olivier D.
Fin décembre 2015 Inauguration du 1er nichoir connecté au Jardin expérimental des élèves du CIV Olivier D.
Janvier 2016 Inauguration d’un second nichoir connecté à SoFAB Julien H.

Principe d’organisation

Deux rendez-vous différents chaque semaine :

 Mardi midi : réunion de synchronisation
 Mardi après-midi : atelier au CIV avec les élèves
 Mercredi 18h-20h : atelier Club Lab à SoFAB avec les adhérents

Par conséquent, les activités sont réparties selon les compétences et les objectifs (pédagogiques ou expérimentaux) :
 les élèves font une recherche sur une fonction du nichoir (capteur, signaux, ...)
 ils définissent leur besoin (pièce mécanique, électronique, outil, connaissances)
 le Club Lab fabrique et apporte ses connaissances

Travaux à réaliser

 nichoir en plexiglas : continuer le câblage
 mise en plans : publier les plans open source du nichoir
 communication : un "kakemano" sur le projet et ses objectifs scientifiques
 informatique : test de la caméra
 informatique : test de la caméra infra-rouge
 mécanique : coffre de transport avec mousse
 électronique : test des capteurs
 informatique : stockage des informations
 informatique : diffusion sur le réseau

Vos commentaires

  • Le 3 avril 2015 à 03:41, par Olysh En réponse à : Nichoir connecté par les élèves de 1ère S du CIV

    Waou c’est super comme projet !
    Pouvez vous me dire quel type et quelle puissance de batterie utilisez vous ? Si besoin comment faire pour la recharger ?
    C’est très technique la partie matériel informatique mais ça fait drôlement envie.
    Merci pour le partage.

    • Le 23 mars 2017 à 22:47, par Boivin En réponse à : Nichoir connecté par les élèves de 1ère S du CIV

      Je pense que c’est en fonction de l’autonomie souhaité. Pour recharger les batteries je propose des panneaux solaires ou une petite éolienne

    • Le 26 mars 2017 à 15:04, par Eric P. En réponse à : Nichoir connecté par les élèves de 1ère S du CIV

      Une éolienne est plutôt intrusive dans le contexte du projet.
      N’oublions pas que le but est de perturber le moins possible les animaux observés. Si on leur met un moulin à vent à proximité du nichoir, je ne suis pas certain que ce soit très à leur goût 😄
      Les panneaux solaires sont par contre mieux adaptés.

    • Le 26 mars 2017 à 15:11, par Eric P. En réponse à : Nichoir connecté par les élèves de 1ère S du CIV

      Je n’ai pas de souvenir précis des caractéristiques, d’autant que le projet est maintenant entre les mains des enseignants, une fois notre assistance au lancement terminée. Il avait été envisagé d’utiliser des batteries de récupération d’onduleurs, du fait de leur grande robustesse, mais je ne sais pas ce qui a été retenu au final.
      Le calcul de capacité dépend de ce qu’on met comme équipement, et prend en compte d’une part leur consommation stabilisée moyenne (pour estimer la capacité en fonction de l’autonomie souhaitée) et d’autre part les besoins en appel de courant (afin d’éviter des effondrements de tension lors par exemple de transmissions radio). Il faut donc avoir mesuré ces deux facteurs pour calculer l’estimation. Et ensuite, prendre bien entendu un facteur de sécurité pour tenir compte de l’influence de la température ambiance sur la capacité effective, ainsi que le vieillissement.

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.