Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| ateliers:robot_arduino [2023/06/11 14:22] – supprimée - modification externe (Unknown date) 127.0.0.1 | ateliers:robot_arduino [2025/10/09 08:56] (Version actuelle) – jdorel | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | MIGRÉ | ||
| + | |||
| + | ===== Robot Arduino ===== | ||
| + | {{https:// | ||
| + | ==== Intro ==== | ||
| + | |||
| + | Présentation du LOV (Laboratoire Ouvert villeurbannais). | ||
| + | |||
| + | Présentation du fonctionnement d'un fablab. | ||
| + | |||
| + | Qu' | ||
| + | |||
| + | Présentation de l' | ||
| + | |||
| + | Cet atelier est un atelier pilote. | ||
| + | |||
| + | C'est le premier atelier expérimental effectué au sein du Lab. | ||
| + | |||
| + | ==== Objectifs ==== | ||
| + | Cet atelier a pour objectif de comprendre les bases de programmation et de l' | ||
| + | |||
| + | ==== Public ==== | ||
| + | Débutant n' | ||
| + | |||
| + | |||
| + | ====Pré-requis==== | ||
| + | ===Logiciel=== | ||
| + | Arduino : https:// | ||
| + | |||
| + | --- | ||
| + | |||
| + | ===Matériel=== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | * Carte Arduino etc... | ||
| + | * 1 x Shield | ||
| + | * 1 x BreadBoard | ||
| + | * 1 x LED | ||
| + | * 1 x châssis de voiture (cf. découpage laser) | ||
| + | * 2 x moteur a engrenages | ||
| + | * 2 x roue de voiture (cf. Impression 3d) | ||
| + | * 2 x capteur de vitesse (optionnel) | ||
| + | * 2 x attaches | ||
| + | * 1 x roue universelle | ||
| + | * 1 x tournevis | ||
| + | * 1 x boite de la batterie | ||
| + | * 10 x vis nécessaires et noix | ||
| + | |||
| + | --- | ||
| + | |||
| + | ===Pièces 3d à imprimer DIY=== | ||
| + | |||
| + | **Clips moteur:** https:// | ||
| + | |||
| + | {{: | ||
| + | |||
| + | **Roues:** https:// | ||
| + | |||
| + | {{: | ||
| + | |||
| + | **Châssis en 3D:** https:// | ||
| + | |||
| + | {{: | ||
| + | |||
| + | **Roue avant** | ||
| + | |||
| + | {{: | ||
| + | {{: | ||
| + | {{: | ||
| + | |||
| + | --- | ||
| + | |||
| + | === Pièce à découper === | ||
| + | |||
| + | **Plateau / Châssis** | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | |||
| + | ==== I. Présentation de la carte Arduino ==== | ||
| + | |||
| + | {{: | ||
| + | {{: | ||
| + | |||
| + | Explications basiques sur l' | ||
| + | |||
| + | Présenter la carte arduino: carte qu'on connecte avec un câble USB à un PC et qui peut piloter ou lire des signaux électriques, | ||
| + | |||
| + | Présenter Arduino IDE: on écrit du code, le code est transformé et envoyé à la carte qui le mouline. | ||
| + | Deux blocs indispensables pour faire un programme: '' | ||
| + | |||
| + | Exercice pour les participants: | ||
| + | |||
| + | <code cpp> | ||
| + | void setup() { | ||
| + | pinMode(13, OUTPUT); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | digitalWrite(13, | ||
| + | delay(500); | ||
| + | digitalWrite(13, | ||
| + | delay(500); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Exercice 2: le refaire avec la plaque à trous avec une LED externe branchée sur une autres sortie( par exemple la pin 12). | ||
| + | |||
| + | ==== II. Notions de base ==== | ||
| + | |||
| + | |||
| + | Exemple : | ||
| + | Montrer qu'on peut allumer une LED avec une pile en série avec une résistance. | ||
| + | Montrer que ça ne marche pas dans l' | ||
| + | Expliquer les notions de continuité, | ||
| + | |||
| + | |||
| + | __Exo n°1: | ||
| + | Allumer la LED avec une plaque à trous. | ||
| + | Laisser les gens chercher comment marche une plaque à trous. | ||
| + | |||
| + | **Matériel nécessaire :** | ||
| + | - Une LED | ||
| + | - Une breadboard | ||
| + | - Deux mini câbles | ||
| + | - Une carte Arduino | ||
| + | - Un câble USB ou une pile | ||
| + | |||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | ==== III. Un peu plus loin avec la carte Arduino ==== | ||
| + | |||
| + | Expliquer les sorties (exemple avec LED pin 12) et les entrées (exemple avec un bouton pin 2). | ||
| + | |||
| + | |||
| + | <code cpp> | ||
| + | void setup() { | ||
| + | pinMode(12, OUTPUT); | ||
| + | pinMode(2, INPUT_PULLUP); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | if(digitalRead(2) == LOW) { | ||
| + | digitalWrite(12, | ||
| + | delay(50); | ||
| + | digitalWrite(12, | ||
| + | delay(50); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | __Exercice: | ||
| + | |||
| + | **Aide >** {{: | ||
| + | |||
| + | |||
| + | |||
| + | Puis alimenter un moteur directement avec une pile. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| + | ==== V. Présentation du shield pour piloter les moteurs ==== | ||
| + | |||
| + | Expliquer pourquoi on ne peut pas connecter directement un moteur à la carte Arduino. | ||
| + | |||
| + | Démo avec un moteur, avancer puis reculer avec une temporisation. | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | |||
| + | AF_DCMotor motor(1, MOTOR12_64KHZ); | ||
| + | |||
| + | void setup() { | ||
| + | motor.setSpeed(128); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | motor.run(FORWARD); | ||
| + | delay(1000); | ||
| + | |||
| + | motor.run(BACKWARD); | ||
| + | delay(1000); | ||
| + | |||
| + | motor.run(RELEASE); | ||
| + | delay(1000); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Expliquer le principe d'une bibliothèque de fonction ( #include ) : mode d' | ||
| + | |||
| + | Expliquer pourquoi un mécanisme de réduction est nécessaire. Présenter les modules moteurs. | ||
| + | Expliquer comment on les utilise pour faire un châssis. | ||
| + | |||
| + | Connecter le moteur 1 à la carte, connecter une pile de 9V et placer le jumper PWR (pour que les moteurs soient alimentés via le 9V de l' | ||
| + | |||
| + | Exemple avec des boutons connectés sur A0 et A1: | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | |||
| + | AF_DCMotor motor(1, MOTOR12_64KHZ); | ||
| + | |||
| + | void setup() { | ||
| + | motor.setSpeed(128); | ||
| + | pinMode(A0, INPUT_PULLUP); | ||
| + | pinMode(A1, INPUT_PULLUP); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | if(digitalRead(A0) == LOW){ | ||
| + | motor.run(FORWARD); | ||
| + | delay(2000); | ||
| + | } else if(digitalRead(A1) == LOW){ | ||
| + | motor.run(BACKWARD); | ||
| + | delay(2000); | ||
| + | } else { | ||
| + | motor.run(RELEASE); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | ==== VII. Construction du robot ==== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Montage de l' | ||
| + | |||
| + | Exercice: faire avancer, reculer, tourner le robot autour d'un obstacle fixe (utiliser des delays pour coder un chemin en dur). | ||
| + | ==== VIII. Récupérer des informations avec le moniteur série ==== | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | |||
| + | AF_DCMotor motor(1, MOTOR12_64KHZ); | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(9600); | ||
| + | Serial.println(" | ||
| + | | ||
| + | motor.setSpeed(128); | ||
| + | pinMode(A0, INPUT_PULLUP); | ||
| + | pinMode(A1, INPUT_PULLUP); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | if(digitalRead(A0) == LOW){ | ||
| + | Serial.println(" | ||
| + | motor.run(FORWARD); | ||
| + | delay(2000); | ||
| + | } else if(digitalRead(A1) == LOW){ | ||
| + | Serial.println(" | ||
| + | motor.run(BACKWARD); | ||
| + | delay(2000); | ||
| + | } else { | ||
| + | motor.run(RELEASE); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== IX. Capteur de luminosité ==== | ||
| + | |||
| + | Démo de résistance photo sensible avec le moniteur série: | ||
| + | |||
| + | <code cpp> | ||
| + | void setup() { | ||
| + | Serial.begin(9600); | ||
| + | |||
| + | pinMode(A0, INPUT); | ||
| + | digitalWrite(A0, | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | Serial.println(analogRead(A0)); | ||
| + | delay(1000); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Exercice: placer deux résistances photo sensibles et faire avancer le robot dans la direction avec le plus de lumière. | ||
| + | ==== X. Capteur de distance à Ultrasons ==== | ||
| + | |||
| + | <code cpp> | ||
| + | /* Constantes pour les broches */ | ||
| + | const byte TRIGGER_PIN = A0; // Broche TRIGGER | ||
| + | const byte ECHO_PIN = A1; // Broche ECHO | ||
| + | |||
| + | /* Constantes pour le timeout */ | ||
| + | const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s | ||
| + | |||
| + | /* Vitesse du son dans l'air en mm/us */ | ||
| + | const float SOUND_SPEED = 340.0 / 1000; | ||
| + | |||
| + | void setup() { | ||
| + | |||
| + | /* Initialise le port série */ | ||
| + | Serial.begin(9600); | ||
| + | |||
| + | /* Initialise les broches */ | ||
| + | pinMode(TRIGGER_PIN, | ||
| + | digitalWrite(TRIGGER_PIN, | ||
| + | pinMode(ECHO_PIN, | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | | ||
| + | /* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */ | ||
| + | digitalWrite(TRIGGER_PIN, | ||
| + | delayMicroseconds(10); | ||
| + | digitalWrite(TRIGGER_PIN, | ||
| + | | ||
| + | /* 2. Mesure le temps entre l' | ||
| + | long measure = pulseIn(ECHO_PIN, | ||
| + | |||
| + | /* 3. Calcul la distance à partir du temps mesuré */ | ||
| + | float distance_mm = measure / 2.0 * SOUND_SPEED; | ||
| + | |||
| + | /* Affiche les résultats en mm, cm et m */ | ||
| + | Serial.print(F(" | ||
| + | Serial.print(distance_mm); | ||
| + | Serial.print(F(" | ||
| + | Serial.print(distance_mm / 10.0, 2); | ||
| + | Serial.print(F(" | ||
| + | Serial.print(distance_mm / 1000.0, 2); | ||
| + | Serial.println(F(" | ||
| + | |||
| + | /* Délai d' | ||
| + | delay(500); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== XI. Liens utiles ==== | ||
| + | |||
| + | Tuto Blink officiel: https:// | ||
| + | |||
| + | Datasheet atmega: http:// | ||
| + | |||
| + | Schéma arduino: https:// | ||
| + | |||
| + | Motor shield: https:// | ||
| + | |||
| + | Schéma du motor shield: https:// | ||
| + | |||
| + | Doc HC-SR04: https:// | ||
| + | |||
| + | Clips moteur: https:// | ||
| + | |||
| + | Roues: https:// | ||
| + | |||
| + | Chassis en 3D: https:// | ||
| + | |||