RobotTondeuse : Différence entre versions
(→Travail à réaliser) |
(→{{Bleu|Programmation}}) |
||
| Ligne 126 : | Ligne 126 : | ||
=={{Bleu|Programmation}}== | =={{Bleu|Programmation}}== | ||
| + | * programmation des capteurs de distance | ||
| + | |||
| + | #include <Arduino.h> | ||
| + | #include <Wire.h> | ||
| + | #include <VL53L1X.h> | ||
| + | |||
| + | VL53L1X sensor; | ||
| + | VL53L1X sensor2; | ||
| + | VL53L1X sensor3; | ||
| + | MPU9250 IMU(Wire,0x68); | ||
| + | |||
| + | int status; | ||
| + | |||
| + | void setupLaser(); | ||
| + | void setupLaser(){ | ||
| + | pinMode(2, OUTPUT); //erster Sensor muss nicht über XSHUT angesteuert werden | ||
| + | pinMode(3, OUTPUT); | ||
| + | pinMode(4, OUTPUT); | ||
| + | |||
| + | digitalWrite(2, LOW); | ||
| + | digitalWrite(3, LOW); | ||
| + | digitalWrite(4, LOW); | ||
| + | |||
| + | // initialise I2C | ||
| + | delay(500); | ||
| + | Wire.begin(); | ||
| + | Wire.beginTransmission(0x29); | ||
| + | |||
| + | digitalWrite(3,HIGH); | ||
| + | delay(150); | ||
| + | sensor2.init(); | ||
| + | Serial.println("01"); | ||
| + | delay(100); | ||
| + | sensor2.setAddress(0x33); | ||
| + | Serial.println("02"); | ||
| + | |||
| + | digitalWrite(4,HIGH); | ||
| + | delay(150); | ||
| + | sensor3.init(); | ||
| + | Serial.println("03"); | ||
| + | delay(100); | ||
| + | sensor3.setAddress(0x35); | ||
| + | Serial.println("04"); | ||
| + | |||
| + | digitalWrite(2, HIGH); | ||
| + | delay(150); | ||
| + | Serial.println("09"); | ||
| + | sensor.init(); | ||
| + | Serial.println("10"); | ||
| + | delay(100); | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | sensor.setDistanceMode(VL53L1X::Long); | ||
| + | sensor.setMeasurementTimingBudget(50000); | ||
| + | sensor.startContinuous(50); | ||
| + | sensor.setTimeout(100); | ||
| + | |||
| + | sensor2.setDistanceMode(VL53L1X::Long); | ||
| + | sensor2.setMeasurementTimingBudget(50000); | ||
| + | sensor2.startContinuous(50); | ||
| + | sensor2.setTimeout(100); | ||
| + | |||
| + | sensor3.setDistanceMode(VL53L1X::Long); | ||
| + | sensor3.setMeasurementTimingBudget(50000); | ||
| + | sensor3.startContinuous(50); | ||
| + | sensor3.setTimeout(100); | ||
| + | |||
| + | delay(150); | ||
| + | Serial.println("addresses set"); | ||
| + | |||
| + | Serial.println ("I2C scanner. Scanning ..."); | ||
| + | byte count = 0; | ||
| + | |||
| + | |||
| + | for (byte i = 1; i < 120; i++) | ||
| + | { | ||
| + | |||
| + | Wire.beginTransmission (i); | ||
| + | if (Wire.endTransmission () == 0) | ||
| + | { | ||
| + | Serial.print ("Found address: "); | ||
| + | Serial.print (i, DEC); | ||
| + | Serial.print (" (0x"); | ||
| + | Serial.print (i, HEX); | ||
| + | Serial.println (")"); | ||
| + | count++; | ||
| + | delay (1); // maybe unneeded? | ||
| + | } // end of good response | ||
| + | } // end of for loop | ||
| + | Serial.println ("Done."); | ||
| + | Serial.print ("Found "); | ||
| + | Serial.print (count, DEC); | ||
| + | Serial.println (" device(s)."); | ||
| + | } | ||
=={{Bleu|Vidéos}}== | =={{Bleu|Vidéos}}== | ||
[https://www.youtube.com/watch?v=N13t8mgYYdE&ab_channel=AnthonyJeanBaptisteAdolphe/ Vidéo de démonstration] | [https://www.youtube.com/watch?v=N13t8mgYYdE&ab_channel=AnthonyJeanBaptisteAdolphe/ Vidéo de démonstration] | ||
Version du 15 mars 2021 à 11:51
Sommaire
Présentation du projet
Objectif
Le projet consiste à fabriquer un robot tondeuse capable d'éviter les obstacles grâce à des capteurs de distance et faire tourner un moteur brushless désignant la lame de la tondeuse.
Tâches individuelles
- Arel RAKO :
* capteur VL53L1X
- programmé et connecté le capteur
* moteur brushless
- programmé, connecté, fait les soudures nécessaires pour le connecteur de la batterie
* interrupteur
- programmé en PULL UP pour faire tourner le moteur au niveau haut et l'arrêter au niveau bas
* plaque pastillée
- toutes les soudures de la plaque, qui seront détaillés un peu plus tard
Découpage fonctionnel
Travail à réaliser
Objectif
L'objectif sera bien évidemment de terminer le projet de sorte qu'il réponde au cahier des charges décrit précédemment.
Pour ce faire, il conviendra de :
- rechercher des solutions à partir du schéma fonctionnel fourni ( schéma électronique et composants )
- dimensionner les composants utilisés
- tester les différents blocs fonctionnels
- programmer les composants
- valider le fonctionnement
Choix des composants
- 3 capteurs de distance VL53L1X
- 1 arduino uno
- 1 shield avec drivers
- 1 gyroscope MPU9250
- 1 batterie 12.8V
- 1 abaisseur de tension LM2596
- 1 moteur brushless
- 1 interrupteur
- 2 moteurs MDP (moteurs des roues)
Explications
- les capteurs de distance
* connectés en I2C via les ports SCL et SDA de l'arduino * alimentés en 5V via le pin VIN, ils possèdent un régulateur qui transforme le 5V en 2.8V (sortie VDD) * placés au côté gauche, droit et au milieu du robot pour avoir un plus grand champ de vision * détails de fonctionnement:
- si le capteur à gauche détecte un obstacle à moins de 20cm, le robot tourne à droite - si le capteur à droite détecte un obstacle à moins de 20cm, le robot tourne à gauche - si le capteur du milieu détecte un obstacle à moins de 20cm, le robot s'arrête et fait demi-tour vers la droite
- le gyroscope
* connecté en I2C comme les capteurs de distance * alimenté en 5V comme les capteurs de distance * prend la valeur de 100 angles et fait leur moyenne pour plus de précision
- moteur brushless
* connecté à un pin PWM de l'arduino pour pouvoir le piloter * alimenté directement via la batterie car nécessite 12V * sur le rotor on a mis du scotch pour modéliser la lame
- interrupteur
* connecté en PULL-UP à un pin quelconque de l'arduino * alimenté en 5V * s'il envoie 1, le moteur brushless commence à tourner, s'il envoie 0, le moteur s'arrête Attention! Prévoir 5 secondes pour l'arrêt du moteur
- abaisseur de tension
* transforme le 12V de la batterie en 5V pour alimenter les capteurs
- plaque pastillée
* constituée de 6 parties:
- le 12V pour alimenter l'arduino, on y branche aussi le connecteur AMASS du moteur brushless et l'abaisseur de tension
- le 5V où sont connectés tous les capteurs, le gyroscope et l'interrupteur
- SCL où est connecté le pin SCL des capteurs et du gyroscope au pin SCL de l'arduino
- SDA où est connecté le pin SDA des capteurs et du gyroscope au pin SDA de l'arduino
- masse du 12V
- masse du 5V
- moteurs MDP
Programmation
- programmation des capteurs de distance
- include <Arduino.h>
- include <Wire.h>
- include <VL53L1X.h>
VL53L1X sensor; VL53L1X sensor2; VL53L1X sensor3; MPU9250 IMU(Wire,0x68);
int status;
void setupLaser(); void setupLaser(){
pinMode(2, OUTPUT); //erster Sensor muss nicht über XSHUT angesteuert werden pinMode(3, OUTPUT); pinMode(4, OUTPUT); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW);
// initialise I2C delay(500); Wire.begin(); Wire.beginTransmission(0x29);
digitalWrite(3,HIGH);
delay(150);
sensor2.init();
Serial.println("01");
delay(100);
sensor2.setAddress(0x33);
Serial.println("02");
digitalWrite(4,HIGH);
delay(150);
sensor3.init();
Serial.println("03");
delay(100);
sensor3.setAddress(0x35);
Serial.println("04");
digitalWrite(2, HIGH);
delay(150);
Serial.println("09");
sensor.init();
Serial.println("10");
delay(100);
sensor.setDistanceMode(VL53L1X::Long); sensor.setMeasurementTimingBudget(50000); sensor.startContinuous(50); sensor.setTimeout(100);
sensor2.setDistanceMode(VL53L1X::Long);
sensor2.setMeasurementTimingBudget(50000);
sensor2.startContinuous(50);
sensor2.setTimeout(100);
sensor3.setDistanceMode(VL53L1X::Long);
sensor3.setMeasurementTimingBudget(50000);
sensor3.startContinuous(50);
sensor3.setTimeout(100);
delay(150);
Serial.println("addresses set");
Serial.println ("I2C scanner. Scanning ...");
byte count = 0;
for (byte i = 1; i < 120; i++)
{
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0)
{
Serial.print ("Found address: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX);
Serial.println (")");
count++;
delay (1); // maybe unneeded?
} // end of good response
} // end of for loop
Serial.println ("Done.");
Serial.print ("Found ");
Serial.print (count, DEC);
Serial.println (" device(s).");
}

