Plongez dans l'Univers de la Robotique votre club
Code Arduino pour Labyrinthe
Explorez les Horizons de la Technologie Robotique
Inspirez votre Créativité avec CLUB ROBOTIQUE
Guide Technique
Explorez notre guide complet pour implémenter le code de suiveur de ligne Arduino avec précision.
Introduction au Suiveur de Ligne
Ce document fournit une vue d’ensemble détaillée sur la mise en œuvre du code Arduino pour les suiveurs de ligne. Découvrez comment configurer votre matériel et optimiser votre code pour des performances maximales.
Capteurs Infrarouges
Utilisez des capteurs infrarouges pour détecter les lignes avec précision et ajuster la trajectoire du robot.
Algorithme PID
Implémentez l’algorithme PID pour améliorer la stabilité et la réactivité de votre robot suiveur de ligne.
Configuration Matérielle
Assurez-vous que votre carte Arduino est correctement connectée aux moteurs et aux capteurs. Suivez notre schéma de câblage détaillé pour éviter les erreurs courantes.
code pour Labyrinthe
code pour Labyrinthe
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MeMCore.h>
MeDCMotor motor_9(9);
MeDCMotor motor_10(10);
void move(int direction, int speed)
{
int leftSpeed = 0;
int rightSpeed = 0;
if(direction == 1){
leftSpeed = speed;
rightSpeed = speed;
}else if(direction == 2){
leftSpeed = -speed;
rightSpeed = -speed;
}else if(direction == 3){
leftSpeed = -speed;
rightSpeed = speed;
}else if(direction == 4){
leftSpeed = speed;
rightSpeed = -speed;
}
motor_9.run((9)==M1?-(leftSpeed):(leftSpeed));
motor_10.run((10)==M1?-(rightSpeed):(rightSpeed));
}
double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
void Correction();
double distance;
MeUltrasonicSensor ultrasonic_2(2);
MeUltrasonicSensor ultrasonic_3(3);
void se();
double currentTime = 0;
double lastTime = 0;
double getLastTime(){
return currentTime = millis()/1000.0 – lastTime;
}
void Tourner(double angle);
double Temps;
double compteur;
double __var__99_97_112_116_101_117_114_32_49;
double __var__99_97_112_116_101_117_114_32_50;
double __var__99_97_112_116_101_117_114_32_51;
double ETAT;
MeUltrasonicSensor ultrasonic_1(1);
Me7SegmentDisplay seg7_4(4);
void Correction()
{
move(1,0);
if((ultrasonic_2.distanceCm()) < (25)){
if(!(((round(ultrasonic_2.distanceCm()))==(round(ultrasonic_3.distanceCm()))))){
distance = ((ultrasonic_2.distanceCm()) – (ultrasonic_3.distanceCm())) / (16);
distance = atan(distance)*angle_deg;
if((abs(distance)) > (0.5)){
Tourner(distance);
}
}
}
}
void se()
{
lastTime = millis()/1000.0;
move(1,100);
while(!((getLastTime()) > (1)))
{
_loop();
}
move(1,0);
}
void Tourner(double angle)
{
move(1,0);
Temps = ((angle) * (1.9)) / (180);
lastTime = millis()/1000.0;
if((Temps) < (0)){
Temps = (Temps) * (-1);
move(4,100);
}else{
move(3,100);
}
while(!((getLastTime()) > (Temps)))
{
_loop();
}
move(1,0);
}
void setup(){
compteur = 0;
}
void loop(){
_delay(0.1);
if((ultrasonic_1.distanceCm()) < (5)){
__var__99_97_112_116_101_117_114_32_49 = 1;
}else{
__var__99_97_112_116_101_117_114_32_49 = 0;
}
if((ultrasonic_2.distanceCm()) < (15)){
__var__99_97_112_116_101_117_114_32_50 = 1;
}else{
__var__99_97_112_116_101_117_114_32_50 = 0;
}
if((ultrasonic_3.distanceCm()) < (15)){
__var__99_97_112_116_101_117_114_32_51 = 1;
}else{
__var__99_97_112_116_101_117_114_32_51 = 0;
}
ETAT = ((__var__99_97_112_116_101_117_114_32_49) * (100)) + (((__var__99_97_112_116_101_117_114_32_50) * (10)) + (__var__99_97_112_116_101_117_114_32_51));
seg7_4.display((float)compteur);
if(!(((compteur)==(0)))){
if(((ETAT)==(1))){
move(1,100);
while(!((ultrasonic_3.distanceCm()) > (15)))
{
_loop();
}
compteur += 1;
Tourner(90);
se();
}
}
if(!(((compteur)==(0)))){
if(((ETAT)==(11))){
Correction();
move(1,100);
}
}
if(!(((compteur)==(0)))){
if(((ETAT)==(100))){
compteur += 1;
Tourner(90);
se();
}
}
if(!(((compteur)==(0)))){
if(((ETAT)==(101))){
move(1,0);
}
}
if(!(((compteur)==(0)))){
if(((ETAT)==(110))){
move(1,0);
}
}
if(!(((compteur)==(0)))){
if(((ETAT)==(111))){
compteur += -1;
Tourner(-90);
}
}
if(!(((compteur)==(0)))){
if(((ETAT)==(10))){
move(1,100);
lastTime = millis()/1000.0;
while(!(((ultrasonic_3.distanceCm()) < (15)) || ((getLastTime()) > (1))))
{
_loop();
}
}
}
if(((compteur)==(0))){
if(((__var__99_97_112_116_101_117_114_32_49)==(1))){
compteur += -1;
Tourner(-90);
}else{
if(((ETAT)==(11))){
Correction();
move(1,100);
}
move(1,100);
}
}
if((((ultrasonic_1.distanceCm())==( 400 ))) && (((__var__99_97_112_116_101_117_114_32_49)==(1)))){
move(1,0);
move(2,100);
while(!((!(((ultrasonic_1.distanceCm())==( 400 )))) && ((ultrasonic_1.distanceCm()) > (10))))
{
_loop();
}
move(1,0);
}
if((((ultrasonic_2.distanceCm())==( 400 ))) && (((ETAT)==(11)))){
motor_9.run((9)==M1?-(200):(200));
motor_10.run((10)==M1?-(100):(100));
while(!((!(((ultrasonic_2.distanceCm())==( 400 )))) && ((ultrasonic_2.distanceCm()) > (6))))
{
_loop();
}
move(1,0);
}
if((((ultrasonic_2.distanceCm())==( 400 ))) && (((__var__99_97_112_116_101_117_114_32_50)==(1)))){
Tourner(-20);
se();
}
if((((ultrasonic_3.distanceCm())==( 400 ))) && (((__var__99_97_112_116_101_117_114_32_51)==(1)))){
Tourner(-40);
se();
}
if(!(((compteur)==(0)))){
if(((ETAT)==(0))){
move(1,100);
}
}
_loop();
}
void _delay(float seconds){
long endTime = millis() + seconds * 1000;
while(millis() < endTime)_loop();
}
void _loop(){
}
Découvrez des astuces pour optimiser votre code Arduino, réduire la consommation d’énergie et améliorer la vitesse de traitement.