voici ce nouveau post pour vous présenter un système dont certains avaient déjà parlé, le concept Arduino.
Arduino c'est quoi?
Basée sur la technologie des microcontroleur Amtel, le communauté Arduino à développer des cartes qu'il est possible d'assembler ou d'acheter toute faites
C'est cher?
non, il est possible de commencer pour environ 20€
Oui mais le reste est payant?
et non, basée sur une licence open-source (comme Linux pour ceux qui connaissent) le logiciel de programmation est donc libre au téléchargement et à l'utilisation.
La programmation c'est dur?
Pas du tout, basée sur un mélange de c et C++, ce langage est facilement accessible même aux débutants. Pour une personne ayant un peu fait de Basic une journée est suffisante pour faire ses premiers programmes.
Et pour le modélisme c'est adaptée?
Ah oui c'est adapté au modélisme, il existe même une librairie pour utiliser les servo-moteur. L'avantage des librairie c'est de faciliter la programmation tout en rendant le programme plus lisible.
Bon convaincu.... alors on y va.
Pour ne pas déroger à la règle, un peu de lecture est quand même nécessaire. ci-dessous les liens important pour conprendre ce concept et son langage, en plus il y a de nombreux exemples.
Le choix de la carte :
Pour ma part j'ai acheté deux type des cartes, les containtes étaient le prix et la taille.
Mon premier achat fut l'Arduino Nano, elle est à 25€, ce n'est pas très chère pour basculer dans le monde du numérique. En plus le port USB est inclu sur cette carte.
ça c'est des avantages fondamental d'Arduino, une connexion directe sur USB, plus de carte de programmation à acheter ou monter sois-même avec à chaque changement de système d'exploitation la carte qui n'était plus compatible.
En plus le logiciel fonctionne sous Windows, Mac ou Linux, là plus d'excuses....
Petit descriptif de la carte :
Microcontroleur : ATmega328
Alimentation : 5V
Tension d'entrée : 7-12V
E/S numériques : 14
Entrés analogiques : 8
Sorties PWM : 6
Courant max E/S : 40 mA
Mémoire programme : 32 K
Mémoire EEprom : 1 K
Mémoire vive (RAM) : 2 K
Horloge : : 16 MHz
USB : oui
Dimensions : 18 x 43 mm
Quelques explications :
La carte peut être alimenté de 7 à 12v et intègre un régulateur de tension 5V. Un avantage, on peut la brancher directement sur un accu.
Les entrées/sorties numériques sont au nombre de 14 ce qui est à mon avis plus que suffisant. Sur ces 14 E/S, 6 peuvent être utilisées en mode PWM (très utile pour faire varier la luminosité d'une LED).
Il y a aussi 8 entrées analogiques, c'est sur ces entrées que seront connectés les capteurs.
Pour faire vos premières armes il vous faut quelques équipements comme :
Une platine d'essais, des straps, des Led protégés par une résistance,un ou deux bouton poussoir et intérupteur.
Nous sommes parés pour notre premier essai.
Afin de vérifiier le bn fonctionnement de ma carte et du programme, j'ai fait comme à chaque fois le test de la LED qui clignote. Cela permet de valider toute la chaine de programmation.
J'ai ensuite testé quelques fonctions indispensable pour le modélisme qui sont :
récupération d'un signal sur une voie du récepteur et analyse de celui-ci.
Action on/off sur une sortie, dans mon cas allumage d'une LED suivant une certaine condission; Après il est possible d'y coupler transistor pour actionner un relais.
Utilisation d'un sero-moteur, c'est à dire mettre le palonier du moteur dans un angle prédéfini suivant un résulat reçu.
Une fois ces trois fonctions de base il est possible d'imaginer les possibilités qui s'ouvrent à nous....
Une fois le montage déterminer il ne reste plus qu'à se mettre au clavier.
Tout ce qui est précédé de "//" dans le programme ne set que de commantaire, vous allez voir qu'il ne reste pas grand chose de programme utilisé.
Définition du programme :
Code : Tout sélectionner
// --- Programme Arduino ---
// par TOTO - 03/07/2012
// --- Le programme ---
// Commute deux LED suivant position inter-radio
// fait varier l'angle d'un servo suivant position inter-radio
// --- Fonctionnalités ---
// Utilise Inter-radio
// Utilise 2 LED
// Utilise 1 servomoteur
// --- Connexions du circuit ---
// INTER sur D2
// LED1 sur D3
// LED2 sur D4
// SERVO1 sur D5
Cette première partie n'est là qu'a titre d'information mais permet de cibler le fonctionnement du programme ainsi que les lignes utilisées.
Entêtes déclaratives :
Code : Tout sélectionner
//**************** Entête déclarative *******
// --- Librairies utilisées ---
#include <Servo.h> // librairie pour servomoteur
// --- Déclaration des constantes ---
//const int POS_MIN = 550; // largeur impulsion pour position 0° servomoteur
//const int POS_MAX = 2330; // largeur impulsion pour position 180° servomoteur
const int POS_MIN = 1120; // largeur impulsion pour position 45° servomoteur
const int POS_MAX = 2240; // largeur impulsion pour position 135° servomoteur
// --- constantes des broches ---
const int INTER = 2; // declaration constante de broche inter-radio
const int LED1 = 3; // declaration constante broche LED1 position milieu
const int LED2 = 4; // declaration constante broche LED2 position haute
const int S1 = 5; // declaration constante broche servo1
// --- Déclaration des variables globales ---
int MLI_INTER = 0; // variable MLI inter radio
int PULS_S1 = 0; // variable pour angle de servo1
// --- Déclaration des objets ---
Servo servo1; // crée un objet servo pour contrôler le servomoteur
Comme indiqué plus haut il est possible avec Arduino de faire appel à de nombreuses librairies. Par chance, la librairie "Servo.h" existe.
La ligne "include" fait appel à cette librairie pour ce programme.
Déclaration des constantes :
POS_MIN et POS_MAX sont associés a des valeurs fixes.
Constantes de broches :
Cela permet d'associer un nom à une valeur de broches, améliorant la compréhension du programme lorsque l'on fait appel à une broche.
Déclarations des variables globales :
Cette partie permet de nommer les variables qui seront utilisées dans le déroulement du programme.
MLI_INTER stock la variable représentant la largeur d'impulsion sur la voie du récepteur.
PULS_S1 stock la variable représentant la largeur d'impulsion qui sera envoyé au Servo.
Déclaration des objets :
Cette partie permet de nommer et d'associer un objet qui sera reconnu par une librairie. Dans notre cas, "Servo1" sera reconnue par la librairie "Servo.h"
Code d'initialisation :
Code : Tout sélectionner
//**************** FONCTION SETUP = Code d'initialisation *****
// Exécutée en premier et 1 seule fois, au démarrage du programme
void setup() { // debut de la fonction setup()
// --------Attachement des objets--------
servo1.attach(S1, POS_MIN, POS_MAX); // attache l'objet servo1 à la broche d5
// ------- Broches en entrée -------
pinMode(INTER, INPUT); // broche en entrée vers l'interrupteur
// ------- Broches en sortie -------
pinMode(LED1, OUTPUT); // broche en sortie vers LED1
pinMode(LED2, OUTPUT); // broche en sortie vers LED2
pinMode(S1, OUTPUT); // broche en sortie vers servo1
// ------- Activation d'état initial des sorties numériques -------
digitalWrite(LED1, 0); // mise à 0 de LED1 au démarrage
digitalWrite(LED2, 0); // mise à 0 de LED2 au démarrage
servo1.write(1440); // mise en position centrale de servo1 au démarrage
// ------- Activation du rappel au + interne des broches en entrée si nécessaire -------
} // fin de la fonction setup()
// ********************************************************************************
Dans cet exemple, l'ojet "servo1" est associé à la broche "S1" (5) avec comme valeur min et max, 1120 et 2240.
Broches en entrée :
La broche "INTER" (D2) est déclarée en entrée.
Broches en sortie :
La broche "LED1" (D3) est déclarée en sortie.
La broche "LED2" (D4) est déclarée en sortie.
La broche "S1" (D5) est déclarée en sortie.
Activation d'état initial des sorties numériques :
Afin de stabiliser l'état des sorties au démarrage de la carte Arduino, des valeurs initiales sont déterminées.
Activation du rappel au + interne :
Lorsqu'une Entrée numérique est utilisée avec un bouton poussoir par exemple, il est nécessaire d'activer une résistance interne afin de fixer la broche au +5V.
Ce rappel au "+" permet de fixer la aleur de la broche et ainsi éviter un état aléatoire.
Dans notre cas, aucun rappel car aucun bouton poussoir utilisé sur une Entrée numérique.
Boucle de programme principal :
Code : Tout sélectionner
// ********************************************************************************
//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// Exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
void loop(){ // debut de la fonction loop()
// --- Programme principal ---
// acquisition conversion analogique numérique (100µs env.)
//sur broche analogique indiquée - résultat 10bits (0-1023)
MLI_INTER = pulseIn(INTER, HIGH); // capture de la variable position inter-radio
if (MLI_INTER < 1300) //--- si inter-radio en bas ---
{
digitalWrite(LED1, 0); // LED1 à 0
digitalWrite(LED2, 0); // LED2 à 0
servo1.write(1120); // servo1 en position basse
}
else if (MLI_INTER > 1700) //--- si inter-radio en haut ---
{
digitalWrite(LED1, 1); // LED1 à 1
digitalWrite(LED2, 1); // LED2 à 2
servo1.write(2240); // servo1 en position haute
}
else //--- si inter-radio au milieu ---
{
digitalWrite(LED1, 1); // LED1 à 1
digitalWrite(LED2, 0); // LED2 à 0
servo1.write(1440); // servo1 en position milieu
}
}// fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************
// --- Fin programme ---
La première ligne utilise la commande "pulsein" permettant de "capturer" dans la variable MLI_INTER le temps (en µs) de la largeur d'impulsion sur la voie du récepteur en position haute.
Cette largeur d'impulsion est comparée avec la fonction "if, else if, else".
Suivant le résultat de la comparaison, les sorties associées aux LED sont mise à 0 ou 1 et la largeur d'impulsion générée sur le servo est adapté à l'angle désiré.
L'explication de ce programme est maintenant terminée, et si l'on enlève les commentaires (en vert), on s'apperçoit que le programme ne comporte que très peu de lignes, 19 au total!!
En plus le fait d'avoir une librairie "Servo" permet de mettre en place le composant sans une grande connaissance en programmation.
Voilà cette première présentation est terminé et j'espère quelle vous donnera envie de découvrir le monde Arduino.
La facilité de mise en oeuvre des capteurs nous permet de facilement ajouter des options de controle comme par exemple, la correction d'assiette, le contrôle de l'alimentation, des modes fail-save évolués, etc...
Vous pouvez retrouver un article complet de cette présentation sur mon site. Vous pourez y découvrir une carte à "compétence" identique encore plus réduite. c'est cette carte qui me servira en production.
http://diopter.fr/index.php/technique/s ... me-arduino
Ci-dessous quelques photos pour vous présenter les cartes :
La carte Arduino nano V3, comme on peut le voir elle intègre un port USB.
Les deux cartes, Arduino Nano V3 et Arduino Pro mini 5V autour d'une pièce d'1€, on ne peut pas dire que c'est très encombrant.
L'Arduino nano V3 en pleine action sur son module de test.
Laurent