Ce poste est en cours de rédaction. Débuté le 19 octobre 2013.
Introduction :
Arduino est une plateforme Open Source de programmation de microcontroleur pour des systèmes embarqués autonomes ou non. La programmation est basé sur le langage C/C++.
Liens :
* Site officiel : http://www.arduino.cc/
* Une boutique que je recommande : http://snootlab.com/
* Environnement de développement Eclipse : http://www.eclipse.org/
Définition :
Schéma :
www : une résitance
|) : un Led avec | pour indiquer le GND
Prérequis Obligatoire :
* un PC
* l'environnement Arduino d'installé : http://arduino.cc/en/Main/Software prendre la version 1.0.5
* un Arduino, je conseille la Uno R3 qui est une bonne base pour faire du prototypage.
* un cable USB (type imprimante)
Caractéristiques
Les caractéristiques des différentes cartes :
L'Arduino Uno R3 :
Prérequis optionnel :
* L'environnement de développement Eclipse, http://www.eclipse.org/downloads/ prendre "Eclipse IDE for C/C++ Developers" pour configurer Eclipse http://www.baeyens.it/eclipse/Install.html
* une platine de prototypage.
Voici ma plateforme de prototypage :
La plateforme Arduino
La carte basé sur des ATMega (comme la Uno) sont des plateforme 16bits, c'est à dire qu'un entier est codé sur 2 octets (2 bytes) soit de -32768 à 32767.
Petit rappel :
* 1 bits à pour valeur 0 ou 1
* 1 octets ou (1 bytes) est égales à 8 bits.
Exemple 0 : la base
Un programme C est composé d'un certain nombre de fonctions. Un fonction est structurée comme ceci :
Code : Tout sélectionner
<type de retour> <nom de la fonction>(<type de paramètre> <nom paramètre>, <type de paramètre> <nom paramètre>, ...) {
// ce ci est un commentaire
<contenu de la fonction>
}
Code : Tout sélectionner
void foo() {
// a = 1
int a = 1;
}
Code : Tout sélectionner
//La fonction setup est appelé un fois au démarrage de l'Arduino
void setup()
{
// On ajoute ici le code d'initialisation
}
// Une fonction loop qui est appelée indéfiniment
void loop()
{
//On ajoute ici le code qui se répétera
}
Exemple 1 : faire clignoter une led.
Il faut une Led et une résistance de 1,5KΩ (Marron, Vert, Rouge). On branche le - de la Led au GND, entre le plus de la Led et la sortie 13 on place la résistance. Ce qui donne :
GND -> |) -> www -> Pin13
Code : Tout sélectionner
int led = 13; // numéro de la sortie digitale
int timer = 1000; // timer d'une seconde (1000 milisecondes)
// fonction d'initialisation
void setup() {
// on indique que notre led est connectée à la sortie 13 de l'Arduino
pinMode(led, OUTPUT);
}
// fonction infini
void loop() {
digitalWrite(led, HIGH); // On allume la Led en envoyant un voltage haut : on écrit sur la sortie digitale 13 (led)
delay(timer); // On attend
digitalWrite(led, LOW); // On éteint la Led en envoyant un voltage bas.
delay(timer); // On attend
}
Exemple 2 : Récupérer la valeur d'un potentiomètre.
On branche le potentiomètre sur une des entrées analogiques, sur la photo le fils blanc est branché sur l'entrée analogique 2.
Code : Tout sélectionner
int pinPOT = 2; // entrée analogique numéro 2
int valuePOT = 0; // valeur initiale du potentiomètre
//La fonction setup est appelé un fois au démarrage de l'Arduino
void setup() {
}
// Une fonction loop qui est appelée indéfiniment
void loop() {
valuePOT = analogRead(pinPOT); // on lit la valeur qui arrive sur pinPOT
}
Exemple 3 : faire varier la vitesse de clignotement d'une led avec un potentiomètre.
On branche le potentiomètre sur une des entrées analogiques, sur la photo le fils blanc est branché sur l'entrée analogique 2. La led est branché sur la sortie 8.
Code : Tout sélectionner
int pinLED = 8;
int pinPOT = 2;
//La fonction setup est appelé un fois au démarrage de l'Arduino
void setup() {
// on indique que notre led est connectée à la sortie 8 de l'Arduino
pinMode(pinLED, OUTPUT);
}
// Une fonction loop qui est appelée indéfiniment
void loop() {
valuePOT = analogRead(pinPOT);
// on veut faire clignoter la LED de 100ms à 1s, on utilise la fonction map(long x, long in_min, long in_max, long out_min, long out_max)
// cette fonction permet de remapper un valeur (x) depuis un range de valeurs (in_min, in_max) vers un autre range de valeurs (out_min, out_max)
int timer = map(valuePOT, 0, 1023, 100, 1000);
digitalWrite(pinLED, HIGH); // On allume la Led en envoyant un voltage haut : on écrit sur la sortie digitale 13 (led)
delay(timer); // On attend
digitalWrite(pinLED, LOW); // On éteint la Led en envoyant un voltage bas.
delay(timer); // On attend
}
Voici le code pour faire un petit chenillard avec 6 leds branchées sur les sorties de 8 à 13
Code : Tout sélectionner
int timer = 100; // initialisation du Timer
//La fonction setup est appelé un fois au démarrage de l'Arduino
void setup() {
for (int i = 8; i < 14; i++) { // on parcours les sortie de 8 à 13 pour les mettre en mode SORTIE
pinMode(i, OUTPUT);
}
}
// Une fonction loop qui est appelée indéfiniment
void loop() {
for (int i = 8; i < 14; i++) { // on parcours les sortie de 8 à 13
digitalWrite(i, HIGH); // On allume la Led en envoyant un voltage haut : on écrit sur la sortie digitale 13 (led)
delay(timer); // On attend
digitalWrite(i, LOW); // On éteint la Led en envoyant un voltage bas.
delay(timer); // On attend
}
}
Exemple 5 : utilisation d'un sonar
Dans ce nouvel exemple nous allons faire varier la vitesse de clignotement d'une LED en fonction de la distance détecter par le sonar. Pour ceci, on branche une LED sur la sortie 13 et on branche le sonar comme ceci :
GND = Masse
Trig = PIN 3
Echo = PIN 2
Vcc = 5v
Dans notre code nous allons écrire deux fonctions.
La première microsecondsToCentimeters permet de convertir un temps en microseconde en distance en centimètre, sachant que la vitesse du son est de 340m/s ou 29 microseconde par centimetre
Code : Tout sélectionner
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2; // on divise par 2 pour l'aller-retour
}
Code : Tout sélectionner
long getDistance() {
digitalWrite(initPin, HIGH); // on envoie un signal
delayMicroseconds(10); //on attend 10 microseconde
digitalWrite(initPin, LOW); // on arrête le signal
long duration = pulseIn(echoPin, HIGH); // on attends le retour et on lit l’écho
return microsecondsToCentimeters(duration);
}
Code : Tout sélectionner
int pinLED = 13;
int echoPin = 2;
int initPin = 3;
long distance = 0;
int timer = 100;
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
long getDistance() {
digitalWrite(initPin, HIGH);
delayMicroseconds(10);
digitalWrite(initPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return microsecondsToCentimeters(duration);
}
void setup() {
pinMode(pinLED, OUTPUT);
pinMode(initPin, OUTPUT);
pinMode(echoPin, INPUT);
}
/**
* loop
*/
void loop() {
digitalWrite(pinLED, HIGH); // On allume la Led en envoyant un voltage haut : on écrit sur la sortie digitale 13 (led)
delay(timer); // On attend
digitalWrite(pinLED, LOW); // On éteint la Led en envoyant un voltage bas.
delay(timer); // On attend
long distance = getDistance(); // on recupère la distance detecter par le sonard.
// on calcul le timer en fonction de la distance, 0 cm = un timer de 100 millisecondes, 30cm = un timer de 1000 millisecondes
timer = map(distance, 0, 30, 100, 1000);
}
Exemple 6 : piloter un servo
A venir
Exemple 7 : utilisation d'un module bluetooth et d'un Android
A venir
Fonctions
long map(long x, long in_min, long in_max, long out_min, long out_max);
cette fonction permet de remapper un valeur (x) depuis un range de valeurs (in_min, in_max) vers un autre range de valeurs (out_min, out_max), elle renvoie la valeur remapper.