Projet ICN4 2016/2017
Rex (discuter | contributions) (→Bouclier de contrôle) |
Rex (discuter | contributions) (→Contrôle par WiFi) |
(15 révisions intermédiaires par 2 utilisateurs sont masquées) |
Version actuelle en date du 17 septembre 2017 à 18:34
Sommaire |
[modifier] Participants
- Noé CHACHIGNOT
- Lilian MARSAL
[modifier] Cahier des charges
Le cahier des charges est assez conséquent :
- monter le chassis du robot ;
- créer un "bouclier" pour Arduino comprenant le contrôleur de moteurs et le sonar ultrasons et des connecteurs pour servo-moteurs ;
- concevoir la pince à base de servo-moteurs ;
- interfacer l'Arduino et la Raspberry Pi configurée en mode point d'accès WiFi ;
- Réaliser l'interface Web de contrôle du robot.
[modifier] Réalisations
[modifier] Châssis du robot
Nous avons monté un châssis pour un "véhicule" capable de se déplacer avec des moto-réducteurs et une roue folle. Nous avons aussi commencé à nous approprier l'environnement de développement de l'Arduino.
Nous avons aussi soudé les fils sur les moteurs.
La photo montre le châssis du robot en cours de montage et un des servo-moteurs qui permettra de réaliser la pince.
[modifier] Bouclier de contrôle
Nous avons appris à nous servir du logiciel Fritzing pour modéliser le montage entre l'Arduino et le contrôleur de moteur. Nous avons ensuite réalisé le montage avec une plaque d'essai. Nous avons écrit un programme pour faire avancer le robot, il marche mais une seule roue fonctionne. Nous avons vérifié le montage pour nous apercevoir qu'un fil état défectueux. Le robot avance maintenant avec ses deux roues.
Nous avons ensuite "routé" le circuit imprimé : c'est à dire qu'il faut placer les composants sur la plaque puis tracer les pistes entre les composants sans qu'elles se touchent. Nous avons utilisé le logiciel Fritzing, le fichier de la carte est disponible : Media:robot_pince.fzz.
Le circuit imprimé a été gravé lors de notre visite à Polytech'Lille. Nous avons ensuite fait les soudures nécessaires, et nous avons ainsi pu raccorder le bouclier à la carte Arduino.
Et nous avons pu coder la carte afin de faire un premier essai. Ce dernier s'est avéré être un succès !
[modifier] Contrôle par WiFi
Après cela nous avons commencé à configurer la Raspberry Pi grâce au tutoriel disponible sur ce même site. En suivant chaque étape nous avons réussi à la transformer la Raspberry Pi en point d'accès WiFi afin de pouvoir s'y connecter depuis un téléphone. Nous avons aussi créer une page Web. Nous avons lié cette page Web à un serveur WebSocket qui réalise une liaison série avec la carte Arduino.
Nous avons réussi cette étape : nous avons désormais la possibilité de contrôler le robot via un site Internet accessible depuis un téléphone connecté à la Raspberry Pi. Le système complet est présenté sur la photo ci-dessous. On voit le robot, l'Arduino avec notre bouclier, la Raspberry Pi et sa batterie.
Une version plus compacte du montage permettant de tester le robot :
[modifier] Les programmes
Le programme permettant de contrôler le robot via les commandes envoyées par la Raspberry Pi par la liaison série est donné ci-dessous :
int pwmB = 3; int bin2 = 4; int bin1 = 5; int stby = 6; int ain1 = 7; int ain2 = 8; int pwmA = 9; int cmd = 0; void setup() { Serial.begin(9600); pinMode(pwmB, OUTPUT); pinMode(bin2, OUTPUT); pinMode(bin1, OUTPUT); pinMode(stby, OUTPUT); pinMode(ain1, OUTPUT); pinMode(ain2, OUTPUT); pinMode(pwmA, OUTPUT); } void loop() { cmd = Serial.read(); if (cmd == 0) { Serial.println("Stop"); digitalWrite(ain2, LOW); digitalWrite(ain1, HIGH); digitalWrite(stby, LOW); digitalWrite(bin1, HIGH); digitalWrite(bin2, LOW); analogWrite(pwmA, 125); analogWrite(pwmB, 125); } if (cmd == 2) { Serial.println("Reculer"); digitalWrite(ain2, HIGH); digitalWrite(ain1, LOW); digitalWrite(stby, HIGH); digitalWrite(bin1, LOW); digitalWrite(bin2, HIGH); analogWrite(pwmA, 125); analogWrite(pwmB, 125); } if (cmd == 1) { Serial.println("Avancer"); digitalWrite(ain2, LOW); digitalWrite(ain1, HIGH); digitalWrite(stby, HIGH); digitalWrite(bin1, HIGH); digitalWrite(bin2, LOW); analogWrite(pwmA, 125); analogWrite(pwmB, 125); } if (cmd == 3) { digitalWrite(ain2, LOW); digitalWrite(ain1, HIGH); digitalWrite(stby, HIGH); digitalWrite(bin1, LOW); digitalWrite(bin2, HIGH); analogWrite(pwmA, 125); analogWrite(pwmB, 125); } if (cmd == 4) { digitalWrite(ain2, HIGH); digitalWrite(ain1, LOW); digitalWrite(stby, HIGH); digitalWrite(bin1, HIGH); digitalWrite(bin2, LOW); analogWrite(pwmA, 125); analogWrite(pwmB, 125); } }
Nous avons modifié la page Web principale par rapport au tutoriel. La voici :
<html> </html>
Le sonar ultrason fonctionne, nous l'avons testé avec le programme qui suit :
int duration; int distance; int sensorpin = 12; void setup() { Serial.begin(9600); } void loop() { pinMode(sensorpin, OUTPUT); digitalWrite(sensorpin, LOW); delayMicroseconds(2); digitalWrite(sensorpin, HIGH); delayMicroseconds(10); digitalWrite(sensorpin, LOW); pinMode(sensorpin, INPUT); duration = pulseIn(sensorpin, HIGH); distance = duration/58; Serial.println(distance); delay(100); }
[modifier] A réaliser
- Il reste juste à intégrer le programme du sonar dans le programme principal ;