Arduino

Par Michel Vonlanthen


 

l'avatar suisse de l'Arduino

 

L'Arduino est une plateforme de développement open-source bon-marché et facile à mettre en oeuvre. Tout le soft est en libre-service sur le net, le système de développement, des librairies et des milliers d'applications. Nativement la documentation de l'Arduino, dont les cartes sont développées/fabriquées en Italie, est en anglais. Mais on trouve des sites dans d'autres langues, par exemple le site Mon-club-elec.fr pour le français.

 


L'Arduino UNO                              et                                      le Diduino
 

 

En Suisse, Jean-Daniel Nicoud a développé le 100% compatible Diduino (DIDel-ArdUINO) et le commercialise via son entreprise Didel. L'avantage de cette version, c'est son orientation "expérimentation", son prix et la disponibilité du hardware nécessaire pour développer des applications. Une version spécifique pour la robotique existe aussi. Tout ceci est décrit sur le site de Didel.

 

Par rapport à d'autres plateformes PIC, l'Arduino a l'avantage de ne pas de nécessiter de programmateur. La carte se relie à un PC par un câble USB et c'est tout. L'alimentation se fait par ce câble. Le programme est écrit en langage Arduino, proche du langage C,  à l'aide de l'environnement de développement Arduino, librement téléchargeable sur le net.

 

En pratique, il faut écrire le programme sur le PC, le tester afin d'y déceler des erreurs de syntaxe, le compiler et le télécharger sur la carte Diduino (ou Arduino. Pour la suite nous emploierons indifféremment l'un ou l'autre terme). Une fois l'Arduino nourri, il démarrera automatiquement avec ce programme lors de chaque mise sous tension, le programme ne s'efface pas lorsqu'on dés-alimente la carte.

 

 

 

La documentation livrée avec le Diduino consiste en une page "Montage Diduino" et une page "Mise en route et premières expériences".

 

 

Le montage est fort simple car la carte est livrée fonctionnelle, avec les composants implantés. Il n'y a qu'à souder les connecteurs pour fils et fixer la plaque "sans soudures" à l'aide de 2 vis M1.6. Tout cela est bien documenté et décrit.

 

 

En plus de ces éléments-là, le Diduino est livré avec 4 fils colorés et une trentaine de composants destinés aux premières expériences. Les premiers pas du "Diduiniste" sont donc facilités au maximum.

 

Test:
Branche l'Arduino au PC à l'aide du câble USB (non-fourni). Au bout d'un moment, la Led 13 va se mettre à clignoter à la fréquence de 1 Hz ce qui indiquera que le Diduino fonctionne correctement. Il exécute le programme blink.ino à la mise sous tension. C'est celui-là qui a été chargé par Didel pour tester la carte avant son expédition.

 

 

 

Il faut tout d'abord télécharger l'environnement de développement Arduino ici: http://arduino.cc/forum/index.php?topic=61764.0

Sans autre indication, Windows téléchargera ce fichier ZIP dans le répertoire Favoris/téléchargements du disque C:. C'est là que tu retrouveras le répertoire arduino-1.0-windows.zip avec son sous-répertoire arduino-1.0. Il suffit alors de cliquer sur l'option "Extraire tous les fichiers" du menu Windows, en haut de la fenêtre, pour que ce répertoire se remplisse des fichiers décompressés. Tout est là.

 

Libre à toi, ensuite, de déplacer ce répertoire arduino-1.0 et son contenu à une autre place du disque C (ou autre) afin qu'il soit visible dans l'arborescence du disque. Il faut encore mettre un raccourci vers le fichier arduino.exe sur le bureau afin que l'environnement Arduino soit accessible par un simple clic sur cette icône. C'est tout.

 

Connecte maintenant le Diduino au PC avec le câble USB (déconnecte-le et reconnecte-le s'il était déjà branché). Le PC répond par le bip de connexion habituel et indique que le driver se charge.

 

Ceci fait, clique sur l'icône "Arduino" sur le bureau afin de démarrer l'environnement de développement. Là il faut lui indiquer le type de carte ainsi que le port de communication.

 

  • Va dans le menu "Tools, Board" et coche la carte Arduino Duemillanove w/ATmega 328

  • Va dans le menu "Tools, Serial port" et coche le port COM 5 (en principe le dernier)

Ceci peut varier en fonction de la version du soft Arduino, mais c'est ce que j'ai en janvier 2012 avec ma version de Diduino.

Tout est prêt maintenant pour passer à la phase de la première programmation !

 

Le driver Arduino peut poser quelques problèmes. Si c'est le cas, tu peux trouver des explications ici: http://www.ladyada.net/learn/arduino/lesson1.html

 

 

 

Pour ton premier programme, charge le code source celui qui est dans l'Arduino: blink.ino:

 

  • Option "File, Open" du menu

  • Va dans le répertoire où tu as mis l'environnement Arduino, dans mon cas C:\Arduino-1.0

  • Ensuite dans "Examples", "1. Basics", puis "Blink". C'est là que tu trouveras Blink.ino
    Ouvre ce fichier. Tu obtiens ceci:

 

 

C'est le code source du programme qui se trouve présentement dans ton Diduino.

 

Dans le setup. on voit que la pin 13 est initialisée en tant que SORTIE (la Led du Diduino lui est déjà connectée sur la carte). Le programme principal, quant-à lui, de contente de mettre cette pin à un niveau HAUT, attend 1000ms, la met à l'état BAS, attend 1000ms, et recommence la boucle. En conséquence, la Led 13, rouge, clignote à une fréquence de 2 Hz.

 

Sans entrer dans les détails de cette programmation:

  • Remplace les deux valeurs 1000 qui s'y trouvent par 100, ce qui va faire clignoter la led 10 x plus rapidement.

  • Ensuite clique sur le bouton   (compile)

  • Après un court instant, pendant lequel le logiciel transforme le code source que tu viens de modifier en code machine  compréhensible par le microprocesseur de la carte, le message ci-dessous apparaît dans la fenêtre du bas: Binary sketch size: 1026 bytes (of a 30720 byte maximum), ce qui nous indique que la compilation a réussi (donc pas d'erreur de syntaxe) et que le code machine fait 1026 bytes.

  • Il ne reste plus maintenant qu'à uploader ce code dans le microprocesseur avec l'aide du bouton (upload).
    Les led TX et RX de l'USB clignotent et la led 13 prend sa nouvelle cadence de 0,2 Hz suite à la modification du programme que nous venons de faire. C.Q.F.D.

 

 

Il faudra maintenant se plonger dans la mini référence pour se lancer dans ses premières applications, puis, l'expérience venant, dans  la référence standard, pour terminer avec la référence étendue. Et bien-sûr piocher dans les exemples qui se trouvent dans ton répertoire Examples ainsi que sur le net.

 

Liste de distribution

 

Adresse où envoyer ses messages:             arduino_suisse@yahoogroupes.fr
 

Pour s'inscrire, envoyez un message vide à: arduino_suisse-subscribe@yahoogroupes.fr

 

Page d'accueil du groupe:                           http://fr.groups.yahoo.com/group/arduino_suisse/

 

 

 


 

Afin de me faire la main, j'ai relié quelques composants à mon Diduino, en les programmant les uns après les autres. Au final. j'ai:

  • 1 affichage LCD de 1 ligne de 16 caractères (4 pins datas + RS et Enable. + potentiomètre de 10k entre +5V et la masse pour régler la luminosité de l'affichage)

  • 1 buzzer sur la pin OUT 6 (en série avec une résistance de 820 Ohms)

  • 1 servo-moteur de type Prafa RS 3000 sur la pin OUT 9 (plus le +5V et la masse)

  • 1 potentiomètre de 10 k sur la pin AN0 14

  • 1 bouton-poussoir entre pin IN 10 et masse (avec résistance pull-up de 8,2k vers le +5V)

Ce programme se sert à rien, si ce n'est de me faire la main sur ce genre de composants.

 

Au démarrage, il affiche "Azimuth: sur l'affichage LCD ainsi que l'angle du servo-moteur (jusqu'à 180 degrés) de la dernière position avant la coupure du courant.  Cet angle est mémorisé dans une mémoire flash non-volatile. En plus, les lettres "AZ" pour "Azimuth" est donné auditivement en code morse par le buzzer.

 

Sur la pression du bouton, le servo-moteur se déplace à la nouvelle valeur donnée par le potentiomètre. Cette dernière est affichée sur le LCD et mémorisé en mémoire flash.

 

 


Physiquement, c'est un joyeux bordel, comme tout prototype, mais cela fonctionne

 

 

 

Le programme

 

/* **************
* SERVO ET LCD *
****************

 

Un potentiomètre donne l'angle du servo-moteur
La LCD affiche l'angle
 

LE CIRCUIT
 

LCD:
LCD RS pin to digital pin 12
LCD Enable pin to digital pin 11
LCD D4 pin to digital pin 5
LCD D5 pin to digital pin 4
LCD D6 pin to digital pin 3
LCD D7 pin to digital pin 2
LCD R/W pin to ground
 

10K resistor:
ends to +5V and ground
wiper to LCD VO pin (pin 3)
 

Potentiomètre:
Entre le +5 et la masse.
Curseur sur l'entrée analogique A0 (pin 14)
 

Poussoir:
Pin IN 10
*/
 

// Inclu les librairie:
#include <LiquidCrystal.h>
#include <Servo.h>
#include <EEPROM.h>
 

int SensorPin = A0;
int SensorValue = 0;
int Azimuth=0;
int ads = 0;
 

Servo myservo; / / create servo object to control a servo
 

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 

void setup() {
 

// définit le nombre de colonnes et de lignes du LCD:
lcd.begin(16, 1);
 

// Ecrit sur LCD:
lcd.print("Azimuth:");
 

myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(10,INPUT);
}

 

void loop() {
 

//Lit dernier azimuth en mémoire
Azimuth=EEPROM.read(0);
 

//Ecrit la valeur de l'angle sur la LCD
lcd.setCursor(9,0);
lcd.print(Azimuth);
 

//Erit la valeur de l'angle sur le servo
myservo.write(Azimuth);
delay(50);
 

do // tourne tant que bouton pas pressé
{
} while (digitalRead(10)); // bouton entrée dig 10 pas pressé
 

//Efface la valeur précédente
lcd.setCursor(9, 0);
lcd.print(" ");
 

//Lit la valeur du potentiomètre (entre 0 et 1023)
SensorValue =analogRead (SensorPin);
 

//Convertit la valeur lue en angle (entre 0 et 179 degres)
Azimuth=map(SensorValue,0,1023,0,179);
 

//Ecrit la valeur de l'angle sur la LCD
lcd.setCursor(9,0);
lcd.print(Azimuth);
 

//Mémorise l'angle
EEPROM.write(ads,Azimuth);
 

//Erit la valeur de l'angle sur le servo
myservo.write(Azimuth);
delay(50);
 

/* // HI en morse
 

tone(6,800,100);
delay(200);
tone(6,800,100);
delay(200);
tone(6,800,100);
delay(200);
tone(6,800,100);
delay(300);
tone(6,800,100);
delay(200);
tone(6,800,100);
delay(200);
*/
 

// AZ en morse
tone(6,800,100); //passe à l'instruction suivante mais le ton continue
delay(200); //= 100ms ton et 100ms silence
tone(6,800,300);
delay(500);
tone(6,800,300);
delay(400);
tone(6,800,300);
delay(400);
tone(6,800,100);
delay(200);
tone(6,800,100);
delay(200);

}

 

 


 

Par Frédéric Genevey, enseignant aux Ecoles Primaires et Secondaires d'Ecublens,
Suisse

 

 

 

 

Leds, interrupteurs, capteurs, moteurs, pour terminer avec la commande de 2 servo moteurs avec un joystick (positionnement d'une caméra par exemple)

 


Réalisations diverses


Précédent [2]    Suivant [4]
Michel Vonlanthen Février 2012


Copyright texte et photos Michel Vonlanthen