[Tuto] : Arduino

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

[Tuto] : Arduino

Message non lu par jean » 19 oct. 2013, 13:28

Bonjour à tous,

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 :

Image

L'Arduino Uno R3 :

Image

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 :

Image

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>
}
Exemple de la fonction foo qui ne retourne rien et qui ne prend pas de paramètre et qui initalise un entier a à la valeur 1 :

Code : Tout sélectionner

void foo() {
// a = 1
int a = 1;
}
Le programme de base pour faire fonctionner l'Arduino est composé de 2 fonction :

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
}
En modifiant la variable timer, on fait varier la vitesse de clignotement.

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.

Image

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
}
ValuePOT ira de 0 à 1023 et est linéairement proportionnelle à la valeur en volt (dans notre cas de 0 à 5V)

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.

Image

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
}
Exemple 5 : un chenillard

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
	}
}
Le résultat :



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
}
La seconde permet d'avoir la distance en centimètre entre le sonar et un obstacle.

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);
}
Le code final est le suivant :

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);
}
La vidéo :



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.
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 20 oct. 2013, 08:56

Update du 20 octobre à 8h55 : 2 photos, et l'exemple 0
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 20 oct. 2013, 16:37

Update du 20 octobre à 16h35 : l'exemple 1 et corrections diverses.

N’hésitez à poser des questions et à faire des retours.
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
steeve
Messages : 1452
Inscription : 20 juin 2011, 09:03
Localisation : Lieuran Cabrieres
Contact :

Re: [Tuto] : Arduino

Message non lu par steeve » 20 oct. 2013, 18:45

jean , tout ça reste theorique ... si je dois prendre une carte , la uno suffit ou autant acheter la mega ?

compte tenu du prix ?... http://www.hobbyking.com/hobbyking/stor ... Board.html

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 20 oct. 2013, 18:57

Cela dépends ce que tu veux faire au final, la méga est plus lourde et plus encombrante par contre elle est beaucoup plus puissante et offre plus d'entrées/sorties.

Perso, je veux pouvoir embarquer un Arduino sur un Quad de taille 450, la Uno devrait aller. Sur les Hexa ou Octo, il ne devrait pas y avoir de problème pour embarquer la méga ;)

un petit tableau des différentes cartes et de leurs caractéristiques :

Image
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
steeve
Messages : 1452
Inscription : 20 juin 2011, 09:03
Localisation : Lieuran Cabrieres
Contact :

Re: [Tuto] : Arduino

Message non lu par steeve » 20 oct. 2013, 19:02

ok,ca roule super 1

Avatar de l’utilisateur
steeve
Messages : 1452
Inscription : 20 juin 2011, 09:03
Localisation : Lieuran Cabrieres
Contact :

Re: [Tuto] : Arduino

Message non lu par steeve » 20 oct. 2013, 19:14

tu as un site ou se trouvent ces fameuses bibliotheques ?

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 20 oct. 2013, 19:33

Je penses que tu cherches ceci : http://arduino.cc/en/Reference/Libraries
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 20 oct. 2013, 22:19

Petite vidéo de mon montage de ce soir, pour des modélistes il n'y a rien d'impressionnant, vue que je pilote un servo via ma radio ;) mais ....l'Arduino récupère le signale que le récepteur reçois sur la voie 3 et en fonction du signal il pilote le servo :

--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 26 oct. 2013, 14:04

Update du 26 octobre 14h : Exemple 2 : Récupérer la valeur d'un potentiomètre.
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 26 oct. 2013, 18:33

Update du 26 octobre à 18h33 : Exemple 3 : faire varier la vitesse de clignotement d'une led avec un potentiomètre. et un chapitre sur les fonctions.
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 27 oct. 2013, 20:43

Update du 26 octobre 20h40 : Exemple 5 : un chenillard + vidéo
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 05 nov. 2013, 21:24

Salut,
pour information, j'ai reçu mes 4 sonars, une carte Bluetooth et une carte de contrôle de moteurs. Je continuerai bientôt l'article avec de nouvelles applications.
A plus
Jean
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
steeve
Messages : 1452
Inscription : 20 juin 2011, 09:03
Localisation : Lieuran Cabrieres
Contact :

Re: [Tuto] : Arduino

Message non lu par steeve » 05 nov. 2013, 21:25

pourquoi 4 sonars ? pensif

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 06 nov. 2013, 08:18

c'est pour un module terrestre : 2 à l'avant et 2 à l'arrière.
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 08 nov. 2013, 22:21

Update du 8 novembre 2013 à 22h20 : les chapitres "La plateforme Arduino" et "Exemple 5 : utilisation d'un sonar"
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 08 nov. 2013, 22:49

Update du 8 novembre 2013 à 22h50 : la vidéo de l'exemple 5
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 12 nov. 2013, 09:05

Ce weekend, montage et programmation d'un module permettant d'afficher sur mon Android la distance relevé par un sonar. La liaison Ardunio vers Android se fait en Bluetooth.
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 12 nov. 2013, 15:23

Capture d'écran de l'application Android, permettant d'allumer une LED et d'afficher la distance mesurée par un sonar :

Image
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Avatar de l’utilisateur
jean
Administrateur du site
Messages : 3717
Inscription : 31 déc. 2011, 17:11
Localisation : Brignac

Re: [Tuto] : Arduino

Message non lu par jean » 12 nov. 2013, 15:35

Prochaine étape, acheter un Capteur de pression atmosphérique BMP85 ;)
--
Ground control to Major Tom
Commencing countdown, engines on
http://modelesrc.blogspot.fr/

Répondre

Revenir à « NOS MODELES »