Documentation Robot Modelec 2024 1.0 Help

Pixel

Objectif

Pixel est un PAMI qui a donc pour objectif, dans les 10 dernières secondes, d'aller jusqu'à une zone et toucher une plante dans cette zone une fois arrêté.

Matèriel

Fonctionnement

Detection contacte plante

Le switch permet de détecter lorsque le robot pousse sur une plante contre un mur et donc de s'arrêter au contact d'une plante dans la zone d'arrivée.

Detection d'adversaire

Les capteurs lasers permettent de détecter un robot adverse approchant. Par ailleurs, le switch permet de détecter un contact avec un robot adverse.

Direction

Pixel suit un mur, à une distance fixe, à l'aide d'un capteur laser afin d'aller à une zone d'arrivée.

Code

Permet de contrôler deux capteurs lasers via un bus I2C en, dans un premier temps, attribuant une adresse pour l'I2C différente pour chaque capteur laser. Par la suite, il récupère en permanence la distance en mm que renvoient les capteurs et l'envoie dans le serial suivi du pin xshut associé au capteur (séparer par '|'). Chaque capteur est séparé par une tabulation dans le serial.

#include <Wire.h> #include <VL53L0X.h> // The number of sensors in your system. const uint8_t sensorCount = 2; // The Arduino pin connected to the XSHUT pin of each sensor. const uint8_t xshutPins[sensorCount] = { 4, 5 }; VL53L0X sensors[sensorCount]; void setup() { while (!Serial) {} Serial.begin(9600); Wire.begin(); Wire.setClock(400000); // use 400 kHz I2C // Disable/reset all sensors by driving their XSHUT pins low. for (uint8_t i = 0; i < sensorCount; i++) { pinMode(xshutPins[i], OUTPUT); digitalWrite(xshutPins[i], LOW); } // Enable, initialize, and start each sensor, one by one. for (uint8_t i = 0; i < sensorCount; i++) { // Stop driving this sensor's XSHUT low. This should allow the carrier // board to pull it high. (We do NOT want to drive XSHUT high since it is // not level shifted.) Then wait a bit for the sensor to start up. pinMode(xshutPins[i], INPUT); delay(10); sensors[i].setTimeout(500); if (!sensors[i].init()) { Serial.print("Failed to detect and initialize sensor "); Serial.println(i); while (1); } // Each sensor must have its address changed to a unique value other than // the default of 0x29 (except for the last one, which could be left at // the default). To make it simple, we'll just count up from 0x2A. sensors[i].setAddress(0x2A + i); sensors[i].startContinuous(50); } } void loop() { for (uint8_t i = 0; i < sensorCount; i++) { Serial.print(sensors[i].readRangeSingleMillimeters()); Serial.print(" | "); Serial.print(xshutPins[i]); if (sensors[i].timeoutOccurred()) { Serial.print(" TIMEOUT"); } Serial.print('\t'); } Serial.println(); }

Permet de contrôler les deux moteurs en même temps afin de test si le cablage est valide.

Code moteurs

Permet de détecter l'appuie sur le switch.

Code Switch

Code complet de Pixel qui implémente la détection des adversaires grâce aux capteurs et au switch, le suivi des murs grâce aux capteurs et aux moteurs ainsi que la détection de pots grâce au switch. Le tout afin de s'arrêter dans la zone et au contact d'une plante.

Code Complet
Last modified: 15 October 2025