elec:prise_en_main_de_l_arduino
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
elec:prise_en_main_de_l_arduino [2012/10/09 22:40] – modification externe 127.0.0.1 | elec:prise_en_main_de_l_arduino [2024/04/16 22:19] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Tour d' | ||
+ | ===== Matériel ===== | ||
+ | ==== L' | ||
+ | {{: | ||
+ | L' | ||
+ | microcontrôleur | ||
+ | [[http:// | ||
+ | ou | ||
+ | [[http:// | ||
+ | |||
+ | Il possède | ||
+ | * 14 entrées/ | ||
+ | * 6 sorties analogiques | ||
+ | * une horloge à 16 MHz | ||
+ | * un connecteur USB (adaptateur du port série, et alimentation) | ||
+ | * un jack d' | ||
+ | * des broches pour l' | ||
+ | * un bouton RESET | ||
+ | |||
+ | [[Arduino2009|Plus de détails sur la carte...]] | ||
+ | |||
+ | ==== La carte de prototypage ==== | ||
+ | {{: | ||
+ | |||
+ | // A faire: description, | ||
+ | |||
+ | ==== Liens ==== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | ===== Installation de l' | ||
+ | On peut utiliser les outils de son choix (gcc ...) mais le plus simple | ||
+ | pour commencer est probablement d' | ||
+ | [[http:// | ||
+ | |||
+ | ** Pour les machines 64 bits **, des problèmes ont été rapportés concernant les librairies java de communication (RXTX) et l' | ||
+ | pour connaître la solution actuelle. | ||
+ | |||
+ | ==== Téléchargement et décompression ==== | ||
+ | Le jour de l' | ||
+ | [[http:// | ||
+ | pour les machines 64 bits. | ||
+ | |||
+ | Télécharger l' | ||
+ | choix, par exemple '' | ||
+ | ''/ | ||
+ | |||
+ | Par exemple: | ||
+ | <code sh> | ||
+ | cd ~/installs/ | ||
+ | wget http:// | ||
+ | tar xzvf arduino-0017.tgz | ||
+ | ln -s arduino-0017 arduino | ||
+ | </ | ||
+ | ==== Paquets complémentaires ==== | ||
+ | === Pour l'IDE lui-même === | ||
+ | - la machine virtuelle java de Sun: | ||
+ | <code bash> | ||
+ | sudo apt-get install sun-java6-jre | ||
+ | </ | ||
+ | * les librairies (C++) nécessaires à la compilation des programmes pour l' | ||
+ | <code bash> | ||
+ | sudo apt-get install gcc-avr avr-libc | ||
+ | </ | ||
+ | |||
+ | * Autres outils (optionels) | ||
+ | * minicom : utiliser le port série en ligne de commandes | ||
+ | |||
+ | ==== Lancement de l' | ||
+ | Le script shell ' | ||
+ | ** à condition d' | ||
+ | <code sh> | ||
+ | cd arduino-0017 | ||
+ | ./arduino | ||
+ | </ | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | ===== Contrôle d'un port digital: Faire clignoter une LED ===== | ||
+ | ref: [[http:// | ||
+ | |||
+ | ==== Montage ==== | ||
+ | L' | ||
+ | 13. | ||
+ | On peut également monter une [[http:// | ||
+ | port digital de son choix. Si on choisit le port 13, la LED externe | ||
+ | devrait fonctionner en même temps que la LED intégrée. | ||
+ | |||
+ | Les LEDs sont des diodes, elles ont donc une polarité et ne laissent | ||
+ | passer le courant que dans un sens, tout en émettant de la lumière. | ||
+ | Typiquement, | ||
+ | relier à la borne 13 de l' | ||
+ | |||
+ | Si la LED ne s' | ||
+ | |||
+ | {{http:// | ||
+ | {{http:// | ||
+ | |||
+ | **Attention: | ||
+ | Si on choisit un port différent, il nous faut ajouter nous-même une résistance. | ||
+ | |||
+ | Entraînons-nous à calculer sa valeur optimale: | ||
+ | * intensité maximale : 10 à 30 mA | ||
+ | * intensité souhaitée : 8 mA | ||
+ | * tension de seuil : 1.83 V | ||
+ | |||
+ | ** R = U/I = 1.83 / 0.008 = 228.75 ohm ** | ||
+ | |||
+ | En théorie, la résistance peut être placée d'un côté ou l' | ||
+ | |||
+ | Il nous reste à choisir parmi les composants disponibles ou dans les | ||
+ | [[http:// | ||
+ | et à consulter le [[http:// | ||
+ | |||
+ | Dans la série E3, on prendra donc une résistance de 470 ohm, qui se reconnaît par ses anneaux // | ||
+ | |||
+ | > ** Question: ** Quelle intensité de courant parcourt la LED dans le montage simple sur le port n° 13 ? | ||
+ | ==== Programme ==== | ||
+ | L' | ||
+ | spécifiques. | ||
+ | |||
+ | Depuis l'IDE arduino, charger l' | ||
+ | File -> Examples -> Digital -> Blink | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Examinons le code (j'ai traduit les commentaires, | ||
+ | |||
+ | === Utiliser des variables et constantes prédéfinies === | ||
+ | La ligne | ||
+ | <code c++> | ||
+ | int ledPin = 13; // La LED est connectée au port digital no 13 | ||
+ | </ | ||
+ | déclare une variable (ici utilisée comme une constante) qui contient | ||
+ | le numéro du port digital choisi. | ||
+ | |||
+ | Ce numéro pourra ainsi être utilisé en de nombreux endroits du code, | ||
+ | mais sa valeur réelle (litérale) n'est écrite qu'une seule fois. | ||
+ | De cette façon, si on décide de changer, | ||
+ | * une seule ligne est à modifier dans le code source | ||
+ | * le code source est plus lisible, plus facile à comprendre. | ||
+ | x | ||
+ | On utilisera aussi les [[http:// | ||
+ | |||
+ | === Fonction d' | ||
+ | Elle nous sert simplement ici à définir comment les ports seront | ||
+ | utilisés. | ||
+ | |||
+ | On utilise la fonction [[http:// | ||
+ | |||
+ | <code c++> | ||
+ | // La méthode ' | ||
+ | void setup() | ||
+ | // définit le port ' | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Fonction de boucle principale === | ||
+ | |||
+ | Son exécution démarrera juste après l' | ||
+ | jusqu' | ||
+ | |||
+ | Pour allumer la LED, il suffit de sortir une tension suffisante sur ' | ||
+ | |||
+ | Pour que l'on puisse percevoir le clignotement de la LED, il faut introduire une pause entre les instructions: | ||
+ | |||
+ | <code c++> | ||
+ | // La methode ' | ||
+ | void loop() | ||
+ | { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Installation ==== | ||
+ | - Vérifier et compiler le programme | ||
+ | - Connecter l' | ||
+ | - Charger le binaire sur l' | ||
+ | * Menu File -> Upload to I/O Board, ou | ||
+ | * Ctrl-U , ou | ||
+ | * Clic dans la barre d' | ||
+ | |||
+ | La LED intégrée de l' | ||
+ | quelques secondes, puis le programme se lance ... Alors ça marche ? | ||
+ | |||
+ | ==== Arrêt ==== | ||
+ | Normalement le programme tourne " | ||
+ | * appuyer sur le bonton RESET | ||
+ | * le priver d' | ||
+ | * charger un autre programme à la place | ||
+ | |||
+ | ===== Contrôle du port Série: Affichage sur le PC ===== | ||
+ | ==== Montage ==== | ||
+ | Inchangé. Cette fois, la connection USB est utilisée à la fois pour l' | ||
+ | |||
+ | ==== Programme ==== | ||
+ | |||
+ | Les librairies arduino nous proposent en standard le module | ||
+ | [[http:// | ||
+ | d' | ||
+ | |||
+ | === Fonction d' | ||
+ | Pour initialiser le port série, nous devons préciser la vitesse de | ||
+ | transmission. | ||
+ | <code c++> | ||
+ | // La méthode ' | ||
+ | void setup() | ||
+ | // définit le port ' | ||
+ | | ||
+ | // initialise le port série avec un bitrate de 9600 bauds | ||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Boucle principale === | ||
+ | |||
+ | On utilise la méthode | ||
+ | [[http:// | ||
+ | une chaîne formattée sur le port série, qui pourra être interceptée | ||
+ | sur le PC pour affichage. | ||
+ | |||
+ | <code c++> | ||
+ | // La methode ' | ||
+ | void loop() { | ||
+ | Serial.println(" | ||
+ | digitalWrite(ledPin, | ||
+ | delay(1000); | ||
+ | |||
+ | Serial.println(" | ||
+ | digitalWrite(ledPin, | ||
+ | delay(3000); | ||
+ | } | ||
+ | </ | ||
+ | ==== Installation et Execution ==== | ||
+ | === Affichage des messages sur le PC === | ||
+ | L'IDE arduino permet d' | ||
+ | Sinon, on peut utiliser [[http:// | ||
+ | |||
+ | == Encodage des caractères == | ||
+ | Le code [[http:// | ||
+ | Dès qu'on veut les utiliser, il faut préciser de chaque côté (émetteur, récepteur) quel encodage on utilise, parmi les nombreux disponibles. Les languages de haut niveau actuels imposent de le préciser dans tous les cas. | ||
+ | |||
+ | ===== Combinaison des 2: Contrôle de la LED à partir du PC ===== | ||
+ | |||
+ | Cette fois-ci on va utiliser le port série d'une part en lecture, et d' | ||
+ | |||
+ | ==== Programme ==== | ||
+ | === Boucle principale === | ||
+ | A chaque tour de boucle, on va tout d' | ||
+ | |||
+ | Ensuite, selon la valeur du premier caractère dans la file ([[http:// | ||
+ | |||
+ | <code c++> | ||
+ | void loop() { | ||
+ | char cmd; | ||
+ | if (Serial.available()> | ||
+ | cmd = Serial.read(); | ||
+ | switch(cmd) { | ||
+ | case ' | ||
+ | case ' | ||
+ | led_on(); | ||
+ | break; | ||
+ | case ' | ||
+ | case ' | ||
+ | led_off(); | ||
+ | break; | ||
+ | default: | ||
+ | Serial.println(" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Pour plus de clarté et de facilité pour faire évoluer le programme, les lignes de code qui exécutent directement les actions demandées ont été extraites dans des fonctions dédiées, ' | ||
+ | |||
+ | <code c++> | ||
+ | /// Allume la LED, en affichant un message | ||
+ | void led_on() { | ||
+ | Serial.println(" | ||
+ | digitalWrite(ledPin, | ||
+ | } | ||
+ | |||
+ | /// Eteint la LED, en affichant un message | ||
+ | void led_off() { | ||
+ | Serial.println(" | ||
+ | digitalWrite(ledPin, | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Navigation ===== | ||
+ | * Haut: [[initiation_electronique|Initiation à l' | ||
+ | * Précédent: | ||
+ | * Suivant : [[capteur_de_temperature|Session 2 - Capteur de temperature]] | ||
+ | |||
+ | ===== Tutoriels ===== | ||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{tag> |