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 [2023/07/24 14:46] (Version actuelle) – citrouilleorange | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ===== 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:// | ||
+ | |||