Stage LPH d'avril à L'UBO Open Factory
L'objectif de cet atelier est de réaliser un petit robot à base de micro-contrôleur.
Public cible | 12 jeunes |
---|---|
Date | semaine 16: du 15 avril au 19 avril sous réserve de confirmation des différents acteurs |
Lieu | UBO Open Factory |
Une inscription est nécessaire pour pouvoir planifier. Une adhésion (de 20 euros) et une participation financière (60 euros) pour le matériel seront demandées.
Ressources :
Voici une première liste de matériel pour le stage:
Intitulé | Quantité nécessaire | Quantité à commander/produire | Etat |
---|---|---|---|
Node MCU ESP 32 | 1 * 12 | 12 | à commander (ou arduino nano + module bluetooth) |
cartes de support pour les éléments | 1 * 12 | 12 | à commander avec le MCU |
Servo moteur roue 360° | 2 * 12 | 24 | à commander |
Servo moteur pince | 1 * 12 | 12 | à commander |
Module Ultra son | 1 * 12 | à vérifier dans le stock | |
Bloc pile alimentation | 1 * 12 | à vérifier dans le stock | |
pile alimentation | 4 * 12 | 48 | à commander |
fils/nappe de connexion | plein | à vérifier dans le stock | |
filament <couleur> pour imprimante 3D | rouge | ||
filament <couleur> pour imprimante 3D | noir | ||
filament <couleur> pour imprimante 3D | blanc | ||
colle pour le plateau imprimante 3D | |||
matériel pour le plateau imprimante 3D | |||
scotch pour le plateau imprimante 3D |
Matériel hors-kit à préparer pour la tenue de l'atelier:
Intitulé | Quantité | A préparer |
---|---|---|
rallonge | 2 | |
multiprise | 4 | |
PC portable: | 12 | au moins 9 de prêt |
alimentations PC | 12 | |
souris PC | 12 | à vérifier |
fers à souder | 3/4 | en cas de besoin |
tapis pour fer à souder | 3/4 | |
support fer à souder | 3/4 | |
bobine étain | 1 | |
fils | ||
multimètre | 1 | en cas de besoin |
imprimante 3D | 1 | Ultimaker pour imprimer les pièces ? |
Tâche | Qui | Opération |
---|---|---|
Faire l'état du stock | Christian et Stéphane | |
Commande matériel | Christian et Stéphane | |
Communication sur les listes de diffusion | Christian et Stéphane | |
Communication “Affiche” | ||
Gestion des inscriptions | ||
Validation des inscriptions | ||
Planification des projets | ||
Développement logiciel | Simon | cahier des charges à prévoir |
Objectif 14 robots avec comme seul accessoire la pince.
STL des Pièces : https://cloud.lph.bzh/index.php/s/D0VB0A5Bi5igJXt
Pièces | Impressions Benjamin | Impressions Yann | Simon |
---|---|---|---|
Têtes | |||
Bases | |||
Pinces | 2 pinces rouge avec attache | 4 pinces | |
Roues | 10 roues |
Pièces | Impressions Benjamin | Impressions Yann |
---|---|---|
Têtes | 3 tête rouge + 2 têtes jaunes + 4 têtes bleu | 2 noires + 2 vertes + 2 blanches |
Base | 3 Bleues + 4 bases rouges + 2 bases grises | 2 blanches + 2 vertes + 2 noires |
Roues (unitaires) | 7 roues bleus + 2 roues rouges | 6 noires + 4 blanches + 4 vertes |
Pinces |
Animation de l'atelier:
Structure | Nom Prénom | Rôle sur le projet / poste |
---|---|---|
Maison du libre | Stéphane Blanc | Logistique et animation |
Maison du libre | Christian Jacolot | Logistique et animation |
Maison du libre | Benjamin | Logistique et animation |
Maison du libre | Arnaud | Développement et animation |
Maison du libre | Simon | Développement ( et animation |
Nous remercions Yves et Matthieu pour accueillir le stage dans les locaux de l'UBO Open Factory.
Installation de xubuntu 18.04 sur les PC, iso sur clé USB.
Mise à jour et installation des logiciels/paquets nécessaires:
$ sudo apt update $ sudo apt upgrade $ sudo apt install git mercurial build-essential arduino-core arduino-mk gcc-avr avr-libc openjdk-8-jdk $ sudo apt install squeak-vm squeak-plugins-scratch $ sudo apt install nodejs npm $ id $ sudo usermod -a -G dialout $USER $ more /etc/group # télécharger arduino sur arduino.cc / linux 32 bits $ cd Téléchargements/ $ tar xf arduino-1.8.8-linux32.tar.xz $ cd arduino-1.8.8/ $ ./install.sh $ cd # démarrer arduino IDE # menu Outils / Gérer les bibliothèques # installer: circuit playground, unified sensor, DHT sensor library $ sudo npm install -g --unsafe-perm node-red $ node-red # navigateur web sur localhost:1880 # installer via palette: node-red-node-serialport et node-red-dashboard $ sudo apt install logisim openssh-server $ sudo apt install gcc-avr avr-libc flashplugin-installer algobox blender python3-dev python3-setuptools python3-numpy $ sudo apt install python3-opengl ffmpeg libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsmpeg-dev libsdl1.2-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev libtiff5-dev libx11-6 libx11-dev fluid-soundfont-gm timgm6mb-soundfont xfonts-base xfonts-100dpi xfonts-75dpi xfonts-cyrillic fonts-freefont-ttf libfreetype6-dev $ java -version $ javac -version $ sudo update-alternatives --config java # choisir java 8 $ java -version $ sudo add-apt-repository ppa:openscad/releases $ sudo apt update $ sudo apt install openscad $ sudo apt install fritzing fritzing-parts gimp
Fichier de présentation
Exemple d'accessoire pour la tête:
Code OpenSCAD pour ajouter l'accessoire sur la tête:
#rotate([180,0,0]) import("<path>/Documents/Head.stl"); rotate_extrude() { polygon(points=[[0,0],[10,0],[10,10],[25,25],[0,25]]); }
Exemple de texte pour le dozer:
Code OpenSCAD pour ajouter le texte sur le dozer:
#translate([0,0,-23]) rotate([-90,-90,0]) import("<path>/Documents/Dozer.stl"); translate ([-12,15,-3]) linear_extrude(height=5) { text("LPH"); }
Pour récupérer le code du robot adapté:
$ git clone https://git.archieri.fr/simon/SimpleBotArduino.git
Android APK pour le robot Arduino: https://cloud.archieri.fr/s/WzxmeGBmEKow5co
Test Servo
# include <Servo.h> Servo servoLeft; Servo servoRight; void setup() { servoLeft.attach(11); servoRight.attach(10); Serial.begin(9600); } void loop() { servoLeft.write(90); // 0 => sens, 180 => autre sens servoRight.write(90); // } void stop() { servoLeft.write(90); // 0 => sens, 180 => autre sens servoRight.write(90); // } void avancer() { servoLeft.write( xx ); // 0 => sens, 180 => autre sens servoRight.write( xx ); // } void reculer() { servoLeft.write( xx ); // 0 => sens, 180 => autre sens servoRight.write( xx ); // } void tourner() { servoLeft.write( xx ); // 0 => sens, 180 => autre sens servoRight.write( xx ); // }
Avec le sonar
#include <NewPing.h> #include <Servo.h> Servo servoLeft; Servo servoRight; NewPing sonar(7, 6, 200); void setup() { servoLeft.attach(11); servoRight.attach(10); Serial.begin(9600); } void loop() { gestionSonar(); } void gestionSonar() { int distance = sonar.ping_cm(); avancer(); if (distance < 10) { reculer(); tournerGauche(); } } void stop() { servoLeft.write(90); // 0 => sens, 180 => autre sens servoRight.write(90); // } void avancer() { servoLeft.write( 0 ); // 0 => sens, 180 => autre sens servoRight.write( 180 ); // } void reculer() { servoLeft.write( 180 ); // 0 => sens, 180 => autre sens servoRight.write( 0 ); // } void tournerGauche() { servoLeft.write(45); // 0 => sens, 180 => autre sens servoRight.write(45); // } void tournerDroite() { servoLeft.write(135); // 0 => sens, 180 => autre sens servoRight.write(135); // }
Avec le bluetooth (message provenant du robot):
#include <NewPing.h> #include <Servo.h> #include <SoftwareSerial.h> Servo servoLeft; Servo servoRight; NewPing sonar(7, 6, 200); SoftwareSerial BTSerial(4, 8); // TX, RX void setup() { servoLeft.attach(11); servoRight.attach(10); //Serial.begin(9600); BTSerial.begin(9600); } void loop() { gestionSonar(); } void gestionSonar() { int distance = sonar.ping_cm(); avancer(); if (distance > 0 && distance < 10) { BTSerial.println("obstacle < 10cm"); reculer(); tournerGauche(); } } void stop() { servoLeft.write(90); // 0 => sens, 180 => autre sens servoRight.write(90); // BTSerial.println("stop"); } void avancer() { servoLeft.write( 0 ); // 0 => sens, 180 => autre sens servoRight.write( 180 ); // BTSerial.println("avance"); } void reculer() { servoLeft.write( 180 ); // 0 => sens, 180 => autre sens servoRight.write( 0 ); // BTSerial.println("recule"); } void tournerGauche() { servoLeft.write(45); // 0 => sens, 180 => autre sens servoRight.write(45); // BTSerial.println("gauche"); } void tournerDroite() { servoLeft.write(135); // 0 => sens, 180 => autre sens servoRight.write(135); // BTSerial.println("droite"); }
Avec le bluetooth (piloter le robot):
#include <NewPing.h> #include <Servo.h> #include <SoftwareSerial.h> Servo servoLeft; Servo servoRight; NewPing sonar(7, 6, 200); SoftwareSerial BTSerial(4, 8); // TX, RX String message; void setup() { servoLeft.attach(11); servoRight.attach(10); //Serial.begin(9600); BTSerial.begin(9600); } void loop() { gestionSonar(); readBTSerial(); } String readBTSerial() { while (BTSerial.available()) { message = BTSerial.readString(); } if (message == "av\r\n") { avancer(); } else if (message == "ar\r\n") { reculer(); } else if (message == "g\r\n") { tournerGauche(); } else if (message == "d\r\n") { tournerDroite(); } } void gestionSonar() { int distance = sonar.ping_cm(); avancer(); if (distance > 0 && distance < 10) { BTSerial.println("obstacle < 10cm"); reculer(); tournerGauche(); } } void stop() { servoLeft.write(90); // 0 => sens, 180 => autre sens servoRight.write(90); // BTSerial.println("stop"); } void avancer() { servoLeft.write( 0 ); // 0 => sens, 180 => autre sens servoRight.write( 180 ); // BTSerial.println("avance"); } void reculer() { servoLeft.write( 180 ); // 0 => sens, 180 => autre sens servoRight.write( 0 ); // BTSerial.println("recule"); } void tournerGauche() { servoLeft.write(45); // 0 => sens, 180 => autre sens servoRight.write(45); // BTSerial.println("gauche"); } void tournerDroite() { servoLeft.write(135); // 0 => sens, 180 => autre sens servoRight.write(135); // BTSerial.println("droite"); }