Groupe A1 đź’ˇ
Membres du groupe : Maxime ARRESSEGUET Sophie NAVARRO Malick DIALLO Paul SPIRCKELÂ
SĂ©ance 1 : 23/01/2023 -----------------------------------------------------
Il s’agissait de la première sĂ©ance consacrĂ©e au projet FabLab. Nous avons tous les 4 commencĂ© Ă chercher des idĂ©es pour notre projet. Celui-ci doit comporter au moins 1 capteur mesurant un ou plusieurs Ă©lĂ©ment(s) dans l’environnement qui nous entoure (tempĂ©rature, pression, humiditĂ©, luminosité…) Nous souhaitons concevoir un objet qui ait une utilitĂ© (pour les Ă©tudiants par exemple). Afin d’éveiller notre imagination, nous avons explorĂ© la liste des capteurs proposĂ©s par SeeedStudio (Grove - Seeed Studio).Â
Notre première idĂ©e est de concevoir un appareil capable de rĂ©aliser plusieurs Ă©tapes dans la cuisson d’aliments comme des pâtes, de manière automatique. Plus prĂ©cisĂ©ment, il s’agirait d’un appareil posĂ© sur une casserole pleine d’eau, dans lequel se trouve des pâtes par exemple, il est Ă©quipĂ© d’une “trappe” qui s’ouvre dès que l’eau bout (ce qui est mesurĂ© Ă l’aide du thermomètre de l’appareil), ce dernier possède aussi une petite cuillère en bois, qui remue constamment les pâtes lorsqu’elles sont dans l’eau. Enfin, notre appareil enverra une notification ou sonnera une minute avant la fin de la cuisson.Â
SĂ©ance 2 : 15/02/2023 -----------------------------------------------------
La sĂ©ance d'aujourd'hui constituait en la prise en main du logiciel ARDUINO.Â
Nous avons dĂ©couvert la carte arduino UNO.Â
Une fois que le logiciel est installé, il est possible de télécharger des croquis (sketches) pour contrôler les capteurs sur Arduino. Lors de notre séance nous avons utilisé les capteurs d'humidité et de température.
Les croquis pour utiliser les capteurs sur Arduino peuvent être trouvés en ligne sur des sites tels que GitHub. Ci dessous voici par exemple les croquis d'un composant Grove LCD RGB.
Les croquis sont généralement écrits en langage C et sont téléchargés sur la carte Arduino via le port USB de l'ordinateur.
Pour utiliser les croquis, il est important de comprendre le fonctionnement des capteurs et de choisir le bon croquis pour chaque capteur. Les croquis peuvent être modifiés pour adapter les capteurs aux besoins spécifiques du projet.
La prise en main comprenait notamment le codage des capteurs Ă notre disposition. Par exemple avec un capteur de tempĂ©rature et un Ă©cran nous devions prendre en main les codes en C afin d'afficher les valeurs relevĂ©es par le capteur sur l'Ă©cran.Â
Voici par exemple le bricolage de code (langage C) que nous avons rĂ©ussi Ă rĂ©aliser en peu de temps d'après les programmes examples fournis avec les library attachĂ©es aux capteurs :Â
#include <Wire.h>
#include "rgb_lcd.h"
#include <Arduino.h>
#include <Wire.h>
#include "SHT31.h"
SHT31 sht31 = SHT31();
rgb_lcd lcd;
const int colorR = 200;
const int colorG = 100;
const int colorB = 100;
void setup()
{
// set up the LCD's number of columns and rows:
sht31.begin();
lcd.begin(16, 2);
lcd.setRGB(colorR, colorG, colorB);
delay(1000);
}
void loop()
{
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 0);
float temp = sht31.getTemperature();
lcd.print("Temp = ");
lcd.print(temp);
lcd.println(" C "); //The unit for Celsius because original arduino don't support speical symbols
lcd.println(" ");
lcd.setCursor(0, 1);
float hum = sht31.getHumidity();
lcd.print("Hum = ");
lcd.print(hum);
lcd.println(" % ");
}
Grâce auquel nous avons obtenu un rĂ©sultat plutĂ´t satisfaisant :Â
La deuxième partie de la séance était consacrée à la prise en main d'une carte M5Stack (similaire à Arduino). Nous avons réalisé le même travail (affichage température et humidité en temps réel (pas d'images)).
SĂ©ance 3 : 17/02/2023 -----------------------------------------------------
Lors de cette sĂ©ance, nous avons appris Ă modĂ©liser en 2D et en 3D Ă l'aide des logiciels Inkscape, FreeCad et OpenScad.Â
Mais tout d'abord, nous avons redĂ©fini notre projet pour cette UE. En effet, nous Ă©tions partis sur une idĂ©e de robot qui faciliterait la cuisson des pâtes ou du riz mais nous nous sommes assez vite rendus compte que ce dernier allait ĂŞtre trop compliquĂ© Ă rĂ©aliser. Ainsi, notre nouvelle idĂ©e consiste Ă crĂ©er un robot qui fuit lorsqu'on s'approche de lui. Il sera Ă©quipĂ© de capteurs de distance Ă son arrière et sur ses cĂ´tĂ©s qui lui permettront d'avancer lorsqu'il dĂ©tecte quelque chose au niveau de ces capteurs. Il reculera lorsque quelque chose sera placĂ© devant lui (un dernier capteur sera Ă l'avant). Nous aimerions aussi pouvoir intĂ©grer une fonction qui fera jouer de la musique Ă notre robot dès qu'il se dĂ©place, pour "narguer" la personne qu'il fuit.Â
Sur OpenSCAD comme sur FreeCAD, un des exercices Ă©tait de modĂ©liser un cube trouĂ© sur chacune des faces. Ainsi nous avons pris en main plusieurs outils fondamentaux de ce type de logiciels : modĂ©liser des formes simples, les dĂ©placer dans l'espace, les recouper...Â
- Sur OpenSCAD (fichier cubetrous.scad) :Â
Code C++ :
$fn=100;
module trous(){
cylinder(51, 5, 5, center=true);
rotate([0,90,0])cylinder(51, 5, 5, center=true);
rotate([90,0,0])cylinder(51, 5, 5, center=true);
};
difference(){cube(50, center = true);
trous();
};
Rendu :
- Sur FreeSCAD (fichier cubetrous.FCStd) :
Rendu :
A l'issue de cette séance, nous devons chacun modéliser un objet 2D (InkScape) et 3D (OpenSCAD ou FreeCAD) :
Maxime
Projet 2D (InkScape) :
Pour ce projet, j'ai décidé de modéliser sur un carré de 10 cm, la texture d'une jack-o-lantern. Pour cela, j'ai donc commencé par trouver mes sources, afin d'avoir des modèles à suivre :
Je connais maintenant les proportion a respecter, cependant cette texture est composée de 16 pixels de haut et de large. Ainsi pour me faciliter la tache, je modéliserais une citrouille de 16 cm avec des pixels de 1cm que je réduirais ensuite a 10 cm, en gardant les proportions.
J'ai donc commencé par créer ma base, un carré de 10cm de couleur rouge.
Ensuite, j'ai dessiné un segment de droite de longueur 1 cm puis en plaçant le carré initial aux coordonnées (0;0), je pouvais placer assez simplement ce segment pour suivre le contour des parties sombres. Je n'avais plus qu'a respecter la positon de chacun de ces segments sur mon dessin en rentrant sa coordonnée précise à la main. J'ai d'abord fait tout les segments horizontaux :
Enfin, j'ai pivotĂ© le mĂŞme segment d'exactement 90° et refait la manipulation pour tout les segments horizontaux. Pour finir, j'ai rempli les 3 parties avec l'outil "sceau", de la couleur noire puis le dessin final Ă©tait prĂŞt. Une fois passĂ© a la graveuse lazer, voici le rĂ©sultat.Â
Modélisation 3D (Blender) :
Pour commencer, j'ai décidé de faire cette modélisation sur blender, car, même si plus complexe a prendre en main, il me semble plus complet et je vois ca comme l'occasion d'apprendre a maitriser un logiciel plus polyvalent.
J'ai décidé pour cette modélisation, de créer un "pot de fleur" capable de maintenir une rose en lego avec un certain angle. Comme pour la modélisation 2d la première étape a était de trouver un modèle a suivre, or cette fois ci j'ai du le créer moi-même, en prenant soin de mesurer la rose en lego et plus précisément sa tige.
Malick
PROJET 2D (Inkscape) :
Pour mon projet 2D, j'ai décidé de faire une plaque en bois avec un numéro de porte dessus. Les numéros de porte étant écrits avec un style particulier mes compétences artistiques seront mises à rude épreuve. Pour rendre l'exercice plus intéressant il me fallait trouver un style de 4 particulier. J'ai eu 2 idées principales:
- un circuit de course style Mario Kart en forme de 4
- un 4 avec la calligraphie de Zelda BOTW
Je suis finalement parti pour le 4 avec une calligraphie hylienne. Je me suis basĂ© sur ce modèle:Â
Â
PROJET 3D (Freecad) :
Pour mon projet 3D, je suis parti pour modĂ©liser un flocon de neige. La structure du flocon Ă©tant assez complexe, modĂ©liser le flocon me permettra diverses fonctionnalitĂ©s de l'outil Freecad.Â
Tout d'abord il me fallait un croquis que j'allais suivre dans la rĂ©alisation de mon flocon. Le voilĂ :Â
 Â
Pour réaliser la structure sur Freecad j'ai vu que la construction se ferait en deux parties :
- Modélisation de l'étoile centrale à 12 branches
- ModĂ©lisation du pourtour avec les 6 branches de givreÂ
L'objectif de la première partie était pour moi de faire une belle étoile. Je l'écris car je m'y suis pris à plusieurs fois avant de réussir à en faire une satisfaisante. Le secret de ma réussite : l'outil '' SYMETRIE '' de Freecad:
Cet outil m'a vraiment sauvĂ© la mise car je n'avais plus qu'Ă faire une partie de l'Ă©toile puis faire une symĂ©trie axiale pour chacune de mes branches.Â
Une fois l'étoile faite le vrai défi venait de commencer avec les 6 branches externes.
J'ai donc dû me diviser cette grande en une multitude de petite tâche que voici :
- Faire le ''premier rempart'' qui est l'hexagone avec des espacesÂ
- Ajouter les ''premières routes''
- Faire les premiers arcs de cercles sur les fins de routes grâce Ă l'outil '' crĂ©er un arc ''Â
- Ensuite on refait la même chose comme une sorte de fractale avec un ''deuxième niveau de route'' et les deuxièmes arc de cercles
Finalement on obtient la givre voulu : Givre
Sophie
 Modélisation 2D :
Pour ma modélisation 2D, j'ai utilisé le logiciel Inkscape pour dessiner une guitare. J'ai utilisé l'outil qui permet de tracer des courbes de Bézier et des Segments de droites pour dessiner son contour et ses détails. La forme particulière de la guitare m'a permis de réellement prendre en main cet outil.
La guitare :Â guitar.svg
Modélisation 3D :
Pour ma modĂ©lisation 3D, j'ai utilisĂ© le logiciel FreeCAD pour crĂ©er un poisson. J'ai utilisĂ© la section Sketcher dans un premier temps pour dessiner la forme de mon poisson et de ses nageoirs etout en leur ajoutant des contraintes de symĂ©tries, puis je suis passĂ©e par Part Design pour leur donner des dimensions ainsi que pour "creuser" les yeux.Â
Voici mon poisson :Â poisson.FCStd
Paul
Modélisation 2D :
Modélisation 3D :
J'ai utilisé FreeCAD pour réaliser cette modélisation. Je voulais continuer à m'entrainer en manipulant les formes de base proposées par le logiciel. Pour mes prochaines modélisations, je souhaites passer par la section Part Design qui me semble beaucoup plus pratique, efficace et ouvre bien plus le champ des possibles.
Pour l'instant du moins, j'ai dĂ©cidĂ© de rĂ©aliser une maison en forme de champignon :Â
Fichier : Maison Champignon
De plus cette sĂ©ance a Ă©tĂ© pour nous l'occasion de dĂ©passer la partie "software" de cette UE et de voir concrètement ce qu'il Ă©tĂ© possible de fabriquer. En effet, nous avons assistĂ© a la prĂ©sentation des machines disponibles au FabLab ainsi qu'a leurs fonctionnements. Nous savons maintenant comment les manipuler en toute sĂ©curitĂ©, quelles sont leurs limites, les diffĂ©rents matĂ©riaux qu'il est possible d'utiliser ainsi que plusieurs autres subtilitĂ©s, qui nous ouvre a l'immense champ des possibles de cette UE.Â
Ainsi, il était venu l'heure des tests. A quelle point cette machine pour graver le bois au laser est elle précise? Combien de temps met-elle pour graver une pièce d'une dizaine de centimètre? Testons. Et quoi de mieux qu'un dessins de Pac-Man pour ce test?
Ainsi, nous avons eu réponse a nos interrogations, en environ 3 minutes, la machine avait finis de graver et découper cette pièce, nous bluffant par sa précision, son niveau de détail et sa simplicité d'utilisation.
SĂ©ance 4 : 21/02/2023Â -----------------------------------------------------
Le but de cette sĂ©ance Ă©tait de rĂ©ellement commencer Ă travailler sur notre projet pour cette UE. Nous avons dans un premier temps dĂ©cidĂ© de laisser de cĂ´tĂ© la partie Design de notre projet, car nous hĂ©sitons entre plusieurs choix (robot avec une coque en forme de cafard, de pacman ou de mouche), nous nous occuperons donc de l’impression 3D de la coque de notre robot une fois le robot lui mĂŞme fini.Â
Aujourd’hui nous avons donc choisi les capteurs qui nous paraissaient les plus adaptĂ©s pour notre idĂ©e de faire un robot qui fuit lorsqu’on s’approche de lui. Nous sommes donc partis sur des capteurs de mouvement. Nous hĂ©sitions avec un capteur de distance mais l’idĂ©e est bien que notre robot capte un humain ou objet qui le poursuit, donc en mouvement, et non pas n’importe quel objet qui se trouve autour de lui (comme un mur par exemple).Â
Nous avons donc pu tester différents modèles de capteurs en les codant simplement sur Arduino :
Le premier que nous avons tester fonctionnait parfaitement bien (deux photos de droite). Cependant, nous n'avons pas rĂ©ussi Ă trouver (mĂŞme en fouillant tous les projets imagineables ayant utilisĂ© ce modèle exacte de capteur sur internet) comment rĂ©gler la distance Ă laquel le mouvement peut ĂŞtre dĂ©tecter. En effet, il nous faudrait une distance de 0 Ă 3 m environ et ce capteur allait jusqu'Ă 6m.Â
Nous avons donc essayĂ© un autre modèle (photos de gauche, mini PR Motion sensor) mais les tests ont Ă©tĂ© un peu plus compliquĂ©s dans la mesure oĂą ce capteur Ă©tait beaucoup trop sensible, en plus du fait que, mĂŞme si cette fois-ci nous savons rĂ©gler la distance (il dĂ©tectait les mouvement jusqu'Ă 6m autour de lui, ce qui est trop pour nous), cela reviendrait Ă modifier la carte mère, il nous paraissait donc plus simple de commander un modèle de capteur avec une distance et un angle prĂ© Ă©tablis qui nous conviennent.Â
Cette séance nous a permis de nous familiariser avec la programmation de ce genre de capteurs, nous n'avons donc pas produit de programme pour notre projet mais nous avons pu manipuler le programme suivant (fourni sur le Wiki PIR Motion Sensor) :
#define PIR_MOTION_SENSOR 2//Use pin 2 to receive the signal from the module
void setup()
{
pinMode(PIR_MOTION_SENSOR, INPUT);
Serial.begin(9600);
}
void loop()
{
if(digitalRead(PIR_MOTION_SENSOR))//if it detects the moving people?
Serial.println("Hi,people is coming");
else
Serial.println("Watching");
delay(200);
}
MatĂ©riel nĂ©cessaire :Â
4x Grove PIR Motion Sensor : https://www.seeedstudio.com/Grove-PIR-Motion-Sensor.html
SĂ©ance 5 : 24/02/2023 -----------------------------------------------------
Cette séance, nous nous sommes fixés plusieurs objectifs :
- Faire la liste des éléments qui composent notre projet
- Prendre en main un relai et l'incorporer dans le circuit d'alimentation d'un moteur
- Prendre en main la commande de signal (programmer la sortie d'un signal de manière interne au M5) sur un M5Stack pour ensuite faire fonctionner un moteur et finalement le relai.
En ce qui concerne la "dissection" de notre projet, voici ce que nous en avons tiré :
- Châssis (à concevoir nous-mêmes)
- Moteurs
- Alimentation (par piles)
- 4x Capteurs Grove PIR Motion Sensor
- M5Stack
- Interrupteur manuel pour allumer éteindre complètement
- Interrupteur à bascule (pour que le robot s'arrête dès qu'on le récupère et qu'on le met à la verticale)
- LED indicatrice ON/OFF
- "Coque" / "Carapace pour fermer le tout et protéger l'électronique (à concevoir nous-mêmes)
- Vis, Ă©crous, tiges, engrenages...? (Ă concevoir nous-mĂŞmes ?)
- Cables Groves, Duponts...
Prise en main du relai :
Commande de signal :
Le but ici était de réussir à programmer la sortie d'un courant depuis le M5, qui servira ensuite à alimenter des relais, eux-même connectés aux moteurs. Nous avons utilisé le Module PLUS du M5 pour avoir une connexion GPIO. Pour l'instant sans succès avec un moteur, nous avons tout de même pu découvrir le vocabulaire nécessaire sur Arduino. Nous testerons à la prochaine séance avec une LED, voir s'il y a des différences.
#include <Arduino.h>
#include <M5Stack.h>
#define GPIO_PIN26 26
#define GPIO_PIN36 36
void setup() {
// put your setup code here, to run once:
M5.begin();
M5.Power.begin();
pinMode(26, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(26, HIGH);
delay(5000);
digitalWrite(26, LOW);
delay(5000);
}
SĂ©ance 6 : 07/03/2023 -----------------------------------------------------
Lors de cette séance, nous avons continué l'avancée du projet de notre robot en travaillant sur :
- Faire fonctionner le moteur avec le module du Motor Shield compatible avec la carte Arduino UNO
- Tester le module de détecteur de mouvement PIR Motion Sensor
- Le montage du robot
Shield Motor :
Pour monter de la bonne manière le moteur au Motor Shield nous avons trouvĂ© une vidĂ©o Youtube qui est très complète :Â
On y aborde la composition du shield, son fonctionnement, ses utilisations et surtout son application pour un robot, très bien expliqué et qui nous sera très utile dans la suite de notre projet.
Nous nous sommes donc essayés a contrôler un moteur à l'aide de la carte Arduino ainsi que du Shield Motor. Nous avons d'abord utilisé un programme example pour se familiariser avec la synthaxe propre au shield :
// Adafruit Motor shield library
// copyright Adafruit Industries LLC, 2009
// this code is public domain, enjoy!
#include <Arduino.h>
#include <AFMotor.h>
AF_DCMotor motor(1);
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Motor test!");
// turn on motor
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop() {
uint8_t i;
Serial.print("tick");
motor.run(FORWARD);
for (i=0; i<255; i++) {
motor.setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--) {
motor.setSpeed(i);
delay(10);
}
Serial.print("tock");
motor.run(BACKWARD);
for (i=0; i<255; i++) {
motor.setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--) {
motor.setSpeed(i);
delay(10);
}
Serial.print("tech");
motor.run(RELEASE);
delay(1000);
}
Puis nous nous sommes attaqués au coeur du projet : commander les moteurs en grâce au détecteur de mouvement. Nous avons écrit un programme qui n'a pas fonctionné, mais qui s'approche fortement de ce que nous cherchons à réaliser :
#define PIR_MOTION_SENSOR 4
#include <Arduino.h>
#include <AFMotor.h>
AF_DCMotor motor(1);
void setup() {
pinMode(PIR_MOTION_SENSOR, INPUT);
Serial.begin(9600);
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop()
{
uint8_t i;
if(digitalRead(PIR_MOTION_SENSOR)) {//if it detects the moving people?
Serial.println("hey dude");
motor.run(FORWARD);
delay(10);
delay(10);
}
else {
Serial.println("oh");
delay(10);
}
}
Et les montages qui nous avons fait :
PIR Motion Sensor :
Du cĂ´tĂ© du PIR Motion Sensor nous avons testĂ© l'efficacitĂ© du dĂ©tecteur de mouvement et nous avons codĂ© sur Arduino le module. L'objectif Ă©tait de lui faire afficher sur le moniteur du logiciel Arduino "Hi, People is coming" lorsqu'il dĂ©tecte du mouvement et "Watching" sinon.Â
Pour ce faire nous avons trouvĂ© la page wiki du PIR Motion Sensor sur Seeedstudio :Â
Et voici le code permettant de faire marcher le module :
/*macro definitions of PIR motion sensor pin and LED pin*/
#define PIR_MOTION_SENSOR 2//Use pin 2 to receive the signal from the module
void setup()
{
pinMode(PIR_MOTION_SENSOR, INPUT);
Serial.begin(9600);
}
void loop()
{
if(digitalRead(PIR_MOTION_SENSOR))//if it detects the moving people?
Serial.println("Hi,people is coming");
else
Serial.println("Watching");
delay(200);
}
Le module de dĂ©tection de mouvement a une portĂ©e de dĂ©tection de 3 mètres (comme prĂ©vu par le constructeur) et lorsqu'il y avait du mouvement, il affichait les informations sur le serial monitor du logiciel Arduino :Â
Ensuite nous nous sommes occupés du montage du robot que nous allions utiliser.
Châssis du robot :
Ce robot utilise le Magician chassis--DG007 que l'on peut trouver sur le site de Gotronic:
Et pour en arriver au résultat ci-dessus nous avons suivi le montage dont on peut trouver le déroulement ici: http://www.pyroelectro.com/tutorials/building_robot_chassis/hardware
SĂ©ance 7 : 14/03/2023 -----------------------------------------------------
ProgrammationÂ
Dans la continuité de la séance dernière, le groupe de codage a continué à travailler sur le code pour que le moteur fonctionne AVEC le module PIR Motion Sensor. Le plus gros problème était que le code faisait fonctionner le moteur seul mais dès qu'on y incluait le module PIR le moteur s'arrêtait de fonctionner. Lorsqu'on incluait le PIR, la connection du PIR prenait le dessus et bloquait la communication entre la carte Arduino et le Motor Shield. Nous avons changé le port du PIR sur le GROVE de D4 à D3.
Nous avons programmé :
- Un premier code pour qu'un seul moteur fonctionne selon le comportement du PIR Motion Sensor :
#define PIR_MOTION_SENSOR 3
#include <Arduino.h>
#include <AFMotor.h>
int switchstate = 0;
AF_DCMotor motorA(1);
AF_DCMotor motorB(4);
void setup() {
motorA.run(RELEASE);
Serial.begin(9600);
pinMode(PIR_MOTION_SENSOR, INPUT);
}
void loop()
{
switchstate = digitalRead(PIR_MOTION_SENSOR);
if(switchstate == HIGH) {
Serial.println("forward");
motorA.run(FORWARD);
motorA.setSpeed(200);
motorB.run(FORWARD);
motorB.setSpeed(200);
delay(1);
}
else {
motorA.run(RELEASE);
motorB.run(RELEASE);
Serial.println("release");
delay(1);
}
delay(1);
}
- Un deuxième code pour tester la connexion entre 2 moteurs et 2 capteurs, en faisant 2 couples moteur/capteur :
#define PIR_MOTION_SENSOR_FRONT 3
#define PIR_MOTION_SENSOR_BACK 6
#include <Arduino.h>
#include <AFMotor.h>
int switchstate_front = 0;
int switchstate_back = 0;
AF_DCMotor motorA(1);
AF_DCMotor motorB(4);
void setup() {
motorA.run(RELEASE);
motorB.run(RELEASE);
Serial.begin(9600);
pinMode(PIR_MOTION_SENSOR_FRONT, INPUT);
pinMode(PIR_MOTION_SENSOR_BACK, INPUT);
}
void loop()
{
switchstate_front = digitalRead(PIR_MOTION_SENSOR_FRONT);
if(switchstate_front == HIGH) {
Serial.println("front");
motorA.run(FORWARD);
motorA.setSpeed(200);
delay(100);
}
else {
motorA.run(RELEASE);
Serial.println("frontrelease");
delay(100);
}
switchstate_back = digitalRead(PIR_MOTION_SENSOR_BACK);
if (switchstate_back == HIGH) {
Serial.println("back");
motorB.run(BACKWARD);
motorB.setSpeed(200);
delay(100);
}
else {
motorB.run(RELEASE);
Serial.println("backrelease");
delay(100);
}
delay(100);
}
- Un dernier code qui s'approche très fortement du code final, capable de réaliser les actions de déplacement (rotation, ligne droite, marche arrière...) en fonction du capteur actif :
#define PIR_MOTION_SENSOR_FRONT 3
#define PIR_MOTION_SENSOR_RIGHT 5
#define PIR_MOTION_SENSOR_LEFT 9
#define PIR_MOTION_SENSOR_BACK 6
#include <Arduino.h>
#include <AFMotor.h>
int switchstate_front = 0;
int switchstate_right = 0;
int switchstate_left = 0;
int switchstate_back = 0;
AF_DCMotor motorR(1);
AF_DCMotor motorL(4);
void setup() {
motorR.run(RELEASE);
motorL.run(RELEASE);
Serial.begin(9600);
pinMode(PIR_MOTION_SENSOR_FRONT, INPUT);
pinMode(PIR_MOTION_SENSOR_RIGHT, INPUT);
pinMode(PIR_MOTION_SENSOR_LEFT, INPUT);
pinMode(PIR_MOTION_SENSOR_BACK, INPUT);
}
void loop()
{
//Capteur FRONT
switchstate_front = digitalRead(PIR_MOTION_SENSOR_FRONT);
if(switchstate_front == HIGH) {
Serial.println("front");
motorR.run(BACKWARD);
motorR.setSpeed(250);
motorL.run(BACKWARD);
motorL.setSpeed(250);
delay(3000);
}
else {
motorR.run(RELEASE);
motorL.run(RELEASE);
Serial.println("frontrelease");
delay(100);
}
//Capteur RIGHT
switchstate_right = digitalRead(PIR_MOTION_SENSOR_RIGHT);
if(switchstate_right == HIGH) {
Serial.println("right");
motorR.run(FORWARD);
motorR.setSpeed(250);
motorL.run(RELEASE);
delay(1000);
}
else {
motorR.run(RELEASE);
motorL.run(RELEASE);
Serial.println("rightrelease");
delay(100);
}
//Capteur LEFT
switchstate_left = digitalRead(PIR_MOTION_SENSOR_LEFT);
if(switchstate_right == HIGH) {
Serial.println("left");
motorL.run(FORWARD);
motorL.setSpeed(250);
motorR.run(RELEASE);
delay(1000);
}
else {
motorR.run(RELEASE);
motorL.run(RELEASE);
Serial.println("leftrelease");
delay(100);
}
//Capteur BACK
switchstate_back = digitalRead(PIR_MOTION_SENSOR_BACK);
if (switchstate_back == HIGH) {
Serial.println("back");
motorR.run(BACKWARD);
motorR.setSpeed(250);
motorL.run(BACKWARD);
motorL.setSpeed(250);
delay(100);
}
else {
motorR.run(RELEASE);
motorL.run(RELEASE);
Serial.println("backrelease");
delay(100);
}
delay(100);
}
(diffĂ©rence entre les modules, dĂ©lai pour augmenter la sensibilitĂ© de dĂ©tection)Â
Conception et réadaptation d'un châssis
Dans un deuxième temps nous nous sommes occupĂ©s du montage de notre robot et une difficultĂ© est apparue : la taille des composants dont nous disposions n'Ă©taient pas calibrĂ©e avec le châssis. En effet, les modules que nous voulions fixer au châssis Ă©taient trop grand ou trop petit par rapport au châssis.Â
Pour pallier à ce problème, 2 choix s'offraient à nous :
- Recréer le châssis de zéro en y incluant des accroches pour les composants que nous allons y placer (moteurs, capteurs, batteries…)
- Garder le châssis de base et créer des accroches pour les composants que nous allons y placer (moteurs, capteurs, batteries…)
Nous sommes partis sur la 2e option et allons modéliser sur Freecad, 4 accroches pour les modules PIR que nous allons fixer.
Pour accrocher les capteurs, nous avons optĂ© pour une accroche en forme de L pliĂ©. Les piles et le module Arduino possèdent des trous pour les visser directement. On fixera donc les piles en dessous du robot et l'Arduino au dessus. Les moteurs quant Ă eux, seront au milieu avec les accroches prĂ©-fournies. Enfin, pour l'interrupteur et la LED, nous les placerons Ă cĂ´tĂ© des piles en fabriquant une accroche. Ainsi tous les composants seront placĂ©s et il ne restera plus qu'Ă modĂ©liser une "coque" (le corps du robot). Â
Modèle 3D du support pour PIR Motion Sensor (fichier) : Â