Étape 5: Programme, alors profitez de votre nouveau Robot !
Voici le code en évitant les obstacles pour OmniWorm ! N’hésitez pas à adapter en conséquence.
------------------------------------------------------------------------------------
Ce qu’il faut changer :
------------------------
CODE du SERVO : Deux servos peuvent tourner des directions différentes pour chaque angle
envoyé à elle. Par conséquent, testez chaque servo séparement. Mettez-les la
angle Max avant de monter afin de s’assurer que le robot se replient en
une boîte et que les servos ne poussera pas sépareront les directions. En outre,
vous devrez peut-être utiliser le sixième servo (servoFront2) selon la
poids de votre conception. Le mien est seulement 3lbs totales donc je n’avez pas besoin: P
SERVOS : 313WP servos vont de 20 à 160 degrés sans avoir à éditer le
bibliothèque de servo. 140 degrés est assez bon pour cette application
Cependant. Si vous utilisez différents servos, vous pourriez avoir plus ou moins que
140 degrés. Si le servo est évalué à 180 degrés et vous obtenez un
beaucoup moins, soit utiliser pwm ou essayez de changer la pulsewidths min et max
dans la bibliothèque de servo (servo.h). Pour modifier le fichier, Télécharger Notepad ++
CODE moteur : J’utilise un moitié-broken robuste moteur pilote accidenté
circuits. La broche labled EM est soudée au dos2 sur le bouclier comme le
tige normale changeait pas de direction. Si vous utilisez le même
Bouclier, puis effacer EM et continuer ! Si vous utilisez un pont en h,
alors n’hésitez pas à utiliser les broches 3, 11-13 ou choisir votre propre. Fais attention
ne pas à dominer le circuit bien ! Voici les liens vers des tutoriels.
Le dernier lien est où vous pouvez acheter le bouclier que j’utilise !
http://ITP.nyu.edu/physcomp/Labs/DCMotorControl
http://www.ECS.umass.edu/ECE/M5/Tutorials/H-Bridge_tutorial.html
http://www.societyofrobots.com/schematics_h-bridgedes.shtml
http://www.ruggedcircuits.com/Motor-Control/Rugged-Motor-Driver
MOTEURS : Faites votre portefeuille une grande faveur et ne déchirent namebrand
Servos Parallex exécuter en tant que moteurs à courant continu (sauf s’ils étaient cassés
comme la mienne ont été). Si vous avez pirater eux, Dévissez simplement le dos,
tirer sur les trois fils au large, replacer les vis à tenir la
(certains hotglue pourrait aider), ensemble de boîte de vitesses et Soudez soigneusement un
fil à chaque extrémité du moteur DC seulement. Soudure excès pourrait souche le programme d’installation.
Mais je voudrais simplement acheter robot jaune roues/gearboxs en dehors d’ebay.
Recherche pour « robot volant » et elles sautera vers le haut. Autre possibilité, utilisation
le 360 degrés servos sous... Eh bien... servos ! Vous pouvez ajouter ou
soustraire des angles pour le mouvement avant/arrière.
FONCTIONS : Vous devrez modifier les fonctions (ou jouer avec des fils)
pour qu’il puisse travailler avec votre design. Quelques bons vieux essais et Erreurs
fera l’affaire !
Quelques mots de conseils :
----------------------
Si vous utilisez une alimentation externe pour vos servos, connecter
le terrestre de la terre à l’arduino. En outre, veillez à ne pas à brancher
votre batterie en inverse ou essayez-le... bref il peut facilement tuer
vos servos. En outre, si vous dominer un servo il peut mourir. Début
vos servos off à faible puissance et travaillent votre chemin vers le haut. Ma configuration est
poussant it... >:)
Je suggère que vous trouvez (ou prendre!) votre propre pont en h à contol
vos moteurs. En outre, connecter le sol à l’arduino. Veillez à
pas surcharger votre configuration ! Enfin, une fonction de reset conserve la configuration
de provoquer un court-circuit.
N’oubliez pas que vous devez incliner capteurs si vous voulez arrêter le côté
roues de déplacement lors du dessin courant !
Ne vous sentez pas limité aux broches que j’utilise. Choisissez votre propre numérique
épingles!!!
Mon code est adapté de :
------------------------
http://www.ruggedcircuits.com/Rugged-Motor-Driver
http://Arduino.cc/en/Reference/ServoWrite
http://arduinobasics.blogspot.com/2012/11/arduinobasics-hc-sr04-Ultrasonic-Sensor.html
*/
#include < Servo.h >
Inclure la bibliothèque de Servo, donc il ne faut pas utiliser de PWM
Servo servoFront ;
Servo servoFront2 ;
Servo servoTail ;
Servo servoTail2 ;
Servo servoBack ;
Servo servoBack2 ;
Ceci définit nos noms de servo (servoFront etc..)
Activer les sorties (PWM) (bouclier robuste)
#define EN1_PIN 3
#define EN2_PIN 11
Sorties de direction (bouclier robuste)
#define DIR1_PIN 12
#define DIR2_PIN 13
#define EM 10 //Cause 13 ne veulent pas travailler. Nombre malchanceux ! =/
#define echoPin 8 / / Echo Pin (pour capteur à ultrasons)
#define trigPin 9 / / l’ergot (pour capteur à ultrasons)
int maximumRange = 200 ; Portée maximale nécessaire (peut changer)
int minimumRange = 0 ; Portée minimale nécessaire (peut changer)
longue durée, distance ; Durée utilisée pour calculer la distance
void setup() {}
servoFront.attach(6) ;
servoTail.attach(1) ;
servoTail2.attach(2) ;
servoBack.attach(4) ;
servoBack2.attach(5) ;
pinMode (EN1_PIN, sortie) ;
digitalWrite (EN1_PIN, basse) ;
pinMode (EN2_PIN, sortie) ;
digitalWrite (EN2_PIN, basse) ;
pinMode (DIR1_PIN, sortie) ;
digitalWrite (DIR1_PIN, basse) ;
pinMode (DIR2_PIN, sortie) ;
digitalWrite (DIR2_PIN, basse) ;
pinMode (trigPin, sortie) ;
pinMode (echoPin, entrée) ;
Configuration des entrées/sorties pour moteurs/servos/capteur
Closed() ;
retarder (1000) ;
Maintient le robot plié avant le début de la boucle.
}
void loop() {}
remise à zéro ;
Delay(50) ;
Closed() ;
Scan() ; mesures de distance par l’intermédiaire de capteur à ultrasons
Delay(90) ;
Si (distance < = 20 & & distance > = 0) {//if la distance est inférieure à 15 cm
Opened() ;
Delay(1000) ;
Reset() ;
Delay(50) ;
spin_right() ;
Opened() ;
Delay(1500) ;
Closed() ;
Delay(1000) ;
Scan() ;
Delay(800) ;
Si (distance < = 15 & & distance > = 0) {}
Opened() ;
Delay(1000) ;
Reset() ;
Delay(50) ;
spin_left() ;
Opened() ;
Delay(2200) ;
}
else {}
Reset() ;
Delay(50) ;
inch() ;
inch() ;
inch() ;
inch() ;
inch() ;
}
}
else {//if la distance est supérieure à 15 cm
Reset() ;
Delay(50) ;
Closed() ;
mémoire ;
Delay(1000) ;
}
}
/*
Voici les fonctions qui que nous interpellent dans notre boucle. Il rend la vie beaucoup
plus facile, car vous pouvez contrôler plusieurs broches et servos en même temps !
*/
closed() Sub {}
servoFront.write(20) ;
servoTail.write(20) ;
servoTail2.write(160) ;
servoBack.write(20) ;
servoBack2.write(160) ;
}
void opened() {}
servoFront.write(140) ;
servoTail.write(20) ;
servoTail2.write(160) ;
servoBack.write(100) ;
servoBack2.write(80) ;
}
void inch() {}
Closed() ;
Delay(1000) ;
servoTail.write(160) ;
servoTail2.write(20) ;
Delay(1000) ;
servoTail.write(160) ;
servoTail2.write(20) ;
servoBack.write(160) ;
servoBack2.write(20) ;
Delay(1000) ;
servoTail.write(20) ;
servoTail2.write(160) ;
servoBack.write(160) ;
servoBack2.write(20) ;
Delay(1000) ;
servoFront.write(140) ;
Delay(1000) ;
}
void spin_right() {}
digitalWrite (DIR1_PIN, élevé) ;
analogWrite (EN1_PIN, 255) ;
digitalWrite (DIR2_PIN, élevé) ;
analogWrite (EN2_PIN, 255) ;
digitalWrite (EM, élevé) ;
}
void spin_left() {}
digitalWrite (DIR1_PIN, basse) ;
analogWrite (EN1_PIN, 255) ;
digitalWrite (DIR2_PIN, élevé) ;
analogWrite (EN2_PIN, 255) ;
digitalWrite (EM, faible) ;
}
void backward() {}
digitalWrite (DIR1_PIN, élevé) ;
analogWrite (EN1_PIN, 255) ;
digitalWrite (DIR2_PIN, basse) ;
digitalWrite (EM, élevé) ;
analogWrite (EN2_PIN, 255) ;
}
mémoire Sub {}
digitalWrite (DIR2_PIN, élevé) ;
analogWrite (EN2_PIN, 255) ;
digitalWrite (DIR1_PIN, basse) ;
analogWrite (EN1_PIN, 255) ;
digitalWrite (EM, élevé) ;
}
void reset() {}
analogWrite (EN2_PIN, 0) ;
analogWrite (EN1_PIN, 0) ;
Delay(15) ;
}
scan() Sub {}
digitalWrite (trigPin, basse) ;
delayMicroseconds(2) ;
digitalWrite (trigPin, HIGH) ;
delayMicroseconds(10) ;
digitalWrite (trigPin, basse) ;
durée = pulseIn (echoPin, HIGH) ;
Calculer la distance (en cm) basée sur la vitesse du son.
distance = durée/58,2 ;
Delay(50) ;
}