Simple Arduino 🔗

Posted by Médéric Ribreux 🗓 In blog/Sysadmin/

#electronic

Introduction

J'ai un Arduino… Je viens de m'y mettre. Le but de cette session est de comprendre les principes de base du jouet. Pour faire simple, un Arduino est un kit d'entrée/sorties électroniques basé sur un micro-contrôleur Atmel (un ATMega328P). Arduino est le concept ouvert de ce kit d'entrée sortie. Les plans sont en licence CC, le software en GPL. Il est de plus intégré dans Debian.

Concrètement, comment ça marche ?

Le micro-contrôleur joue le rôle d'une sorte de micro-ordinateur à lui tout seul. Il est équipé d'un peu de mémoire, d'un peu de flash, d'un CPU et d'une palanquée d'entrée/sorties analogiques et numériques (6 entrées analogiques). Pour faire fonctionner l'ensemble, il faut d'abord une source d'énergie. Le 5V de l'USB fait bien l'affaire, mais on peut brancher également un adaptateur jack 2.1mm amenant entre 9 et 12V. Celui de mon disque dur externe fera bien l'affaire.

Le premier branchement…

C'est l'angoisse ! On hésite toujours un peu avant de brancher la bête sur le port USB. Mais, dans mon cas, ça s'est bien passé: après quelques clignotements, le programme de base s'est lancé: il éteint et allume une LED interne. Un point important puisque vous êtes sous GNU/Linux (quoi, ce n'est pas encore le cas ? Courez vous inscrire à la plus proche Install Party): vous n'avez aucun pilote à installer, contrairement aux autres plateformes (MS Windows/Mac OSX). En effet, pour communiquer avec l'Arduino, la liaison se fait par l'USB et la puce qui gère le signal côté Arduino est une FTDI (une puce spécialisée dans le traitement du bus USB avec le reste). Pour communiquer avec cette puce, il faut un pilote. Ce pilote étant "libre", il est intégré au noyau Linux ! Peut-être que GNU/Linux n'est pas prêt pour le Desktop mais au moins, il est prêt pour le hardware hacking !!!

Comment développer ?

Facile, il suffit d'installer les bons paquets ! Il existe un ensemble de paquets dédiés à cette tâche. Lorsque j'ai regardé ce que le site Arduino proposait, j'ai halluciné: toutes la chaîne de création, de l'IDE jusqu'au programme pour envoyer le binaire semblait être en Java ! Après enquête, il s'avère qu'il existe un paquet qui fait tout ça mais avec les bons outils: il s'agit de arduino-core. Il impose d'installer le minimum et permet de tout gérer en ligne de commande. C'est quand même plus léger et plus pratique, et ce, même si on débute. Si vous utilisez couramment vim ou Emacs, vous n'aurez pas à vous retrouver dans un IDE que vous ne connaissez pas.

Compiler et envoyer le binaire sur l'Arduino

Il vous faut faire un fichier Makefile de base pour indiquer quoi compiler, sur quelle "machine" (Microcontrôleur). En voici un exemple:

ARDUINO_DIR  = /usr/share/arduino
TARGET       = blink
MCU          = atmega328p
F_CPU        = 16000000

ARDUINO_PORT = /dev/ttyUSB*
AVRDUDE_ARD_PROGRAMMER = arduino
AVRDUDE_ARD_BAUDRATE   = 57600

include /usr/share/arduino/Arduino.mk

Ce Makefile est trivial: il indique quelques répertoires de bibliothèques et quelques paramètres pour le programme qui va envoyer les informations sur l'Arduino. Une fois ce fichier réalisé, prenez un bout de code dans les exemples. Genre le hello-world de l'Arduino: Blink.pde (fichier présent dans les exemples). Voici le code source:

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.
  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}


// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

Pour compiler, il suffit de faire make TARGET=Blink. En effet, le code source se nomme Blink.pde.

La compilation se lance et place le résultat dans le répertoire build_cli.

Pour charger le programme sur l'Arduino, branchez-le et faîtes un make upload. Cela lancera une série de commandes sur votre machine (ordinateur) qui, dans un premier temps, "rebootera" l'Arduino et, par la suite, lui enverra le binaire. Lorsque l'Arduino est rebooté, il copie sur sa mémoire flash tout code valide qui lui arrive sur l'entrée dédiée et le lance. C'est bien pratique…

Voilà, votre programme est dans la boîte et votre LED doit s'allumer et s'éteindre régulièrement.

Conclusion

Maintenant, vous avez tout ce qu'il faut pour coder sur Arduino: les principes, les bonnes commandes, un tutoriel vraiment basique.

PS: Pour info, j'ai acquis mon Arduino chez Hackable Devices pour une somme très modique. Préférez le "snail mail" à UPS: ça arrive directement dans votre boîte aux lettres et vous n'êtes pas obligé de prendre rendez-vous avec un livreur. C'est la poste quoi ! la vraie qui marche sans se prendre la tête.