Projet ICN2 2016/2017
(→Le programme) |
Rex (discuter | contributions) (→À réaliser) |
Version du 17 septembre 2017 à 19:42
Sommaire |
Participants
- Nassim BOUDANES
Cahier des charges
Pour réaliser ce robot filoguidé les composants suivants vont être utilisés :
- un chassis avec moteurs et chenilles ;
- deux joysticks miniatures pour la commande ;
- un contrôleur de moteurs ;
- un détecteur ultra-son ;
- un Arduino nano pour gérer le tout.
Réalisations
Prise en main
Dans les premières séances un chassis complétement monté est utilisé pour comprendre la programmation de ce type de robot.
La manette
Il a été décidé de construire un circuit imprimé pour la manette, le circuit comprend deux joysticks et une prise RJ12 femelle. Le câble entre la manette et le robot sera constitué d'un câble à 6 conducteurs avec deux prises RJ12 mâles à chaque bout. Le logiciel Fritzing est utilisé pour concevoir le circuit imprimé. Le fichier de ce circuit est disponible Fichier:Manette.fzz.
Le circuit de la manette a été produit par la société Fritzing, les deux exemplaires sont visibles sur la photo.
Pour que la manette soit plus simple d'utilisation, une forme a été créée avec inkscape pour obtenir une plaque de plexiglass adaptée.
La plaque a été découpée à Polytech'Lille mais avec des réglages mal adaptés, d'où les traces de brulé.
Contrôle du chassis
Un contrôleur de moteurs pololu à base de circuit TB6612FNG a ensuite été testé pour faire tourner les moteurs du chassis de test.
À terme ce montage doit être utilisé pour le chassis acheté par l'élève.
Comme il n'est pas pratique de fixer la plaque d'essai au chassis, un second circuit imprimé Media:Robot chenille.fzz a été conçu, le circuit comporte :
- une prise RJ12 femelle pour connecter le câble en provenance de la manette ;
- un emplacement pour l'Arduino nano ;
- un emplacement pour le contrôleur de moteurs pololu ;
- un emplacement pour le détecteur ultrasons.
Le circuit imprimé a été gravé lors de la visite à Polytech'Lille.
Voici une image du rendu actuel de la manette :
Le circuit principal a été fixé sur le chassis, et le programme de fonctionnement a été écrit et est fonctionnel.
Le système complet, robot avec manette connectée par un câble, est lui aussi fonctionnel :
Le problème ensuite rencontré est le suivant : l'alimentation.
En effet, le chassis ne possède que 4 emplacement de piles AA, pour un total de 6V, alors que le voltage nécessaire est de 9V, il manque donc 2 piles.
Il fallut alors créer une plaque contenant un emplacement pour 2 piles, et cette plaque permettra de gérer l'ensemble de l'alimentation du robot.
Le fichier Fritzing est téléchargeable ici : Media:Plaque Alimentation Robot.fzz.
Une fois la plaque installé, le robot est bien alimenté et fonctionne parfaitement.
Le programme
L'Arduino micro a été programmé pour lire les commandes de la manette et commander les moteurs du chassis. Ce programme est donné ci-dessous.
const int SW1_pin = A3; const int SW2_pin = A4; const int X_pin = A5; const int Y_pin = A7; int motor1_pwm = 6; int motor1_in1Pin = 5; int motor1_in2Pin = 4; int motor2_pwm = 10; int motor2_in1Pin = 7; int motor2_in2Pin = 8; int pinSTBY = 3; void setup() { pinMode(motor1_in1Pin, OUTPUT); pinMode(motor1_in2Pin, OUTPUT); pinMode(motor1_pwm, OUTPUT); pinMode(motor2_in1Pin, OUTPUT); pinMode(motor2_in2Pin, OUTPUT); pinMode(motor2_pwm, OUTPUT); pinMode(SW1_pin, INPUT_PULLUP); pinMode(SW2_pin, INPUT_PULLUP); pinMode(pinSTBY, OUTPUT); pinMode(X_pin, INPUT); pinMode(Y_pin, INPUT); Serial.begin(9600); digitalWrite(pinSTBY, HIGH); } void SetMotor1(int speed, boolean reverse) { analogWrite(motor1_pwm, speed); digitalWrite(motor1_in1Pin, ! reverse); digitalWrite(motor1_in2Pin, reverse); } void SetMotor2(int speed, boolean reverse) { analogWrite(motor2_pwm, speed); digitalWrite(motor2_in1Pin, ! reverse); digitalWrite(motor2_in2Pin, reverse); } void loop() { int b1=digitalRead(SW1_pin); int b2=digitalRead(SW2_pin); int X=analogRead(X_pin); int Y=analogRead(Y_pin); Serial.print("Bouton Gauche: "); Serial.print(b2); Serial.print("\n"); Serial.print("Bouton Droit: "); Serial.print(b1); Serial.print("\n"); Serial.print("X-axis: "); Serial.print(analogRead(X_pin)); Serial.print("\n"); Serial.print("Y-axis: "); Serial.println(analogRead(Y_pin)); Serial.print("\n\n"); if (Y < 400) { SetMotor1(210, true); SetMotor2(210, true); } if (Y > 700) { SetMotor1(210, false); SetMotor2(210, false); } if(Y < 750 && Y > 350) { SetMotor1(0, false); SetMotor2(0, false); } if (X < 400) { SetMotor1(150, true); SetMotor2(150, false); } if (X > 700) { SetMotor1(150, false); SetMotor2(150, true ); } }
Amélioration
Pour pouvoir utiliser les 4 piles AA internes du chassis plutôt qu'une pile externe de 9V difficile à fixer, un second circuit imprimé a été réalisé. Ce circuit comprend particulièrement un porte piles 2xAA. Avec un total de 6 piles AA il est possible d'alimenter correctement l'Arduino.
Améliorer le programme et surtout la sensibilité des joysticks pour permettre une meilleure précision.