Ligne suivant Robot Arduino (6 / 7 étapes)

Étape 6: Code

Le code pour le robot fondamentalement juste prend des lectures du capteur de ligne, puis l’interprète a où il se trouve sur la ligne et raconte la chacun des moteurs rapidités à exécuter. Notre robot a 8 capteur qui signifie si nous supposons que c’est toujours du même côté de la ligne il y a 9 possibles positions 0-8 qui sont représentées par le nombre des capteurs sont sur.

Nous voulons que le robot est centrée sur le bord de la ligne, alors nous allons définir le « point de consigne » à 4, qui est l’espace entre le capteur de 4e et 5e. Travail de contrôleurs PID en prenant certains désiré valeur et où vous êtes et prend la différence des deux qui est le « erreur ». Le contrôleur portion puis convertisseurs de l’erreur dans une sortie utilisable. Dans ce cas, l’erreur est égale à la consigne moins position. L’étape consiste à sélectionner le réglage appel constantes Kp et Kd dans le code. Ce sont également appel la proportionnelle et constantes dérivées et ils seront uniques à votre robot basé sur vos moteurs et votre mesure exacte, bien que nos chiffres, vous devriez obtenir proches. KP est le montant de PWM de différence entre les deux moteurs par unité d’erreur de ligne et est multipliée par l’erreur. Par exemple, si le capteur mesure 0 l’erreur est 4 sens le robot est trop à droit vous souhaiterez peut-être que le moteur gauche pour arrêter un PWM de zéro et le moteur droit à pleine vitesse. Si Kp est 64 64 * erreur est 256 et soustraite de la vitesse du moteur normale (255) gauche viendra à un arrêt complet. Comme le robot se met à tourner l’erreur sera moindre et la différence de moteur sera moins jusqu'à ce que le capteur voit 4 fois et c’est à plein régime.

Cela semble grand droit ? Pas tout à fait étant donné que le robot se balance déjà et il faut quelques arrêt qu'il balancera droite passer le capteur de la 4ème et la 5ème. Pour éviter ce problème nous devons ralentir beaucoup plus vite parce que nous nous rapprochons de la consigne. C’est là qu’intervient Kd à jouer. KD est multiplié par la variation de l’erreur et ajouté à la partie de Kp. Pour cet exemple nous allons choisir là où nous avons laissé par dessus où maintenant le capteur est la lecture 1. L’erreur est donc 3 et la commande proportionnelle est révélateur du moteur gauche à courir à droite à 255 et 63. La variation de l’erreur est -1 (3-4) et notre Kd est de 16 pour un total de -16. Alors ajouter à la partie proportionnelle que vous obtenez une vitesse du moteur sur la roue gauche et 255 de 47 sur la droite. Tous les détails sont visibles dans la fonction pid dans le code et jouent avec le processus de Kimberley une Kd valeurs pour savoir à quelle vitesse vous pouvez faire votre bot.

Heureusement pour vous nous avons fait la partie la plus difficile pour vous. Copiez et collez le code ci-dessous dans l’IDE Arduino et transférez-le sur votre planche et votre ligne robot suivant devrait être prêt à rouler !

 #define NUM_SENSORS 8 #define avgSpeed 255 int leftWheelf=3; int leftWheelr = 5; int rightWheelf=6; int rightWheelr = 9; int setpoint=4, val; unsigned long lastTime=0, timeChange=0; int Sampletime=20, outMax=255, outMin=-255; float error,sumerr,lastError,output,ITerm,DTerm; float Kp=avgSpeed/4, Ki=0, Kd=.25*Kp; int pos; unsigned int sensor[]={A0,A1,A2,A3,A4,A5,A6,A7}; unsigned int sensorValue[NUM_SENSORS]; int threshold = 200; byte incomingByte; int bias=5; void setup() { Serial.begin(115200); pinMode(4,INPUT); } void loop() { // Serial.println(digitalRead(4)); if (digitalRead(4)== true) { unsigned int Wsum=0; int sum=0; for (int i=0;i<NUM_SENSORS;i++) { sensorValue[i]=analogRead(sensor[i]); if (sensorValue[i] < threshold) sensorValue[i]=1; else sensorValue[i]=0; //Serial.print(i); Serial.print(": "); Serial.println(sensorValue[i]); //delay(250); } for (int i=0;i<NUM_SENSORS;i++) { sum=sensorValue[i]+sum; pos=sum; } // Serial.println(pos); //delay(100); timeChange = millis()-lastTime; if (timeChange >= Sampletime){ pid(pos); } } else { if (Serial.available() > 0) { incomingByte = Serial.read(); } if (incomingByte == 'w') { forward(); } else if (incomingByte == 's') { reverse(); } else if (incomingByte == 'd') { rightTurn(); } else if (incomingByte == 'a') { leftTurn(); } else { brake(); } } } void pid (int val) { error=setpoint-val; ITerm+=(Ki*error); DTerm=Kd*(error-lastError)/(Sampletime/1000.0); lastError=error; if(ITerm > outMax) ITerm=outMax; else if (ITerm < outMin) ITerm=outMin; output=Kp*error+ITerm+DTerm; if (output>outMax) output=outMax; else if (output<outMin) output=outMin; lastTime=millis(); Serial.println(val); if (output>0) { analogWrite(leftWheelf,avgSpeed); analogWrite(rightWheelf,avgSpeed); analogWrite(leftWheelr,abs(output)); analogWrite(rightWheelr,0); } else if (output<0) { analogWrite(leftWheelf,avgSpeed); analogWrite(rightWheelf,avgSpeed); analogWrite(leftWheelr,0); analogWrite(rightWheelr,abs(output)); } else { analogWrite(leftWheelf,avgSpeed); analogWrite(rightWheelf,avgSpeed); analogWrite(leftWheelr,0); analogWrite(rightWheelr,0); } } void forward() { analogWrite(leftWheelf, avgSpeed - bias); analogWrite(leftWheelr, 0); analogWrite(rightWheelr, 0); analogWrite(rightWheelf, avgSpeed); } void leftTurn() { analogWrite(leftWheelf,0); analogWrite(leftWheelr, 0); analogWrite(rightWheelr,0); analogWrite(rightWheelf, avgSpeed); } void rightTurn() { analogWrite(leftWheelf,avgSpeed); analogWrite(leftWheelr, 0); analogWrite(rightWheelr,0); analogWrite(rightWheelf, 0); } void reverse() { analogWrite(leftWheelf, 0); analogWrite(leftWheelr, avgSpeed-bias); analogWrite(rightWheelr, avgSpeed); analogWrite(rightWheelf, 0); } void brake() { analogWrite(leftWheelf, 0); analogWrite(leftWheelr, 0); analogWrite(rightWheelr, 0); analogWrite(rightWheelf, 0); } 

Articles Liés

Ligne suivant Robot

Ligne suivant Robot

Il s'agit d'un simple robot Arduino-basé qui utilise des photo-résistances à suivre une ligne noire sur papier blanc. Cela a été fait dans le cadre de mécatronique classe l'Université Rowan dans le semestre de printemps 2015.Étape 1: matériaux(1) Ard
Ligne suivante Robot avec contrôle de base PD (proportionnelle-dérivé)

Ligne suivante Robot avec contrôle de base PD (proportionnelle-dérivé)

Ce Instructable vous montrera comment utiliser contrôle de PD (Proporational-dérivé) dans un suiveur de ligne simple. L'exemple utilise le suiveur de ligne mis au point dans la base Instructable suiveur de ligne :Les composants suivants seront utilis
GESTE contrôlé Arduino basé Rover (Wireless + ligne suivante)

GESTE contrôlé Arduino basé Rover (Wireless + ligne suivante)

Qu'il est capable de ?1. il peut être contrôlé à l'aide de gestes.2. il peut envoyer à distance de l'objet, le niveau de batterie, température, valeurs etc. au gant (LCD).3. peut fonctionner sur angle de 45 degrés.4. paire Tx Rx sur rover et gant (po
Ligne & mur suivant Robot

Ligne & mur suivant Robot

Sesbot 3.0Par : l'équipe Baymax3 roues piste automatisée robot.Description : Voici une instructable pour la construction d'un robot à roues trois dans le but d'achever un piste/circuit fortifié à l'aide d'un capteur à ultrason et un adepte de la lign
Ligne suivante SRK Robot avec pièces imprimées en 3d

Ligne suivante SRK Robot avec pièces imprimées en 3d

Le Robot SRK + ligne suivante est petit frère du Robot MRK + ligne suivante. Il utilise un autre type de Conseil et d'un autre type de moteur. (Le bruit que font les moteurs, c'est ce que j'imagine qu'un scarabée géant sonnerait comme, donc Le Beetle
Ligne suivante MRK Robot avec pièces imprimées en 3d

Ligne suivante MRK Robot avec pièces imprimées en 3d

Avec the MRK + ligne kit, vous pouvez construire votre propre ligne robot qui suit. Les plates-formes sont robustes et métal, mais rectangulaire. Nous avons voulu créer opensource pièces de robots qui ont une conception plus lisse, mais sont encore a
Comment faire une ligne suivant le Robot

Comment faire une ligne suivant le Robot

Bonjour Instructables,Ce ma première fois faire un robot. Dans ce instructable je vais vous montrer comment faire une ligne suivant le robot. Remarque que cela une instructable pour les débutants qui viennent veut faire un robot pour le plaisir d'app
Ben - une lumière suivant Breadboard Arduino Robot

Ben - une lumière suivant Breadboard Arduino Robot

Ben la lumière suivant Breadboard Arduino Robot est le deuxième robot j'ai fait pour aider à enseigner la robotique pour les élèves du secondaire dans une classe que j'enseigne volontairement. Le premier robot a aussi ses propres Instructable qui peu
Robot Arduino Arm mixologue

Robot Arduino Arm mixologue

« Mais attendez, » vous dites, « je pensais que RobotGeek déjà publié une instructable sur l'utilisation d'un bras robot pour livrer des boissons! » À qui nous disons: «Oui, mais pas comme ça." Le dernier projet pourrait à plat une boisson à plusieur
Ligne suiveur Robot - régulation PID - Android Setup

Ligne suiveur Robot - régulation PID - Android Setup

== > Ce projet a obtenu le 2e prix au concours de robotique de 2016.Merci beaucoup pour tous les votes;-)Ce projet vise à construire un Robot suiveur de ligne avec régulation PID. Nous utiliserons également un appareil Android facilement configurer l
Comment faire un Artbot : couleur, télédétection, le dessin des robots Arduino, faire de l’art génératif

Comment faire un Artbot : couleur, télédétection, le dessin des robots Arduino, faire de l’art génératif

Pour les cours Hardware et Physical Computing supervisé par Paul Klomp, dans le cadre de la technologie des médias programma à l'Université de Leiden, nous avons créé deux robots de dessin. Chaque robot a été construit autour d'un Arduino Uno et équi
Barman du bras Robot Arduino

Barman du bras Robot Arduino

Jamais souhaité que vous aviez un robot qui pourrait poupée les coups ? L'avenir de faire la fête est ici avec le barman de bras de Robot ! Servir des boissons dans le style et impressionnez vos invités avec la pression d'un bouton ! Ce projet utilis
SIMPLE ligne suiveur ROBOT (capteur unique)

SIMPLE ligne suiveur ROBOT (capteur unique)

Bonjour les gars dans ce tutoriel permet de voir comment faire un robot suiveur de ligne simple avec capteur infra-rouge unique.Étape 1: INTRODUCTION :Généralement, pour les débutants en robotique, c'est votre premier robot de jouer avec car ce robot
Le Robot Arduino d’Uno

Le Robot Arduino d’Uno

Age : 13Répondre à Uno le robot Arduino alimenté.  Certaines fonctions incluent un nez clignote, antennes, tête tournante, capteur de distance infrarouge double engrenage du moteur boîte de rotation des compteurs et de déplacement.  Uno est réalisé a