Introduction
Comme je l'annonçais dans un précédent article, Bleuette va pouvoir être piloté par un Raspberry Pi grâce à une carte fille dédiée dont je vais décrire les caractéristiques ici même.
Le choix du Raspberry Pi s'est porté grâce à 2 de ses atouts : le coût et la puissance, en effet, pour moins de 40€, on dispose d'un système embarqué sous Gnu/Linux avec 512Mio de RAM, un processeur pouvant monter à 1Ghz, à côté des 2.5Kio de RAM et des 16Mhz de l'Arduino Leonardo, ça fait une sacré différence et ça laisse entrevoir plein de nouvelles possibilités...
Notez que ça ne signifie pas l'abandon du développement de Bleuette sur Arduino, il s'agit juste de donner le choix du système.
Caractéristiques
Les avantages d'utiliser un tel ordinateur embarqué sont nombreux, comme par exemple, la facilité pour embarquer / supporter des périphériques comme une clef WiFi pour programmer Bleuette à distance ou encore brancher une webcam (notamment le module caméra officiel), etc... Mais il n'y a pas que des avantages, on se retrouve aussi avec quelques soucis comme par exemple l'alimentation, le Raspberry Pi consomme plus qu'une petite carte Arduino et ses entrées / sorties ne sont absolument pas compatible avec le 5V utilisé sur la précédente carte fille, il faudra donc faire avec...
BleuettePi est conçue à la base pour faire fonctionner Bleuette mais j'ai fait en sorte que cette carte soit suffisamment généraliste pour être utilisée dans d'autre application.
Voici les caractérisitiques de cette carte :
- Gestion de 14 servos (toujours de manière synchrone)
- Mesure du courant consommé par les servos
- Mesure de la tension de la batterie
- Connexion pour une carte GY-27 contenant un accéléromètre et un compas (via I2C)
- 16 entrées / sorties compatible 5V avec 2 lignes d'interruption, le tout commandé en I2C
- 6 entrées analogiques
- Amplificateur audio pour ajouter le son à votre Raspberry Pi (à base de LM386)
- 5 entrées / sorties généralistes compatible 5V direct Raspberry + 5 autres entrées / sorties disponible si le bus SPI n'est pas utilisé
- Toutes les broches du SPI (MOSI, MISO, SCLK, CE0, CE1) sont disponibles sur un connecteur et compatible 5V
- Un module horloge temps réel (RTC) pour garder votre Raspberry Pi à l'heure !
- 4 lignes d'interruptions physiques (INTA et INTB pour les IO, INTC en provenance de l'horloge temps réel, INTD)
Schéma de principe
Voici le schéma de principe complet :
Détails
Les détails bloc par bloc du schéma de principe :
Liaison au RaspberryPi
La liaison au RaspberryPi se fait via P1 :
L'alimentation
Pour fonctionner, le RaspberryPi a besoin d'une tension d'alimentation de 5V avec une intensité d'environ 1A.
La carte fille reçoit 2 tensions en entrée :
- Le 5V pour le Raspberry et pour la carte fille
- Une tension pour alimenter les servos (de 5V à 6V selon les servos).
Une autre entrée (BATT et BATT1) optionnelle permet de recevoir la tension brute de la batterie à des fins de mesure via le pont diviseur R1 / R2.
Note: Si la tension d'alimentation des servos est directement celle de la batterie, le jumper (J_BATT0 ou J_BATT1) permette d'injecter la tension directement sur R1 / R2.
Gestion des servos
Pour le pilotage des servos, un PIC18F4520 programmé avec une version dérivée du projet Pic24Servos est utilisé de la même façon qu'avec la Bleuette Shield Arduino.
Mais comme mentionné plus haut, les entrées / sorties du Raspberry Pi fonctionnent uniquement avec une tension de 3.3V, le PIC18F4520 aussi mais rien ne permet d'affirmer que les servos vont « voir » les impulsions de 3.3V comme des niveaux hauts, donc, j'ai choisi d'alimenter le PIC en 5V et d'adapter la liaison série avec le Raspberry Pi.
Pour la transmission de donnée du RaspberryPi vers le Pic, le signal passe par l'adaptateur de niveau 3V / 5V, pour la communication inverse, du Pic vers le RaspberryPi, un simple diviseur de tension (R9 / R10) ramène la tension à 3.3V max.
Le découplage de la ligne d'alimentation des servos est effectué par plusieurs condensateurs de bonne capacité (C1 et C9).
Les entrées / sorties
L'adaptateur de niveau 3V / 5V bidirectionnel pour les entrées sorties généralistes est un TXB0108PWR :
Une partie des entrées / sorties sont disponibles via les connecteurs OPTION0 et OPTION1 :
Horloge temps réel (RTC)
Une horloge temps réel est disponible via le bus I2C afin de garder le RaspberryPi à l'heure, même sans alimentation grâce à la pile bouton de sauvegarde (CR1220).
C'est le DS1339 qui joue le rôle d'horloge, ce dernier est équipé d'une sortie (SQW/OUT) cablée sur INTC (INTterruption Clock) permettant au choix d'obtenir un signal carré à une fréquence précise ou d'utiliser cette broche comme réveil, cette dernière est disponible sur le connecteur OPTION0, ainsi, on peut imaginer un dispositif qui sortirait le RaspberryPi d'un sommeil très profond puisque dans cet état, il ne consommerait absolument rien...
Le son
Le Raspberry Pi disposant d'une sortie son, il est intéressant d'en profiter via l'utilisation d'un amplificateur et d'un haut parleur externe.
Rien de particulier à dire, à part un potentiomètre permettant d'atténuer le niveau d'entrée.
Mesure du courant et tension LiPo
Un pont diviseur de tension pour la mesure de la tension de la batterie et l'utilisation d'un MAX4173 pour la mesure du courant.
Sur la version à base d'Arduino, c'est ce dernier qui s'occupait de la conversion analogique, or, le Raspberry Pi ne contient pas de convertisseur analogique / numérique (CAN), du coup, il aurait fallu embarquer un circuit intégré spécialisé pour cette fonction mais il n'y a plus de place sur la carte et il y a une meilleure solution, en effet, le PIC18F452 utilisé pour la gestion des servos possède un CAN et justement, ces broches sont libres...
La mesure du courant (SERVO_CURRENT) se fait via l'entrée AN5 et la tension (LIPO_VOLTAGE) via l'entrée AN4.
Carte accéléromètre et magnétomètre
Vu le format de ce type de composant (très difficile à souder avec du matériel amateur), j'ai opté pour un module GY-27 intégrant les 2 composants, le magnétomètre (HMC5883L) et l'accéléromètre (ADXL345) dialoguant tous les 2 en I2C, ils sont donc branchés sur la liaison I2C hardware du Raspberry Pi.
La carte sera donc directement branchée sur la carte fille BleuettePi permettant en plus un gain de place non négligeable.
Pour ceux ne voulant pas utiliser cette carte, il est tout à fait possible de l'utiliser pour autre chose, ça reste de l'I2C...
Liaison SPI
Un autre convertisseur de niveau 3V / 5V (TXB0108PWR) est présent pour assurer la conversion de niveau de tension du bus SPI :
Guirlande de led RGB
Pour le pilotage de la guirlande de led RGB à base de LPD8806 depuis le Raspberry Pi, la librairie Boblight sera utilisée.
Au niveau électronique, rien de particulier, le pilotage se fait via le bus SPI hardware du Raspberry (ligne MOSI et SCLK).
Informations supplémentaires
Un premier batch de 5 PCB est en cours de fabrication chez Seeedstudio à l'heure où j'écris ces lignes.
Les fichiers sources sont disponibles au format Eagle sur GitHub :
- Le schéma de principe
- Le PCB
La pages dédiées sur le wiki : BleuettePi sur GitHub.