Mot-clé - raspberry

Fil des billets - Fil des commentaires

Mardi, juin 16 2015

Mise à jour de RaspiO'Mix : RaspiO'Mix+

RaspiO'Mix est, comme son nom l'indique, l'évolution logique de RaspiO'Mix pour les RaspberryPi dit « Plus » et Raspberry 2.

RaspiO'Mix est une carte fille (également appelée hats) pour RaspberryPi qui vous permet de connecter vos capteurs / actionneurs Grove (le système Grove chez Lextronic) au Raspberry simplement, sans connaissance en électronique.
RaspiO'Mix est un projet libre et ouvert, tous les plans sont disponibles en ligne.

product-plus.png

Caractéristiques

  • Compatible Raspberry A+, Raspberry B+, Raspberry 2
  • 8 entrées / sorties tolérantes 5V
  • 8 entrées analogiques, 0-5V, 18 bits de résolution
  • 2 entrées numériques via DIP switch
  • Horloge temps réel avec batterie de sauvegarde
  • 3 connecteurs pour I2C
  • 1 connecteur pour communication série
  • Alimentation 5V via jack ou bornier à vis

Utilisation en Python

Des exemples en Python sont présents sur GitHub et vous montreront à quel point il est simple de dialoguer avec les capteurs / actionneurs Grove.

Par exemple, pour faire clignoter une LED présente sur le port IO0 et afficher la valeur analogiques lue sur le port AN0.

# On importe les librairies qui nous seront utiles
from raspiomix import Raspiomix import RPi.GPIO as GPIO import time
r = Raspiomix()
GPIO.setmode(GPIO.BOARD)
# On configure le port IO0 de RaspiO'Mix en sortie GPIO.setup(r.IO0, GPIO.OUT)
# Et on boucle ! while True: GPIO.output(r.IO0, not GPIO.input(r.IO0))
print("%f Volt !" % r.readAdc(0))
time.sleep(1)

Difficile de faire plus simple ! Non ?

Plus d'informations

Tout ce dont vous avez besoin pour avancer avec RaspiO'Mix+ est disponible sur le site www.raspiomix.org :

Et bien entendu, pour commander votre RaspiO'Mix+, cela se passe sur www.raspiomix.org !

Mercredi, mai 27 2015

Piloter des prises électriques via un Raspberry

Comment piloter des appareils branchés sur le secteur simplement et surtout sans risque, directement via un Raspberry (bien entendu, ça marche avec n'importe quoi d'autre, Arduino, etc...) ?

On pourrait utiliser un relais, un triac, mais ça ne me plait guère, on doit pouvoir faire plus simple et plus sécuritaire... Et si nous utilisions tout simplement des prises commutables à distance du commerce, nous n'aurions plus à nous soucier de l'aspect isolation vu que l'appareil se pilote à distance et est censé avoir passé des tests de conformité CE...

D'autant plus que ces prises télécommandées ne valent pas grand chose, il est facile de trouver un lot de 3 pour moins de 15€ comme celle ci-dessous :

blister.jpg

Une fois les prises télécommandées en notre possession, 3 solutions s'offrent à nous :

  1. Ouvrir les prises et les piloter directement via un signal logique : Mauvaise idée, on perd l'avantage de l'isolation
  2. Sniffer le signal radio lors de l'appui sur une touche et le reproduire
  3. Piloter directement la télécommande en simulant des touches

N'ayant pas de quoi reproduire le signal sniffé sur le moment, j'ai choisi la dernière solution qui implique un démontage de la télécommande.

L'intérieur de la télécommande :
Recto de la carte électronique Verso de la carte électronique

Le coeur de la carte est un HT46R01T3 de Holtek, un microcontrôleur embarquant une partie radio, avec ce dernier, nous trouvons un peu de composant passif, un quartz, des boutons et voilà, vous avez une télécommande « qui fait le job » pour 2 kopeck.

Le schéma de la carte :
schema.png

Nous avons 6 boutons, 3 boutons à gauche pour allumer la prise correspondante et 3 autres boutons à droite pour les éteindre.
Les boutons sont reliés aux broches 2, 3, 4 et 5 via les diodes (D1 à D6) correspondant aux pin PA0 à PA3 du circuit intégré, 6 boutons présents mais seulement 4 entrées utilisées sur le microcontrôleur, cette ruse est possible grâce aux diodes: 3 entrées servent à connaitre la prise sélectionnée et une autre indiquent s'il s'agit du bouton OFF.

État des broches en fonction des appuis sur les touches :

Boutons Pin 2 Pin 3 Pin 4 Pin 5
ON1 1 1 0 0
OFF1 1 1 0 1
ON2 1 0 1 0
OFF2 1 0 1 1
ON3 0 1 1 0
OFF3 0 1 1 1

Afin de simuler des appuis sur les touches tout en gardant possible l'utilisation des boutons de la télécommande, nous allons court-circuiter brièvement les boutons, pour cela, je vais utiliser un circuit intégré très pratique, le 4066, un quadruple switch analogique dont voici le schéma :
Contenu du 4066

Il contient donc 4 interrupteurs pilotables directement via des signaux logiques, la technologie CMOS du 4066 nous permet une connexion direct au Raspberry.

Connexion entre le 4066 et le Raspberry

En rouge, on retrouve les points vus plus haut dans le schéma de la télécommande, en vert, il s'agit des liaisons avec le port GPIO (P1) du Raspberry, concernant l'alimentation, c'est assez simple, la télécommande étant alimentée avec une pile bouton de 3V, on va utiliser directement les 3V issus du Raspberry.

Un petit bout de code Python (outlet.py) et vous pouvez piloter vos télécommandes :

$ python
>>> from outlet import Power_Outlet
>>> po = Power_Outlet()
>>> po.on(0)
>>> po.off(1)
>>> 

Le tout sur une plaque d'expérimentation :
final.jpg

Jeudi, janvier 1 2015

Domotique avec raspberryPi et Domoticz

J’utilise depuis quelques mois une solution domotique qui me donne pleinement satisfaction. Cette solution relativement économique repose sur l’utilisation d’un RaspberryPi avec le logiciel Domoticz ainsi que d’un « modem » radio 433MHz RFXCom

Je ne vais pas détailler l’installation de Domoticz, tout est décrit sur leur site et l’opération reste très simple.

Mes besoins essentiels concernent les consommations de l’habitation ( eau, gaz, électricité ) et les relevés de température et humidité dans certaines pièces. De plus, je pilote quelques lumières ainsi qu’un radiateur de type sèche serviettes. Depuis quelques temps j’ai ajouté des capteurs d’ouverture sur les Vélux et les portes. Je peux ainsi savoir par une notification sur le téléphone si l’on quitte la maison avec un Vélux oublié ouvert…

La solution à base de technologie radio en 433MHz présente quelques avantages:

  • Le prix
  • Le nombre de modules disponibles sur le marché
  • La possibilité de créer facilement ses propres capteurs avec un arduino par exemple

Le gros inconvénient c’est que contrairement au Zwave, il n’y a pas de retour d’état. Pour piloter des éléments « critiques » comme le chauffage, c’est un peu gênant mais on peut y remédier d’une façon assez satisfaisante à l’aide d’un script.

Les modules que j’utilise sont disponibles facilement dans les grandes surfaces de bricolage ou sur internet.

 

Le raspberry équipé d’une carte RFM12Pi en 868MHz pour un usage futur.

RasberryPi
RaspberryPi

 

Le modem RFXCom. On pourrait en créer un avec un arduino pour beaucoup moins cher mais il faut décoder les différents protocoles ce qui m’aurait demandé trop de temps. J’ai donc préféré acheter un module « tout fait » et consacrer plus de temps sur les autres parties.

Module RFXCom
Module RFXCom

 

Des sondes de température Oregon sont disposées aux endroits stratégiques ( Salon, Salle de bain, extérieur, chambres…)

Capteur oregon de température et humidité
Capteur Oregon de température et humidité

 

Le carillon de la porte d’entrée est lui aussi compatible. Il peut donc servir d’alerte sonore si besoin, d’autant qu’il dispose de 3 mélodies utilisables avec des codes différents.

Carillion
Carillon

 

Pour les Vélux, de simples capteurs d’ouverture

Capteur d'ouverture
Capteur d’ouverture

 

Pareil pour la porte du garage

Capteur d'ouverture
Capteur d’ouverture

 

Il y a aussi un capteur de mouvement pour le déclenchement d’un éclairage et d’une notification sur smartphone

Capteur de mouvements
Capteur de mouvements

 

Les lumières sont pilotables par ces petits relais.

Module d'éclairage
Module d’éclairage

J’utilise aussi les modules d’éclairage pour piloter le sèche serviette. Attention, il faut le piloter au travers du fil pilote. Il y a une petite astuce très bien décrite sur le site d’Alexandre.

La consommation électrique est relevée par un OWL180. Une petite pince ampèremétrique branchée sur le compteur transmet la consommation en temps réel.

Consommation électrique - OWL180
Consommation électrique – OWL180

 

Un petit écran déporté affiche la consommation en temps réel

Consommation électrique - OWL180
Consommation électrique – OWL180

 

Pour le gaz, c’est un peu plus compliqué mais aussi plus amusant. Les modules du commerce sont très chers, le DIY vient à la rescousse.

Capteur DIY Gasmonitor
Capteur DIY Gasmonitor

C’est simple, un arduino relève les impulsions générées par le compteur de gaz (un aimant est placé sur la roue du compteur) et les transmet à Domoticz par radio. On peut capter les impulsions d’un compteur de gaz avec un interrupteur reed.

Par la même occasion je relève la température et l’humidité du garage avec un DHT22.

Je vais aussi ajouter la consommation d’eau un peu plus tard.

IMG_20141230_095054_

Et le circuit vraiment très simple

Sélection_023

Le schéma et le code pour programmer l’arduino sont sur Github ici. C’est une première version mais ça marche très bien.

Pour la transmission des informations, j’ai utilisé une librairie permettant de simuler un capteur de type RFXMeter et RFXSensor. Du coup domoticz détecte le capteur tout seul comme un grand. Pour les informations de température et d’humidité, j’ai plutôt utilisé le format Oregon V2 gentiment mis à disposition par Olivier ici. Le nombre d’impulsions comptées est stocké dans l’EEPROM de l’arduino toutes les heures afin de ne pas perdre les informations en cas de coupure de courant.

Un seul arduino peut donc émuler toutes les sondes possibles et imaginables. D’autant qu’il ne faut qu’un arduino et un petit transmetteur 433MHz qui coûte 2-3€ ! Pour les arduino, j’utilise des Mini Pro en 5v ou en 3.3v suivant le type d’alimentation.

 

Après les informations concernant le matériel, voilà un petit tour de ce que ça donne dans Domoticz.

 

Le dashboard
Le dashboard
Les compteurs
Les compteurs
La conso de gaz
La conso de gaz
Les rapports d'électricité avec les coûts
Les rapports d’électricité avec les coûts
La météo
La météo
Des scénarios
Des scénarios

 

Des scripts lua sont aussi possibles pour faire ce qui n’est pas possible avec l’interface web. Ici par exemple, on envoie une notification sur mobile si la porte du garage est restée ouverte. Pratique avec des enfants </div>
    
    
          <p class= aucun rétrolien

Domotique avec raspberryPi et Domoticz

J’utilise depuis quelques mois une solution domotique qui me donne pleinement satisfaction. Cette solution relativement économique repose sur l’utilisation d’un RaspberryPi avec le logiciel Domoticz ainsi que d’un « modem » radio 433MHz RFXCom

Je ne vais pas détailler l’installation de Domoticz, tout est décrit sur leur site et l’opération reste très simple.

Mes besoins essentiels concernent les consommations de l’habitation ( eau, gaz, électricité ) et les relevés de température et humidité dans certaines pièces. De plus, je pilote quelques lumières ainsi qu’un radiateur de type sèche serviettes. Depuis quelques temps j’ai ajouté des capteurs d’ouverture sur les Vélux et les portes. Je peux ainsi savoir par une notification sur le téléphone si l’on quitte la maison avec un Vélux oublié ouvert…

La solution à base de technologie radio en 433MHz présente quelques avantages:

  • Le prix
  • Le nombre de modules disponibles sur le marché
  • La possibilité de créer facilement ses propres capteurs avec un arduino par exemple

Le gros inconvénient c’est que contrairement au Zwave, il n’y a pas de retour d’état. Pour piloter des éléments « critiques » comme le chauffage, c’est un peu gênant mais on peut y remédier d’une façon assez satisfaisante à l’aide d’un script.

Les modules que j’utilise sont disponibles facilement dans les grandes surfaces de bricolage ou sur internet.

 

Le raspberry équipé d’une carte RFM12Pi en 868MHz pour un usage futur.

RasberryPi
RaspberryPi

 

Le modem RFXCom. On pourrait en créer un avec un arduino pour beaucoup moins cher mais il faut décoder les différents protocoles ce qui m’aurait demandé trop de temps. J’ai donc préféré acheter un module « tout fait » et consacrer plus de temps sur les autres parties.

Module RFXCom
Module RFXCom

 

Des sondes de température Oregon sont disposées aux endroits stratégiques ( Salon, Salle de bain, extérieur, chambres…)

Capteur oregon de température et humidité
Capteur Oregon de température et humidité

 

Le carillon de la porte d’entrée est lui aussi compatible. Il peut donc servir d’alerte sonore si besoin, d’autant qu’il dispose de 3 mélodies utilisables avec des codes différents.

Carillion
Carillon

 

Pour les Vélux, de simples capteurs d’ouverture

Capteur d'ouverture
Capteur d’ouverture

 

Pareil pour la porte du garage

Capteur d'ouverture
Capteur d’ouverture

 

Il y a aussi un capteur de mouvement pour le déclenchement d’un éclairage et d’une notification sur smartphone

Capteur de mouvements
Capteur de mouvements

 

Les lumières sont pilotables par ces petits relais.

Module d'éclairage
Module d’éclairage

J’utilise aussi les modules d’éclairage pour piloter le sèche serviette. Attention, il faut le piloter au travers du fil pilote. Il y a une petite astuce très bien décrite sur le site d’Alexandre.

La consommation électrique est relevée par un OWL180. Une petite pince ampèremétrique branchée sur le compteur transmet la consommation en temps réel.

Consommation électrique - OWL180
Consommation électrique – OWL180

 

Un petit écran déporté affiche la consommation en temps réel

Consommation électrique - OWL180
Consommation électrique – OWL180

 

Pour le gaz, c’est un peu plus compliqué mais aussi plus amusant. Les modules du commerce sont très chers, le DIY vient à la rescousse.

Capteur DIY Gasmonitor
Capteur DIY Gasmonitor

C’est simple, un arduino relève les impulsions générées par le compteur de gaz (un aimant est placé sur la roue du compteur) et les transmet à Domoticz par radio. On peut capter les impulsions d’un compteur de gaz avec un interrupteur reed.

Par la même occasion je relève la température et l’humidité du garage avec un DHT22.

Je vais aussi ajouter la consommation d’eau un peu plus tard.

IMG_20141230_095054_

Et le circuit vraiment très simple

Sélection_023

Le schéma et le code pour programmer l’arduino sont sur Github ici. C’est une première version mais ça marche très bien.

Pour la transmission des informations, j’ai utilisé une librairie permettant de simuler un capteur de type RFXMeter et RFXSensor. Du coup domoticz détecte le capteur tout seul comme un grand. Pour les informations de température et d’humidité, j’ai plutôt utilisé le format Oregon V2 gentiment mis à disposition par Olivier ici. Le nombre d’impulsions comptées est stocké dans l’EEPROM de l’arduino toutes les heures afin de ne pas perdre les informations en cas de coupure de courant.

Un seul arduino peut donc émuler toutes les sondes possibles et imaginables. D’autant qu’il ne faut qu’un arduino et un petit transmetteur 433MHz qui coûte 2-3€ ! Pour les arduino, j’utilise des Mini Pro en 5v ou en 3.3v suivant le type d’alimentation.

 

Après les informations concernant le matériel, voilà un petit tour de ce que ça donne dans Domoticz.

 

Le dashboard
Le dashboard
Les compteurs
Les compteurs
La conso de gaz
La conso de gaz
Les rapports d'électricité avec les coûts
Les rapports d’électricité avec les coûts
La météo
La météo
Des scénarios
Des scénarios

 

Des scripts lua sont aussi possibles pour faire ce qui n’est pas possible avec l’interface web. Ici par exemple, on envoie une notification sur mobile si la porte du garage est restée ouverte. Pratique avec des enfants </div>
    
    
          <p class= aucun rétrolien

Mardi, septembre 30 2014

Le poulailler connecté

Grâce à une campagne de test concernant la réduction des déchets à laquelle j'ai participé, j'ai maintenant 2 poules et un poulailler (c'est d'ailleurs le nom de la campagne : « deux poules et un poulailler pour réduire nos déchets »).
L'opération consistait à nourrir les poules avec un maximum de déchets qui finissent habituellement dans les poubelles ou au mieux dans un composteur. Plus de 6 mois se sont écoulés, l'opération est maintenant finie et je trouvais qu'il serait intéressant, et surtout amusant de mettre quelques capteurs dans le poulailler.

Cot ! Les poules

Après la brosse à dents connectée ou le produit qui va totalement révolutionner vos WC : SmartPQ, le premier rouleau de papier de toilette connecté et surfant sur cette vague de bullshit créativité, j'ai décidé de me lancer dans une première mondiale : ami des gallinacées, je vous présente le premier poulailler connecté !

Twitter @LaVieDePoule

Fonctionnalités du bestiau :

  • Prise de photos infrarouges, détection des œufs
  • Prise de température / luminosité / capteur mouvement / capteurs d'ouverture
  • Surveillance de la température, de la tension d'alimentation et du courant consommé
  • Alertes via Twitter et SMS (API Free Mobile) si certains seuils sont dépassés (température, alimentation)

Le tout est articulé autour d'un Raspberry et d'une carte fille RaspiO'Mix armée de capteurs :

  • Température de l'enceinte du poulailler
  • Température de chaque nid
  • Détecteur de mouvement IR
  • Caméra infrarouge
  • Capteur de luminosité extérieure
  • 3 capteurs sur tous les accès du poulailler (basse-cour, porte jardin et collecteur d’œufs)
  • Mesure de la tension d'alimentation et du courant consommé

2 sorties sont également pilotables et sont utilisées pour la led témoin et le relais pilotant les leds infrarouges.

Le tout en 1 image :
Vue des entrées / sorties

Le poulailler

Le poulailler fourni dispose de 2 portes et d'un collecteur d'oeufs, sur l'un des côtés disposant d'une ouverture, on vient coller une sorte de cage (à gauche sur la photo) disposant elle-même d'une ouverture permettant l'accès à une éventuelle basse-cour, dans la configuration actuelle, la seconde porte sert à faire sortir les poules directement dans le jardin (la porte devant).

Vue du poulailler

Le boitier et son logement

Afin de protéger l'électronique contre les conditions qui seront certainement rudes en pleine hiver, le tout est logé dans un boitier de répartition étanche.

Le coffret étanche

Détails techniques

Caméra

J'utilise Pi Noir (la caméra officielle de Raspberry sans le filtre infra-rouge), elle est placée face aux 2 nids et sa focale permet d'avoir une vue parfaite sur les poulettes.
Pour les photos de nuit, un relais pilote un anneau de leds infra-rouges permettant d'illuminer le poulailler afin d'y voir quelque chose et ça marche plutôt bien :

ir_0.jpg ir_1.jpg ir_2.jpg ir_3.jpg

La caméra (en noir à droite) et l'éclairage infrarouge situé à la verticale des nids
Le capteur infrarouge à gauche et la caméra Noir à droite Les leds infrarouges

Le principal intérêt de la caméra concerne la détection des œufs via OpenCV. À intervalle régulier, je prends une photo de la scène et je cherche des éventuels œufs après une succession de traitement sur l'image.

Pour le moment, la détection des œufs ne se lance pas automatiquement car j'ai encore un peu de développement à faire pour améliorer l’algorithme qui affiche pour le moment un taux de succès inférieur à 42%.

Pour pouvoir tester l'algorithme de détection, j'ai collecté des images en provenance de la caméra sur lesquelles apparaissent ou non des œufs, le nom des fichiers indique le nombre d’œufs présents (0_1.jpg signifie 1 œuf, il faut ignorer le premier numéro), ainsi, une fois l'image analysé, je peux savoir si le résultat est bon ou non, si tous les œufs de l'image ont bien été trouvés.

Un exemple d'utilisation :

$ python eggcounter.py --export=tests/export tests/with/*
Open tests/with/0_1.jpg [Ok]
Open tests/with/10_2.jpg [Error]
Open tests/with/11_1.jpg [Ok]
Open tests/with/11_2.jpg [Error]
Open tests/with/1_1.jpg [Ok]
Open tests/with/12_2.jpg [Error]
Open tests/with/13_1.jpg [Error]
Open tests/with/14_1.jpg [Error]
Open tests/with/15_1.jpg [Error]
Open tests/with/16_1.jpg [Error]
Open tests/with/2_1_highlight.jpg [Ok]
Open tests/with/3_1.jpg [Ok]
Open tests/with/5_1.jpg [Ok]
Open tests/with/6_1.jpg [Ok]
Open tests/with/7_2_highlight.jpg [Error]
Open tests/with/9_2_highlight.jpg [Error]
Result: 42% (7/16)
- Extra egg detected : 5
- Missed egg : 11
$ 

42%, ce n'est pas énorme mais c'est une partie que j'ai peu travaillé, le score ne peut donc que s'améliorer...

Notez que je lance le même test avec des images sans œuf, le résultat est meilleur (84%) mais ça signifie tout de même que j'arrive à trouver des œufs ou il n'y en a pas ;).

Enfin, je n'ai pas testé d'image depuis que l'éclairage infrarouge est installé, je pense que ça devrait grandement améliorer la détection.

Les différentes étapes de la détection
  1. On part de l'image source
  2. On applique 2 transformations (erode et dilate)
  3. Modification des niveaux (threshold)
  4. Le résultat : 1 œuf trouvé !

Tout ceci en image :
Image originale Erode / Dilate Niveaux Oeuf trouvé !

Capteur de mouvements IR

L'idée est de repérer les mouvements dans l'enceinte du poulailler afin de savoir si les poules sont dedans ou non lorsque les portes extérieures sont ouvertes.

J'utilise un capteur de type PIR HC-SR501 qui possède 3 broches, 2 d'alimentation et une de sortie. Le souci avec ce module est qu'il possède son propre régulateur 3V (à faible chute de tension), or, je l'alimente en 5V et j'ai besoin d'une tension de sortie de 5V pour un niveau haut (3V pourrait être pris un niveau indéterminé par l'adaptateur de niveau de la carte RaspiO'Mix #vécuInside, enfin, je ne souhaite pas le brancher en direct sur les IO du Raspberry), j'ai donc ajouté un petit montage avec un transistor et une résistance faisant office d’adaptateur de niveau (0V -> 5V, 3V -> 0V).

Le capteur étant assez sensible et surtout pas vraiment adapté à ce genre d'utilisation (dans un environnement aussi confiné), le logiciel gère en grande partie ces insuffisances (debouncer et compteur d'impulsions) et ça marche assez bien.

Le capteur infrarouge à gauche et la caméra RaspberryPi Noir à droite
Le capteur infrarouge à gauche et la caméra Noir à droite

Capteur de luminosité extérieure

Il est constitué d'une simple photorésistance (LDR) dont le principe de fonctionnement est une modification de la résistance à ces bornes proportionnellement à la luminosité (plus l'éclairage est fort, plus la résistance diminue).
Ce capteur permet de donner des indications sur l'heure de coucher des poules car le rythme de ces dernières est totalement calé sur celui du Soleil, d’où l'expression se coucher à l'heure des poules...

La LDR est utilisée avec un pont diviseur de tension qui attaque directement une des entrées analogiques de la carte RaspiO'Mix.

La LDR (à droite) et un capteur de température à gauche (DS1820)
La LDR (à droite) et un capteur de température à gauche

Capteur d'accès

Aux nombres de 3 et disposés sur toutes les ouvertures, ils sont simplement constitués de microswitch, à chaque changement d'état de l'entrée associée au capteur, un évènement est généré dans le code et une action est générée (Tweet, etc...), l'anti-rebond est géré du côté logiciel.

Les accès :

  • Basse court
  • Jardin entier
  • Collecteur d’œufs

Capteur d'ouverture basse-cour Capteur d'ouverture jardin Capteur d'ouverture collecteur oeufs

Mesures de tension et courant

La valeur de la tension d'entrée (environ 12V) juste avant le régulateur à découpage est présentée via un pont diviseur de tension à une des entrées analogiques du RaspiO'Mix, la seconde mesure concernant la courant consommé par le dispositif.

Le but serait d'alimenter le tout par panneau solaire, cela explique aussi la présence de ces 2 capteurs.

Les sondes de température

Le capteur de l'enceinte du poulailler est basé sur un simple LM35 connecté sur une des entrées analogiques de la carte RaspiO'Mix, au niveau logiciel, je lis très simplement cette valeur, la multiple par 100 (1 degré = 10mV) et l'affiche dans les log ou la publie sur Twitter, dans la configuration (config/general.py), il est possible de définir des seuils acceptables (3 à 32 degré C) au delà desquels une alerte est générée et un twit m'est directement adressé pour me prévenir que mes poulettes ont froid ou trop chaud...

La prise de température de chaque nid est un peu plus complexe que pour l'enceinte, la distance entre le Raspberry et les nids étant plus grande, un capteur analogique n'aurait pas été très précis, ainsi, afin d'avoir une mesure fiable, j'ai utilisé des sondes OneWire DS1820 qui autorisent de grande distance de câble sans perte de précision (et puis de toute façon, je n'avais plus d'entrées analogiques disponibles).

Ces 2 sondes n'utilisent que 2 fils (mode parasite), la masse et le tension / signal :

Screen_Shot_2014-08-13_at_14.45.41.png

Au niveau logiciel, afin de fonctionner correctement, ces sondes ont besoin des modules suivants avec les paramètres qui vont bien :

$ modprobe w1-gpio gpiopin=25 pullup=1
$ modprobe w1-therm
$ 

Une fois les modules chargés, ils vont "pouller" à intervalle régulier le bus afin de découvrir et lire les valeurs des capteurs connectés sur le bus, pour les découvrir, une petite commande suffit :

$ ls /sys/bus/w1/devices/
10-0008008ba2a9  10-0008008bceb5  w1_bus_master1
$ cat 10-0008008ba2a9/w1_slave
1b 00 4b 46 ff ff 01 10 23 : crc=23 YES
1b 00 4b 46 ff ff 01 10 23 t=13687
$ 

Le fichier w1_slave contient toutes les informations qui nous intéressent, il est à parser et c'est la fonction read_w1_temperature qui s'en occupe et pas folle la guêpe, en cas d'erreur de lecture sur le bus, une nouvelle tentative est faite...

Durant le développement, un bug dans le pilote w1 foutait la brouille sur le bus i2c et empêchait la caméra de fonctionner correctement, il n'était donc pas possible d'utiliser conjointement la caméra et les capteurs de température, si je voulais utiliser ces derniers, j'étais obligé de rebooter en activant les modules, la caméra devenant alors inaccessible, pour l'avoir, il fallait rebooter et bien entendu, ne pas charger les modules w1 (plus d'informations à propos de ce problème sur GitHub).

J'ai réglé ces problèmes avec cet ordre dans /etc/modules :

$ cat /etc/modules
# First load onewire driver before i2c module
w1-therm
w1-gpio gpiopin=25 pullup=1

i2c-bcm2078
i2c-dev
#spi-bcm2708
rtc-ds1307
#snd-bcm2835
bcm2708_wdog

cuse
$ 

Note à propos des capteurs de température des nids : en suivant leurs températures, il est possible de détecter la présence des poules sur les nids, plus pratique et précis qu'un système mécanique.

Le logiciel

C'est Python qui fait tout le travail de notifications, de surveillance, etc... J'utilise également Motion pour streamer « en live » le flux vidéo en provenance de la caméra afin de voir ce qui se passe dans le poulailler.

Pour tout le reste, c'est Python qui intervient, j'utilise, entre autre, les modules suivants :

  • OpenCV pour la recherche des œufs
  • Twython pour l'interfaçage avec Twitter

2 threads sont utilisés, un s'occupe d'envoyer les notifications dans la console, surveiller les seuils d'alertes, générer les messages et les envoyer sur Twitter et un autre thread gère les réponses aux messages qui sont adressés au compte Twitter, oui, je l'admet, mes poules n'ont pas le temps de répondre à tous les messages et un CM automatisé leur permet de vaquer à leurs occupations tranquillement !

J'ai également développé un bout de code qui permet de former des phrases de manières plus ou moins « aléatoire » afin de ne pas toujours envoyer les mêmes messages sur Twitter.

Voici un exemple d'utilisation très simple; imaginez que vous vouliez pouvoir dire bonjour à quelqu'un via l'appel à un programme mais d'une manière originale à chaque fois, par exemple :

Nous avons d'un côté "Bonjour", "Salut" et "Hello", de l'autre "toi", "l'ami" et "vous", en combinant tout ça, on obtient ces bouts de phrases :

  • Bonjour toi / Bonjour l'ami / Bonjour vous
  • Salut l'ami / Salut toi / Salut vous
  • Hello vous / Hello toi / Hello l'ami

Vous avez compris le principe, on combine plusieurs morceaux de phrases ensemble afin d'en former d'autres.

Pour automatiser ça avec ma lib, on créé un tuple de tuple ainsi :

test = (
    '{0} {1}',
    (
        ( 5, 'Bonjour'),
        ( 2, 'Salut' ),
        ( 2, 'Hello' ),
    ),
    (
        ( 1, 'toi'),
        ( 5, 'l\'ami{0}', (
            ( 1, ', il est %hour% !'),
            ( 1, '!'),
        )),
        ( 5, 'vous'),
    )
)

Notes :

  • Le premier élément du tuple '{0} {1}' est une règle de formatage "format", le second élément et le troisième correspondent aux éléments que l'on va « sélectionner aléatoirement » et venir remplacer dans dans le premier élément.
  • Le second tuple est constitué de sous tuple contenant un nombre (la pondération) et une chaine de caractère, plus la valeur de la pondération est élevée et plus la chaine de caractère associée à de chance d'être choisi.
  • Vous pouvez imbriquez autant de tuple que vous le souhaitez pour créer des phrases très complexes

Après, il suffit de faire un appel à la fonction speak avec notre tuple en paramètre et elle nous généra une phrase automagiquement.

speak(test, hour='11h')

Vous noterez au passage que vous pouvez injecter des paramètres nommés qui serviront à remplacer leur équivalent sous la forme %param% dans les chaines de caractères.

Et voici ce que ça donne :

$ python speak.py
Bonjour l'ami, il est 11h !
$ python speak.py
Bonjour vous
$ 

Si vous voulez jouer avec cette lib, vous la trouverez dans lib/speak.py.

Les pistes d'évolutions

  • Améliorer la détection des œufs
  • Générer des stats (pontes, températures, éclairage, etc...)
  • Reconnaitre chaque poule (les lier à la production d’œufs)
  • Autonomie énergétique du dispositif

Le tout est disponible sur GitHub sous une licence évidemment libre : GitHub / hugokernel / LaVieDePoule

Mercredi, décembre 11 2013

RaspberryPi + Grove = RaspiO'Mix

RaspiO'Mix est une carte fille pour Raspberry Pi développée par mes soins sur une idée de Michel d'Erasme qui va vous permettre de connecter facilement et rapidement tout un tas de modules de type Grove initialement prévus pour Arduino.

Caractéristiques

  • Aux dimensions du RaspberryPi
  • 4 entrées / sorties tolérantes 5V (basée sur un TXS0108PWR)
  • 4 entrées analogiques, 0-5V, 18 bits de résolution
  • 2 entrées numériques via DIP switch
  • Horloge temps réel avec batterie de sauvegarde
  • 2 connecteurs pour I2C
  • 1 connecteur pour communication série
  • Alimentation 5V via jack

Connecteurs

Bien entendu, cette carte est entièrement libre, toutes les informations nécessaires pour la fabriquer sont disponibles sur GitHub / RaspiO'Mix.

Fonctionnement

Voici le schéma de principe :
schema.png

La conversion analogique / numérique est assurée par un MCP3424, un CAN I2C de 18 bits de résolution, une horloge temps réel DS1307 est présente sur le même bus.

Une librairie Python est disponible et vous permet d'accéder simplement aux différentes fonctions d'entrées / sorties, I2C, série et ainsi d'intéragir avec un monde 5V bien au chaud dans l'environnement 3V3 du RaspberryPi...

La carte en action

Je veux mon propre RaspiO'Mix

2 solutions s'offre alors à vous :
  1. DIY : Tout est à votre disposition pour le faire vous même, sur GitHub, vous trouverez la liste des composants, des informations techniques, les fichiers Eagle, les fichier gerber, bref, TOUT est disponible pour le faire vous même !
  2. Les cartes RaspiO'Mix sont disponibles à la vente sur le site [www.raspiomix.org|http://raspiomix.org/|fr].