Outils pour utilisateurs

Outils du site


projets:2019:stageavrilubo

Stage LPH: avril 2019

Introduction

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

Modalités

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.

Planning et contenu

  • Communication
  • Inscription et vérification de la faisabilité du projet (en compétences, en temps, en matériels si besoin et en coût matériel)
  • Validation inscription et devis matériel
  • Planification du projet sur la semaine de mai (en fonction du temps…)

Ressources :

État du stock et matériel nécessaire pour le stage

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 ?

Liste des tâches

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

Impressions 3D

Objectif 14 robots avec comme seul accessoire la pince.

La base est à revoir : creuser plus pour le PCB et le passage des câbles des servo moteurs.

STL des Pièces : https://cloud.lph.bzh/index.php/s/D0VB0A5Bi5igJXt

  • Base Custom LPH (pas encore validée)
  • Head
  • Wheel (version creusée Wheel2)
  • Gripper (pince)
    • Support servo
    • Doigt 1
    • Doigt 2
  • Gripper Attachment ( à prendre sur les fichiers originaux https://www.thingiverse.com/download:3877090 )

Impressions A faire

Pièces Impressions Benjamin Impressions Yann Simon
Têtes
Bases
Pinces 2 pinces rouge avec attache 4 pinces
Roues 10 roues

Impressions Faites

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

Présent pour animer

Animation de l'atelier:

  • Stéphane Blanc
  • Christian Jacolot
  • Benjamin
  • Arnaud (mercredi après midi et jeudi)
  • Simon (mercredi après midi peut-être et jeudi et vendredi à priori)
  • Tanguy (jeudi)

Déroulé du projet

  • Présentation du projet
  • Validation du matériel et des logiciels installés sur le PC
  • Montage
  • Programmation

Contacts

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 :?:)

Remerciements

Nous remercions Yves et Matthieu pour accueillir le stage dans les locaux de l'UBO Open Factory.

Préparation des PC

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

Présentation

Documents

Fichier de présentation

3D

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");
}

Code

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");
}
projets/2019/stageavrilubo.txt · Dernière modification: 2019/04/19 09:51 par christian.jacolot