Linefollower robot de l’Arduino et indésirable - pensées et code (5 / 5 étapes)

Étape 5: Code Arduino - robot fonctionne

/***
Script de ligne de suiveur robot opération
Bouba
***/

/ * sortie de moteurs broches * /
const int M. = 6 ; Ce moteur broche avant
const int ML = 5 ;  Mâle vers l’avant moteur gauche

/ * entrée sonde broches * /
const int [] sensorPins = {A0, A1, A2} ; droite, Centre, gauche

/ * autres broches d’entrée et de sortie * /
const int ledPin = 13 ; conduit indique si le mode de recherche est sur
const int potPin = A5 ; pour le réglage gauche droite erreur

/ * baies pour le stockage de capteur et calculée données * /
int sensorReadings [3] ; lectures du capteur à droite, Centre, gauche
flotteur sensorValues [3] ; lectures du capteur à droite, Centre, gauche
int potAdjust = 0 ; solde de capteur dont la valeur du potentiomètre de réglage

/ * compteurs, aides etc. * /
int i ; compteur General en boucles for
int unknownCount = 0 ; compteur des États de ligne-inconnu successifs
s int ; valeur de PWM pour Vitesse

/ *** PARAMÈTRES *** /
const int turnThreshold = 15 ; Quelle différence entre gauche et droite sensorreadings commencer lisse tournant (1000 unités échelle formulaire blanc au noir)
const int quickturnThreshold = 20 ; Quelle différence entre gauche et droite sensorreadings commence raide virage
const int indicateThreshold = 2 ; sur quelle lecture pour examiner la ligne connu
const int moveLength = 55 ; Combien de temps un mouvement prenne après vitesse a été acquise (dépend de la suite à trois variables)
et avant le nouveau contrôle de l’état du capteur doit être appelée (en millisecondes)
temps nécessaire pour gagner de la vitesse = [(maxSpeed-startSpeed) / speedStep] (dans les millis) actuel: 9
const int maxSpeed = 160 ; Max valeur PWM pour moteurs
pour mieux partir, nous augmentons la valeur PWM dans le temps :
const int startSpeed = 80 ; PWM pour commencer, 1/2 max par exemple
const int speedStep = 10 ; combien les valeurs PWM à augmenter après chaque 1 milliseconde
const int pauseLength = 140 ; faire une pause entre les mouvements pour une meilleure lecture de capteur
int unknownMax = 25 ; après combien mesures successifs « ligne inconnue » de commencer à rechercher la ligne de routine

/ * CAPTEUR de CORRECTIONS pour le point blanc et « pas d’unité »: droite, Centre, gauche
COPIEZ CES VALEURS DE CALIBRATION PROGRAMME SÉRIE SORTIE * /
const int corrections [3] = {38,38,31} ;
const char unitSteps [3] = {0.06,0.01,0.02} ;
const char betweenReadings [2] = {219.30,233.33} ;

/**/

void setup() {}
/ * moteur broches * /
pinMode (MR, sortie) ;
pinMode (ML, sortie) ;
/ * capteur broches * /
pinMode (sensorPins [0], entrée) ;
pinMode (sensorPins [1], d’entrée) ;
pinMode (sensorPins [2], entrée) ;
pinMode (potPin, entrée) ;

} / / / installation

void loop() {}

readSensors() ;
If
(
sensorValues [0] + sensorValues [1] < 0,1 * betweenReadings [0] ||
sensorValues [1] + sensorValues [2] < 0,1 * betweenReadings [1] ||
sensorValues [0] < indicateThreshold ||
sensorValues [1] < indicateThreshold ||
sensorValues [2] < indicateThreshold
) {
unknownCount ++ ;
}
else {}
unknownCount = 0 ;
}
Si (unknownCount < = unknownMax) {}
rideLine() ;
}
else {}
searchLine() ;
}

} / / / loop

void readSensors() {//sets tableau sensorValues [] aux lectures du capteur avec corrections calculées
pour (i = 0; i < = 2; i ++) {}
sensorReadings [i] = analogRead(sensorPins[i]) ;
sensorValues [i] = (sensorReadings [i] - corrections[i]) / unitSteps [i] ;
}
potAdjust = (analogRead(potPin) - 45) * 10 ;
} / / /readSensors

void goStraight() {}
Augmentez la vitesse progressivement
pour (s = startSpeed; s < = maxSpeed; s = s + speedStep) {}
analogWrite (MR, s) ;
analogWrite (ML, s) ;
Delay(1) ;
}
pleine vitesse
analogWrite (MR, s) ;
analogWrite (ML, s) ;
Delay(moveLength) ;
digitalWrite (MR, faible) ;
digitalWrite (ML, faible) ;
arrêter
Delay(pauseLength) ;
}

void goLeft (int turnspeed) {//turnspeed = 0 -> rotation lisse, sinon laisser infuser tournant
digitalWrite (ML, faible) ;
Augmentez la vitesse progressivement
pour (s = startSpeed; s < = maxSpeed; s = s + speedStep) {}
analogWrite (MR, s) ;
{if(turnspeed==0)}
analogWrite (ML, s * 0,4) ;
}
Delay(1) ;
}
pleine vitesse
analogWrite (MR, s) ;
{if(turnspeed==0)}
analogWrite (ML, s * 0,4) ;
}
Delay(moveLength) ;
digitalWrite (MR, faible) ;
digitalWrite (ML, faible) ;
arrêter
Delay(pauseLength) ;
}

void goRight (int turnspeed) {//turnspeed = 0 -> rotation lisse, sinon laisser infuser tournant
digitalWrite (MR, faible) ;
Augmentez la vitesse progressivement
pour (s = startSpeed; s < = maxSpeed; s = s + speedStep) {}
analogWrite (ML, s) ;
{if(turnspeed==0)}
analogWrite (MR, s * 0,4) ;
}
Delay(1) ;
}
pleine vitesse
analogWrite (ML, s) ;
{if(turnspeed=0)}
analogWrite (MR, s * 0,4) ;
}
Delay(moveLength) ;
digitalWrite (ML, faible) ;
digitalWrite (MR, faible) ;
arrêter
Delay(pauseLength) ;
}

void rideLine() {}
indiquer la différence entre droite et gauche des capteurs, prenant en compte les paramètres de potentiomètre, tourner en conséquence
Si (sensorValues [0] - sensorValues [2] > turnThreshold + potAdjust & & sensorValues [0] - sensorValues [2] < quickturnThreshold + potAdjust) {}
goRight(0) ;
}
ElseIf (sensorValues [0] - sensorValues [2] > quickturnThreshold + potAdjust) {}
goRight(1) ;
}
ElseIf (sensorValues [2] - sensorValues [0] > turnThreshold - potAdjust & & sensorValues [2] - sensorValues [0] < quickturnThreshold - potAdjust) {}
goLeft(0) ;
}
ElseIf (sensorValues [2] - sensorValues [0] > quickturnThreshold - potAdjust) {}
goLeft(1) ;
}
else {}
goStraight() ;
}

} / / /rideLine()

void searchLine() {}
digitalWrite (ledPin, HIGH) ; indiquer le mode de recherche avec LED
int searchVar = 1 ; variable d’assistance pour augmenter le rayon de mouvement de recherche
tout en
(
sensorValues [0] + sensorValues [1] < 0,1 * betweenReadings [0] & &
sensorValues [1] + sensorValues [2] < 0,1 * betweenReadings [1] & &
sensorValues [0] < indicateThreshold & &
sensorValues [1] < indicateThreshold & &
sensorValues [2] < indicateThreshold
) {
Si (searchVar < = 5) {//go droite pendant un certain temps, dans le cas où effectivement ne pas perdu
goStraight() ;
}
else {//rightward mouvement avec une augmentation de rayon en insérant des séquences droites
pour (i = 0; i < 7; i ++) {}
goRight(1) ;
}
pour (i = 0; i < searchVar/5; i ++) {}
goStraight() ;
}
}
searchVar ++ ; indiquer l’État systématique recherche terminée
readSensors() ; obtenir de nouvelles lectures
}
unknownCount = 0 ; réinitialiser le compteur
digitalWrite (ledPin, basse) ; indiquer la fin du mode de recherche

} / / /searchLine()

Articles Liés

Linefollower robot de l’Arduino et indésirable - photos

Linefollower robot de l’Arduino et indésirable - photos

j'ai fait ce cerveau Arduino linefollower robot pour un concours où il n'a pas très bien, a manqué de la voie. Mais c'était le moins cher robot là et j'ai appris tellement de construction, donc j'ai quelques pensées et Arduino code de partager quel q
En utilisant un Robot de dessin Arduino avec heures de tutoriels Code

En utilisant un Robot de dessin Arduino avec heures de tutoriels Code

J'ai créé un Arduino robot pour un atelier de dessin pour aider les adolescentes à s'intéresser à des sujets de souches (voir). Le robot a été conçu pour la tortue-style programmation des commandes telles que forward(distance) et turn(angle) permet d
ARD-e: le robot avec un Arduino comme un cerveau

ARD-e: le robot avec un Arduino comme un cerveau

comment faire pour créer un robot Arduino contrôlée de source ouverte pour moins de 100 $.Si tout va bien après avoir lu ce instructable vous serez en mesure de prendre vos premiers pas dans la robotique. ARD-e a coûté environ 90 $ à 130 $ selon comb
Robo-jardinières, ré-utilisation indésirable de maison de faire

Robo-jardinières, ré-utilisation indésirable de maison de faire

(mise à jour : départ pour mes nouvelles photos de robo-jardinières:)Fatigué des planteurs simples ou sissy ? Vous voulez plus de pots attitude ? Eh bien, c'est votre jour de chance, car instructable d'aujourd'hui est pour faire des jardinières à l'a
Art indésirable qui n’est pas indésirable

Art indésirable qui n’est pas indésirable

Salut, je suis Zack, et cette instructables avoisine les rotation indésirable dans l'art. Donc en gros ce que j'ai fait est soudure et colle des trucs ensemble avoir l'air cool. Vous n'avez pas à faire exactement ce que j'ai fait, vous pouvez faire c
Supprimer les indésirables chansons iTunes de votre ordinateur

Supprimer les indésirables chansons iTunes de votre ordinateur

Hé là Mesdames et Messieurs, c'est mon premier codage instructable, donc s'il vous plaît, en commentant, laissez vos armes à feu à la maison (couteaux est acceptés, cependant).Avec l'avènement des lecteurs mp3, il a été rendu possible pour les gens d
Haut-Cycle courrier indésirable en papier artisanal

Haut-Cycle courrier indésirable en papier artisanal

J'adore envoi cartes faites main et fabrication Etiquettes de cadeaux personnalisés, et je déteste la pile sans cesse croissant de courrier indésirable qui j'ai essayer de pousser sous la table à café avec mon pied sur une base quotidienne. Au sérieu
Gardez les indésirables visiteurs avec une Motion activé arroseur

Gardez les indésirables visiteurs avec une Motion activé arroseur

Les animaux les pensez que votre pelouse est leur toilette personnelle ? Les assassins ninja continuer à essayer de se faufiler dans votre maison ? Gardez ces visiteurs indésirables loin avec un système de gicleurs motion activé. Dès qu'ils entrer da
Comment faire pour débarrasser des ravageurs indésirables

Comment faire pour débarrasser des ravageurs indésirables

il s'agit d'une instructable sur la façon de se débarrasser de ces indésirables bestioles dans votre yard.Étape 1 : Tout ce dont vous avez besoin est une arme puissante et des arachides. Poser les arachides quelque part dans votre yard et attendez de
Comment se débarrasser des indésirables animaux - mise à jour

Comment se débarrasser des indésirables animaux - mise à jour

il s'agit d'une question complexe avec de nombreuses variables. Je vais essayer d'y répondre aussi complètement que possible, donc il pourrait être un peu longue haleine parfois. J'ai l'intention d'essayer au nom de la procédure de telle sorte que vo
Bon marché programmable bras robotique de l’Arduino

Bon marché programmable bras robotique de l’Arduino

C'est censé être un guide pour débutants à la façon de construire un bras robotique de l'Arduino. Son concept est d'être bon marché et facile à construire. Il s'agit d'un prototype d'optimiser mon code, mais il est parfait débuter avec Arduino roboti
Sans fil contrôler un Robot en utilisant Arduino et Modules RF !

Sans fil contrôler un Robot en utilisant Arduino et Modules RF !

/*Edit 05/05/2016Hé les gars, j'ai été occupé avec le Collège et ne pouvait pas répondre aux commments. La plupart de vous tous voulait le code et schémas faits un peu mieux alors j'ai fait les schémas sur Eagle 7.2.0 et téléchargées tout sur Github.
Courrier indésirable Hack

Courrier indésirable Hack

J'ai reçu du courrier indésirable, l'autre jour et il avait une boîte en plastique peu collante collée à un gros morceau de la carte postale du courrier. Soi-disant je pouvais prenez la bande plastique de la boîte et il s'afficherait mon numéro gagna
Comment revenir à des expéditeurs de courrier indésirable

Comment revenir à des expéditeurs de courrier indésirable

dans ce instructable je vais vous montrer quelques méthodes faciles pour le rendre encore plus coûteux pour les entreprises qui ordure publipostages de masse. Si tout le monde était d'utiliser ces méthodes, diffusion indésirable aurait très probablem