Mot-clé - raspberrypi

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

Vendredi, février 20 2015

Des nouvelles de RaspiO'Mix

J'ai peu donné de nouvelle récemment, notamment au sujet de RaspiO'Mix et pourtant, il y a à dire...

Un site dédié

Un site dédié permet de commander directement les RaspiO'Mix : www.raspiomix.org, tant qu'il y a du stock, vous recevrez votre RaspiO'Mix en 48h.

Je n'exclus pas de proposer les RaspiO'Mix aux revendeurs intéressés, merci de me contacter directement.

Librairie Python

La librairie Python à quelque peu évoluée et est devenue encore plus simple.

Pour lire une tension sur une des entrées analogiques suivi d'une lecture des 4 entrées analogiques :

$ python
>>> from raspiomix import Raspiomix
>>> r = Raspiomix()
>>> r.readRtc()
2014-11-12T20:41:26
>>> print(r.readAdc(0))
[4.0669732000000005]
>>> print(r.readAdc((0, 1, 2, 3)))
[4.066934600000001, 0.010923800000000001, 0.08515160000000001, 0.2866822]
>>> 

Cette librairie est disponible sur GitHub : GitHub / RaspiOMix / raspiomix.py

RaspiO'Mix+

Présentation

RaspiO'Mix poursuit son évolution avec la RaspiO'Mix+ créés pour être utilisée comme vous pouvez vous en douter avec un Raspberry+.

J'ai repris le tableau d'un précédent article sur RaspiO'Mix comparant cette dernière avec la carte GrovePi :

Fonctionnalité GrovePi RaspiO'Mix RaspiO'Mix+
Entrées / Sorties 7 4 8
Entrées analogiques 3 4 8
Résolution CAN 10bits 18bits 18bits
Lignes I2C 4 2 3
Lignes série 1 1 1
Horloge Non Oui (via DS1307) avec batterie de sauvegarde Oui (via DS1307) avec batterie de sauvegarde
Interrupteur 0 2 2
Alimentation via le Raspberry via le Raspberry ou une prise jack / bornier via le Raspberry ou une prise jack / bornier
Option - - Capteur I2C TMP10

Note: GrovePi+, l'évolution pour RaspberryPi+ possède les même caractéristiques que GrovePi.

RaspiO'Mix+ est au format Raspberry HATs+ et donc bien plus petite que la version originale, la densité de composants est donc plus forte.

RaspiO'Mix comparée à RaspiO'Mix+ :
Comparatif de taille RaspiO'Mix vs RaspiO'Mix+

Une carte RaspiO'Mix+ sur un RasberryPi :
RaspiO'Mix+ sur un RaspberryPi+

En détail

Le schéma de principe :
schema.png

J'ai ajouté un deuxième MCP3424 afin de doubler le nombre d'entrées analogiques, un second convertisseur de niveau à 4 entrées / sorties (TXB0104PWR) rejoint le TXS0108PWR et sera utilisé pour les entrées sorties de type Push / Pull (le TXS0108PWR ayant un mode haute impédance).

Une EEPROM série rejoint la carte afin de répondre à la spécification HAT mais je ne sais pas si elle sera montée sur les cartes (quoiqu'il arrive, son emplacement sera laissé sur le pcb).

J'ai également ajouté un capteur de température I2C (TMP10x) sous la carte permettant la mesure de la température rayonnée par le Raspberry mais le circuit intégré ne sera pas disponible de série, ou alors, uniquement en option (sauf si j'arrive à les obtenir par quantité à un coût intéressant).

La suite

Pour le moment, la carte RaspiO'Mix est fonctionnelle mais non disponible à la vente, quelques modifications sur l'emplacement des composants sur le pcb doivent encore être faite (merci Seeedstudio de proposer des librairies Eagle légèrement foireuse).

Vendredi, janvier 24 2014

Mes projets faits main pour 2014

Je profite de ce début d'année pour faire un point sur l'avancement de certain de mes projets personnels liés au DIY et qui devraient être mis à jour ou terminés dans le courant de cette l'année...

LedPong

Il s'agit d'une version réduite du Led Pong Wall du Tetalab.

Le montage est terminé (un simple avr d'Atmel pilotant une matrice de led hautes luminosités) et fonctionne correctement mais le rendu n'est pas tout à fait celui que je souhaite, la lumière n'étant pas assez forte. J'envisage de remplacer toutes les leds par des modèles RGB adressables (WS2812) et pilotées par un RaspberryPi.

2011-06-09_16.55.39.jpg

À faire :

  1. Faire des tests avec des WS2812 pour s'assurer que l'adressage de 64 leds est suffisamment rapide
  2. Enlever l'ancienne matrice de led
  3. Poser les WS2812
  4. Interface et intégration avec le RaspberryPi

Ballon à air chaud

C'est un aérostat constitué de 8 fuseaux de 9m² réalisé à partir de sacs poubelle bas de gamme (faible épaisseur, environ 17 micron d'épaisseur), le ballon est fini et traine depuis plus d'un an dans un coin, il faut dire que malgré le temps que j'ai passé à le faire (quelques dizaines d'heures), l'arrivée de mon Ultimaker m'a totalement fait changer de priorité.

C'est une belle bête capable de lever théoriquement 2kg de charge utile, je compte profiter d'une journée fraiche pour le gonfler et faire un premier test.

La moitié du ballon déployé à côté du chat !

À faire :

  1. Fabriquer une nacelle pour tenir les suspentes et les relier à un fil maitre
  2. Trouver une journée froide et sans vent pour faire un test (certainement un matin très tôt

Bleuette

Encore beaucoup de boulot pour le robot hexapode Bleuette mais le projet avance...

2013-03-03_19.39.11.jpg

À faire :

  1. Ajouter une caméra sur une tourelle mobile
  2. Revoir tout le système d'alimentation en énergie pour une autonomie plus grande
  3. Améliorer le contrôle des pattes avec une meilleure gestion de la vitesse des servos
  4. Encore beaucoup de choses...

CappuccinoMaker

Amateur de cappuccino à la mousse de lait bien dense et ne trouvant pas d'appareil suffisamment puissant et fiable pour en faire (oui, c'est tout un art), je vous dévoilerai ma version fait main que j'utilise depuis quelques années ainsi que sa nouvelle toute petite version dont le boitier est réalisé à l'impression 3D...

2013-09-13_09.50.36.jpg

À faire :

  1. Tests d'autonomie avec la nouvelle batterie (quelques 120mA)
  2. Finir le nouveau boitier

Automatiser la Blossoming Lamp

Découverte sur le stand RepRap au 3DPrintShow de Paris, cette plante (Blossoming Lamp) à la particularité d'être imprimée en une seule fois (et @f4grx à dû s'y prendre à plusieurs fois pour que j'arrive à y croire ;)), je me devais d'imprimer cette curiosité :

L'idée serait de lui implanter une lumière et de la motoriser afin qu'elle s'ouvre et se ferme toute seule.

À faire :

  1. Trouver comment motoriser la mécanique d'ouverture
  2. Réalisation de l'électronique pour piloter la méca et la lumière

OpenAlarm : Un système d'alarme libre

Suite à l'annonce de création du projet, pas mal de personnes se sont rejointes au projet, apportant leurs idées, conseils ou développements réalisés de leur côté étayant avec des bases très intéressantes le projet à peine commencé...

Pour le moment, j'ai commandé différents composants (module radio, gsm) qui me permettront de réaliser un prototype, dont toutes les informations utiles seront mises à disposition sur la page du projet GitHub / OpenAlarm et sur le forum hébergé sur MadeInFr.

À faire :

  1. Réaliser un premier prototype de capteur
  2. Communication entre le RaspberryPi et un capteur
  3. Envoi de SMS via SIM900 depuis le RaspberryPi
  4. Beaucoup d'autres choses...

RaspiO'Mix

La carte fille RaspiO'Mix que j'ai présenté sur ce blog récemment dont vous allez entendre parler de nouveau d'ici peu de temps...

raspiomix.jpg

À faire :

  1. Écriture d'exemple / enrichissement de la documentation

LeMurmureDuSon

LeMurmureDuSon est un dispositif jouant le rôle de post'it vocal que je n'ai jamais présenté sur ce blog et qui est encore en cours de développement.

Il a été pensé au cours d'un workshop du Museolab d'Érasme oû des équipes pluridisciplinaires ont été réunies autour d’un thème particulier : comment le handicap peut-il être source d’innovation pour tous ?

Ce workshop à donné naissance à 3 projets dont LeMurmureDuSon fait parti, dans la vidéo ci-dessous, vous découvrirez ces 3 projets (la présentation du projet LeMurmureDuSon commence à 3min22) :

Museolab : Le handicap source d'innovation from Erasme on Vimeo.

À faire :

  1. Nouveau design
  2. Nouvelle carte électronique
  3. Plein d'idées à mettre en oeuvre...

Intervalomètre photo

L'Intervalomètre diy est un vieux projet mis en standby pour le moment, n'ayant plus trop le temps pour pratiquer la photo, le besoin de ce dispositif est moindre qu'à l'époque, cependant, la carte électronique est faite et est fonctionnelle à quelques détails prêt...

Je reviendrai dessus le temps voulu mais ce n'est plus une priorité.

À faire :

  1. Déboguer !

Lundi, février 11 2013

Nouvelles avancées de Bleuette !

Bleuette marche

Pour commencer, voici une vidéo de Bleuette effectuant ses premiers mouvements :

Bleuette first step from hugo on Vimeo.

L'électronique

Le contrôle des servos de Bleuette (12 pour les pattes + 2 optionnels) se fait au travers d'une carte fille (shield) pour Arduino conçue pour ne pas être totalement dépendante de Bleuette, ainsi, vous pouvez parfaitement l'utiliser pour un tout autre projet.

Ses caractéristiques sont les suivantes :

  • Gestion parfaitement synchrones (voir en dessous) de 14 servos
  • Contrôle de la tension des servos
  • Contrôle du courant consommé par les servos
  • Port d'extension intégré (avec disponibilité de l'alimentation +5V et 4 entrées / sorties RA2 à RA5)

Parfaitement synchrone signifie que les impulsions à destination des servos commencent toutes au même moment avec un décalage très très faible, vous pouvez lire la documentation originale sur la carte.

Le pilotage des servos se fait en envoyant des trames de 17 octets contenant une entête, une commande et la position des servos + un checksum.

J'ai fait faire les PCB par Seeedstudio, qui fait de la très bonne qualité pour un prix très intéressant. La carte est simple à réaliser, la soudure du PIC18F452 nécessite tout de même un peu de doigté et un minium de matériel mais ça reste jouable avec du matériel amateur.

Voici une vue de la carte :
La carte électronique de Bleuette

Si vous souhaitez faire vous même la carte, rendez-vous sur cette page pour avoir la dernière version des fichiers Eagle : Pcb de Bleuette

Pour ceux qui souhaiteraient se procurer une carte (version 1.0.2), frais de port inclu pour la France métropolitaine :

  • La carte seul (sans composant) pour 6€, livraison en France
  • Le PIC18F452 programmé : 10€
  • Pour le kit complet, carte + composants soudé ou non, me contacter

Notez également que j'ai effectué des modifications récentes sur le schéma de principe et le PCB, elle est dorénavant en 1.2.1 (ajout d'un condensateur de découplage C9, des diodes zener D2 et D3 de protection sur les entrées analogiques, modification de l'interrupteur, ajout d'un pont SJ1 pour le reset).

Logiciel

La méca et l'électronique étant finies, j'ai pu attaquer le logiciel embarqué qui est de 2 sortes :

L'assembleur PIC

Rien de spécial à dire, il se trouve ici et comporte tout ce dont on a besoin pour piloter Bleuette et donc ne devrait plus vraiment évoluer...

Le code pour Arduino

Voici la structure :

Et nous avons 4 librairies :

  • Bleuette : C'est par ici que tout passe
  • Sequencer : C'est lui qui gère les sequences définies dans le fichiers sequences
  • ServoController : Pilote de la carte de contrôle de servos
  • SerialCommand : Librairie externe très pratique pour la gestion de commande via la liaison série.

Déplacer Bleuette

Pour faire bouger les pattes de Bleuette, c'est assez simple, commençons par un exemple :

bleuette.servo.set(0, 128);

Cela aura pour effet de positionner le servo 0 à sa position intermédiaire 128.

Si maintenant, on souhaite faire faire des pompes à Bleuette, on ne va pas répéter 24 fois la commande précédente pour positionner chaque patte, sinon, on ne va jamais s'en sortir ! Utilisons plutôt, une séquence :

Tout d'abord, déclarons une structure de type motion_t nommée motion_pushup :

// Push up
motion_t motion_pushup[] = {
    {
        DELAY_MIN, // Durée du déplacement courant
        {
            __, __, __, __, __, __, // Position des pattes horizontales
            UP, UP, UP, UP, UP, UP // Position des pattes verticales
        },
        NULL // Une callback qui sera appelée à chaque fin d'exéction de la position
    },
    {
        DELAY_MIN,
        {
            __, __, __, __, __, __,
            DOWN, DOWN, DOWN, DOWN, DOWN, DOWN
        },
        NULL
    }
};

Puis créons la séquence en elle même :

sequence_t seq_pushup = {
    "Push up",  // Le nom de la séquence
    2, // Le nombre de mouvement dans la séquence
    motion_pushup // La structure de déplacement que nous avons créé plus haut
};

Maintenant, nous n'avons plus qu'à appelé la séquence ainsi :

// Pour la jouer en avant
bleuette.sequencer.forward(sequences[seq]);

// Pour la jouer à l'envers
bleuette.sequencer.backward(sequences[seq]);

Voilà pour cette introduction rapide, je vous invite à regarder le code, il est vraiment simple...

Évolution en cours

La prochaine évolution de Bleuette lui donnera de vrais pieds qui lui permettront de moins glisser mais surtout, lui donnera le toucher au travers d'un petit interrupteur, ainsi, en posant une patte, il pourra s'assurer que le sol est bien en dessous...

Voici une vue de ses bouts de pattes :
Le bout de patte faisant office de capteur

La partie inférieure (la demi sphere et le cylindre extérieur) est mobile et glisse dans le cylindre plus petit dans lequel se trouve un interrupteur poussoir, c'est ce dernier qui fait office de rappel mécanique.

La partie en contact avec le sol (la demi-sphere sur l'image) sera en PLA Flex afin d'obtenir un maximum d'adhérence.

Ses 6 pattes devraient en être équipées, pour cela, un circuit intégré (4512) branché sur le port OPTION permettra de sélectionner la patte à lire via une adresse sur 3 bits, on occupera ainsi seulement 3 bits de sorties pour l'adressage + 1 bit de sortie pour connaitre l'état (patte posée ou non).

Évolutions futures

Bleuette devrait être équipé d'une liaison Bluetooth, d'un capteur magnétique afin de garder un cap lorsqu'il marche et enfin, d'une tourelle mobile avec un capteur ultrason pour détecter les obstacles devant lui et tout cela intégré dans une seconde carte fille.
Bleuette se sentant un peu à l'étroit avec Arduino, il n'est pas totalement exclu que je porte le code pour tourner sur un Raspberry Pi...

Et bien entendu, Bleuette attend impatiemment des frères et soeurs : toute contribution est la bienvenue !