Construire un Shrimp, l’équivalent d’un Arduino/Genuino Uno, pour moins de 10$

Merci de partager...Share on Google+Tweet about this on TwitterShare on FacebookEmail this to someoneShare on Reddit

Un superbe projet, malgré le nom bizarre (Crevette?!?)

Dans l’émission #98, Sandrine affirme que c’est plutôt simple de faire son propre Arduino/Genuino Uno avec quelques pièces et elle a tout à fait raison. J’ajouterais que c’est une activité très formatrice qui vous permet de mieux comprendre le microprocesseur ATMEGA328 de Atmel qui est au coeur du Arduino/Genuino Uno. Mieux encore, être en mesure de faire ce circuit vous même, vous donnera plus de flexibilité dans vos projets futurs.

Le circuit que je vous propose de réaliser dans ce tutoriel est appelé un Shrimp. Il vous permet de fabriquer l’équivalent d’un Arduino/Genuino Uno pour moins de 10$. Compte tenu du fait qu’un Arduino/Genuino Uno officiel coute autour de 20$ à 30$, c’est une activité qui est quand même avantageuse au niveau des coûts. Notez cependant que, comme Sandrine le mentionne dans émission #98, si vous voulez simplement vous procurer un Arduino/Genuino Uno à faible coût, vous n’arriverez pas à battre les clones qui se vendent pour ~5,00$ sur eBay.

Par ailleurs, un Shrimp est beaucoup plus qu’un simple circuit. En fait, c’est un super beau projet qui a pour but d’apprendre l’électronique aux gens qui le souhaitent! Je vous recommande fortement d’aller visiter le site web officiel, soit http://shrimping.it. Il est très bien fait, donne des instructions claires et propose pleins d’applications intéressantes!!

Circuit et bill of material (BOM)

Sur le site officiel du Shrimp, vous retrouverez 2 versions du circuit : la version minimale et la version protégée. Comme la version protégée est pratiquement aussi simple à monter que la version minimale, j’utilise toujours la version protégée.

Jetons un coup d’oeil au circuit à réaliser ainsi qu’aux pièces à se procurer…

Circuit Fritzing d'un Shrimp protégé
Télécharger le circuit Fritzing

Circuit KiCAD d'un Shrimp protégé
Télécharger le circuit KiCAD

BOM

Nom Quantité Prix
12 jumper wires 1 1,42$
Breadboard 400 contacts 1 4,35$
ATMEGA328 (avec bootloader du Uno) 1 5,02$
Cristal 16 Mhz 1 0,31$
Condensateur 10 uF (électrolythique) 1 0,14$
Condensateur 100 nF (céramique) 4 0,48$ (0,12$ ch)
Condensateur 22 pF (céramique) 2 0,18$ (0,09$ ch)
Résistance 10 k 1/4 W 1 0,08$
Bouton 1 0,15$
CP2102 1 1,83$

Note: Les prix des composants proviennent tous du site dipmicro, sauf le prix du CP2102 qui vient de eBay.

Le coût total pour 1 Shrimp est donc de 13,96$.

Trucs pour économiser

Bon, 13,96$ est moins cher qu’un Arduino/Genuino Uno officiel, mais ce n’est pas en dessous de 10$. En fait, ce n’est pas nécessairement facile de faire 1 seul Shrimp pour moins de 10$. Par contre, étant donné que le prix unitaire des composants peut diminuer drastiquement en fonction du nombre acheté, c’est plutôt facile de faire plusieurs Shrimps pour moins de 10$ chacun.

Voyons la liste d’achats que je propose :

Nom Nombre acheté Prix Prix unitaire
Breadboard 400 contacts + 65 jumper wires 4 15,00$ 3,75$
Breadboard 730 contacts 1 5,86$ 5,86$
ATMEGA328 (avec bootloader du Uno) 1 5,02$ 5,02$
ATMEGA328 (sans bootloader) 5 17,88$ 3,58$
Cristal 16 Mhz 20 3,51$ 0,18$
Condensateur 10 uF (électrolythique) 20 0,91$ 0,05$
Condensateur 100 nF (céramique) 50 1,59$ 0,03$
Condensateur 22 pF (céramique) 50 1,06$ 0,02$
Résistance 10 k 1/4 W 50 0,99$ 0,02$
Résistance 330 ohm 1/4 W 50 0,99$ 0,02$
Bouton 20 1,08$ 0,05$
DEL 5 mm 20 1,07$ 0,05$
CP2102 1 1,83$ 1,83$

Note: Les prix des composants proviennent tous du site dipmicro, sauf le prix du CP2102 qui vient de eBay.

En substituant les nouveaux prix unitaires au BOM proposés plus haut, le coût pour 1 Shrimp diminue maintenant à 8,06$.

Vous avez dû dépenser 56.79$, l’équivalent de 2-3 Arduino/Genuino Uno officiel, mais vous avez obtenu 6 Shrimps complets. En plus, il vous reste encore beaucoup de condensateurs, de résistances et de boutons! Aussi, plusieurs pièces sont réutilisables pour d’autres projets comme les breadboards, les jumper wires et le CP2102…

Par ailleurs, si vous magasinez bien vos pièces (eBay a souvent des meilleurs prix que dipmicro), vous serez probablement capable de diminuer davantage le coût de vos Shrimps. Par exemple, vous pouvez trouver des ATMEGA328 avec le bootloader du Uno pour ~2,00$ chacun sur eBay.

Aussi, si vous avez suivi mon tutoriel précédent sur les ESP8266, il est fort probable que vous ayez déjà en votre possession un FTDI232. Ce module peut être utilisé à la place du CP2102. Vous devez juste vous assurer que le jumper est bien sur la position « 5V » avant de programmer vos Shrimps avec celui-ci.

ATMEGA328 avec ou sans bootloader?

Pour fonctionner, un Shrimp doit absolument avoir le bootloader du Arduino/Genuino Uno de chargé sur son ATMEGA328. Or, si vous avez porté attention à la liste d’achats, je suggère d’acheter un seul ATMEGA328 avec un bootloader et tous les autres sans. Pourquoi?

Réponse : Parce que c’est moins cher. Ça permet d’économiser 1,44$ par puce.

Mais encore?

Réponse : Parce que le bootloader du Arduino/Genuino Uno peut être chargé dans un ATMEGA328 à partir d’un Arduino/Genuino Uno. Ceci est démontré sur ce site :

Ouin, mais si je veux faire un Shrimp, c’est peut-être parce que je n’ai pas d’Arduino/Genuino Uno. Non?

Réponse : C’est aussi possible de charger le bootloader du Arduino/Genuino Uno dans un ATMEGA328 à partir d’un Shrimp.

Ohhhh!!! Donc mon premier Shrimp peut servir à charger le bootloader du Arduino/Genuino Uno sur tous mes ATMEGA328 sans bootloader! Intéressant…

En fait, c’est dommage, mais cette procédure n’est pas expliquée directement sur le site officiel du Shrimp. Heureusement, en farfouillant, je suis parvenu à trouver comment faire.

Configuration sous Linux

La programmation d’un Shrimp se fait habituellement par avec l’IDE Arduino. Sous plusieurs distributions, le paquet se trouve dans les dépôts officiels sous le nom « arduino ». Utilisez votre gestionnaire de paquets préféré pour l’installer.

Aussi, pour avoir accès aux ressources matérielles sans être root, vous devez parfois être membre d’un ou plusieurs de ces groupes : « uucp » , « lock » et « dialout ». Ça dépend de votre distribution. Si c’est le cas, dans un terminal vous pouvez entrer la commande suivante (substituez votre nom d’utilisateur et le nom du ou des groupes souhaités) :

gpasswd -a votre_nom_d_utilisateur nom_d_un_groupe
gpasswd -a votre_nom_d_utilisateur nom_d_un_autre_groupe
...

Vous devez sortir de la session actuelle et revenir pour que ce changement soit appliqué.

Il se peut que vous ayez de la difficulté à programmer vos Shrimps sans être root malgré cette précaution. Dans ce cas, vous pouvez ajouter une règle udev.

Pour ce faire, branchez votre CP2102 dans un port usb. Puis, dans un terminal, entrez la commande lsusb. Vous verrez plusieurs lignes défiler dont une semblable à celle-ci :

Bus 002 Device 013: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light

Prenez en note les 2 codes qui suivent le terme « ID ». Dans le cas présent, c’est « 10c4 » et « ea60 ».

Entrez ensuite la commande suivante :

sudo nano /etc/udev/rules.d/81-cp2102.rules

Puis, entrez le texte qui suit (substituez votre nom d’utilisateur) :

## 81-cp2102.rules
SUBSYSTEM=="usb", ATTR{idProduct}=="10c4", ATTRS{idVendor}=="ea60", MODE="0660", GROUP="votre_nom_d_utilisateur"

Télécharger la règle

Faites ctrl+o suivit de enter pour sauvegarder. Puis faites ctrl+x pour quitter l’éditeur de texte.

Vous remarquerez que le « idProduct » et le « idVendor » correspondent aux 2 codes que je vous avais fait prendre en note précédemment. Ceux-ci seront différents si vous utilisez un autre modèle de module usb/série (un FTDI232 par exemple).

Vous devez redémarrer votre ordinateur pour que la règle prenne fonction.

Après tout ça, vous devriez être en mesure de programmer vos Shrimps sans avoir à être root. Si ce n’est pas le cas, vous allez simplement devoir exécuter l’IDE Arduino en tant que root et vivre avec le fait que cette pratique est peu sécuritaire.

Au niveau de la configuration de l’IDE Arduino, lorsque vous l’ouvrez (avec le CP2102 branché) assurez-vous d’avoir sélectionné le bon port. C’est habituellement /dev/ttyUSB0. Pour vérifier, allez dans le menu Tools -> Port. Vous devez également avoir sélectionné la bonne plateforme, soit « Arduino/Genuino Uno ». Pour vérifier, allez dans le menu Tools -> Board.

Voilà, vous êtes maintenant prêts à charger votre premier programme sur votre premier Shrimp.

Circuit Shrimp-Optiloader

Si vous avez bien regardé la liste d’achats que j’ai proposée plus haut, vous avez remarqué que je suggérais d’acheter un breadboard avec 730 contactes, des résistances 330 ohm et des DEL. Vous allez maintenant comprendre pourquoi.

En fait, je vous propose de reproduire un circuit que j’utilise à l’occasion qui permet de charger le bootloader du Arduino/Genuino Uno sur une dizaine de ATMEGA328 en quelques minutes et de les tester par la suite. Pour ce faire, je suggère de procéder en 3 étapes :

  1. Réaliser un Shrimp avec une DEL attachée à la pin physique no. 14 du ATMEGA328 (pin 8 dans le code Arduino)
  2. Ajouter les pièces pour faire la programmation des puces et charger un programme nommé OptiLoader sur votre premier Shrimp
  3. Réaliser un second Shrimp avec une DEL attachée à la pin physique no. 14 du ATMEGA328 (pin 8 dans le code Arduino) pour tester les puces

Voyons maintenant le fameux circuit :

Circuit Fritzing du Shrimp-Optiloader
Télécharger le circuit Fritzing

Première étape

Réalisez votre premier Shrimp, soit le circuit du haut sans les jumper wire mauve, bleu, vert, gris et blanc. N’oubliez pas d’utiliser un ATMEGA328 qui possède déjà un bootloader. Aussi, les connexions rouge et noir du bas du breadboard doivent être présentes pour que le circuit fonctionne. Pour tester le Shrimp, créez d’abord un dossier nommé blink_mod sur votre ordinateur. Dans celui-ci, placez-y un fichier nommé blink_mod.ino contenant le code suivant :

// blink_mod.ino
int led = 8;

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  digitalWrite(led, HIGH);
  delay(500);
  digitalWrite(led, LOW);
  delay(500);
}

Télécharger le code

Ouvrez ce fichier avec l’IDE Arduino, puis appuyez sur Verify, puis sur Upload.

Voilà. La DEL devrait maintenant clignoter.

Deuxième étape

Si tout a fonctionné comme prévu, ajoutez les pièces et connexions qui manquent pour faire la programmation des puces. Pour plus de détails, voici le schéma du circuit de programmation des puces :

Circuit KiCAD du Shrimp-Optiloader
Télécharger le circuit KiCAD

Le programme OptiLoader permet de charger le bootloader du Arduino/Genuino Uno sur un ATMEGA328. Vous pouvez le télécharger grâce à la commande suivante (Attention aux majuscules) :

git clone https://github.com/WestfW/OptiLoader.git optiLoader

Ouvrez le fichier optiLoader.ino avec l’IDE Arduino, appuyez sur Verify, puis sur Upload et sur Serial Monitor. Assurez-vous que la vitesse de communication est 19200 baud (voir dans le coins en bas à droite de la fenêtre de communication série). Après quelques secondes, vous devriez voir le message suivant :

OptiLoader Bootstrap programmer.
2011 by Bill Westfield (WestfW)

Target power on! ...
Starting Program Mode [OK]

Reading signature:950F
Searching for image...
  Found "optiboot_atmega328.hex" for atmega328P
  Start address at 7E00
  Total bytes read: 502

Setting fuses for programming
  Lock: 3F FFE000  Low: FF FFA000  High: DE FFA800  Ext: 5 FFA400

Programming bootloader: 512 bytes at 0x3F00
  Commit Page: 3F00:3F00
  Commit Page: 3F40:3F40
  Commit Page: 3F80:3F80
  Commit Page: 3FC0:3FC0

Restoring normal fuses
  Lock: 2F FFE000

Target power OFF!

Type 'G' or hit RESET for next chip

Le bootloader du Arduino/Genuino Uno devrait être chargé sur le ATMEGA328 qui se situe au milieu du breadboard. Vous pouvez maintenant le retirer et en placer un autre qui n’a pas encore été programmé. Entrez G (majuscule) dans la boite de texte en haut de la fenêtre de communication série et appuyez sur Send. Attendez que le nouveau ATMEGA328 soit programmé et recommencez avec toutes vos autres puces.

Troisième et dernière étape

Réalisez le Shrimp du bas. Déplacez le CP2102 sur celui-ci et charger le code blink_mod.ino. Si la lumière se met à clignoter, c’est que vous avez réalisé correctement le circuit et que vous avez bien chargé le bootloader sur le ATMEGA328.

Remplacez le ATMEGA328 par un autre non vérifié et recommencez le processus…

Voilà. Vous avez maintenant tous les outils pour produire des Shrimps à la pelletée. Félicitations!!

À cocktail, congelées, pannées, frites…

Faire un circuit qui permet de charger le bootloader du Arduino/Genuino Uno sur ATMEGA328 n’est peut-être pas le projet le plus excitant de la planète, mais c’est définitivement un projet pratique. Ça vous permet de choisir votre fournisseur de ATMEGA328 sans vous soucier du fait qu’un bootloader soit présent ou non.

Comme je l’ai mentionné dans l’introduction, si vous voulez vous amusez avec des projets plus intéressants, allez visiter le site officiel des Shrimps. Vous y trouverez plein de bonnes idées, dont, par exemple, des instructions pour faire votre propre clavier conductif. Si vous vous demandez ce que c’est, allez voir le site de Makey Makey

Bonus

Si vous voulez voir rapidement quelles pins physiques du ATMEGA328 correspondent aux numéros d’entrées/sorties du standard Arduino, allez sur le site suivant :

Vous y trouverez un PDF qui contient des étiquettes qui peuvent être collées directement sur un ATMEGA328. Celles-ci indiquent les numéros d’entrées/sorties du standard Arduino vis-à-vis les pins physiques de la puce.

Merci de partager...Share on Google+Tweet about this on TwitterShare on FacebookEmail this to someoneShare on Reddit