Table des matières:
- Étape 1: Fabriquer la base et le porte-capuchon à charnière
- Étape 2: faites un bras servo plus long et fixez le servo
- Étape 3: Charger et exécuter l'esquisse
Vidéo: Rouleau à billes automatisé avec Arduino et un servo : 3 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:05
Il s'agit d'un simple petit projet Arduino et servo qui prend environ deux heures. Il utilise un servo pour soulever une extrémité d'un bouchon de pot afin de faire tourner une bille d'acier autour de la circonférence intérieure. Il démarre automatiquement, peut changer de vitesse et peut faire tourner deux (ou plus ?) balles à la fois. Amusant à construire et à travailler. Les paramètres de synchronisation peuvent être joués avec des vitesses probablement encore plus rapides. Quelques capteurs à effet Hall avec une boule magnétique pourraient être utilisés pour en faire une machine plus intelligente capable de déterminer les meilleurs paramètres.
Je dois mentionner que quelqu'un ici à instructables.com a une machine à rouleaux à billes plus sophistiquée:
Les matériaux nécessaires:
Arduino Uno (ou n'importe quel Arduino)
Bouclier servo (facultatif)
Servo 9g
bouchon de pot
bille d'acier
quelques chutes de bois
Étape 1: Fabriquer la base et le porte-capuchon à charnière
La base est juste un morceau de bois sur lequel monter le morceau de bois articulé. Le bois à charnière doit être plus grand qu'un couvercle de bocal que vous utiliserez et avoir suffisamment de place pour les charnières et pour monter le servo.
J'ai utilisé de petites charnières d'avion rc en plastique et je les ai juste collées à chaud sur le bois à charnière et la base.
Étape 2: faites un bras servo plus long et fixez le servo
Pour faire un bras de servo plus long, j'ai juste attaché un morceau de bois de 5 centimètres au bras de servo avec quelques petites vis et écrous. Le bras du servo doit être à 90 degrés sur le servo lorsqu'il est horizontal par rapport à la base.
Je viens de coller à chaud le servo sur le support en bois à charnière, mais j'ai constaté que si vous le laissez fonctionner plus de quelques minutes, le servo chauffera la colle chaude et lâchera le bois. Une meilleure méthode de fixation est donc justifiée.
Étape 3: Charger et exécuter l'esquisse
J'ai attaché mon servo à la broche 7 à l'aide d'un blindage car c'est juste pratique et ils ne coûtent que quelques dollars. Si vous n'avez pas de blindage, fixez le fil de signal du servo à la broche 7 de l'Arduino, le fil rouge à 5v sur l'Arduino et le fil de terre à GND sur l'Arduino. L'arduino doit fournir suffisamment de courant pour faire fonctionner le servo. J'utilise le shield car il est facile d'utiliser une tension externe juste pour le servo.
Voici le croquis. J'ai écrit une routine de contrôleur de vitesse d'asservissement afin de modifier la vitesse du servo car il ne fonctionnera probablement pas bien à pleine vitesse.
Vous pouvez modifier le timingDelay pour obtenir différentes vitesses de roulement de balle. Vous pouvez également modifier le troisième paramètre de la fonction myServo() pour modifier également la vitesse.
/////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// ////////////// // créé par Jim Demello, Shangluo University, 2017
// vous êtes libre d'utiliser, manipuler, faire ce que vous voulez avec ce code, mon nom n'est pas requis
// Cette routine permet d'interpoler n'importe quel nombre de servos, il suffit d'ajouter de nouvelles lignes si le nombre de servos dépasse 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#comprendre
Servo myservo1, myservo2; // créer un objet servo pour contrôler un servo
int servoRead(int servoNumber) {
int servoCurrent;
if (servoNumber== 1) { servoCurrent = myservo1.read(); }
if (servoNumber== 2) { servoCurrent = myservo2.read(); }
retour servoCurrent;
}
void servoWrite(int servoNumber, int offset) {
if (servoNumber==1) { monservo1.write(offset); }
if (servoNumber==2) { monservo2.write(offset); }
}
void myServo(int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
if (servoNum== 1) { curAngle = myservo1.read(); }
if (servoNum== 2) { curAngle = myservo2.read(); }
if (curAngle < newAngle) {
for(int angle=curAngle;angle < newAngle;angle += angleInc) {
if (servoNum == 1) monservo1.write(angle);
if (servoNum == 2) monservo2.write(angle);
delay(incDelay); }
}
else if (curAngle > newAngle) {
for(int angle=curAngle;angle > newAngle;angle -= angleInc) {
if (servoNum == 1) monservo1.write(angle);
if (servoNum == 2) monservo2.write(angle);
delay(incDelay); }
}
}
void interpolate2Servos(int servo1, int servo1Position, int servo2, int servo2Position, int numberSteps, int timeDelay){
int servo1Current, servo2Current;
servo1Current = servoRead(servo1);
servo2Current = servoRead(servo2);
// Serial.print("Servo3Pos et Current "); Serial.print(servo3Position); Serial.print(" "); Serial.println(servo3Current);
// Serial.print("Servo4Pos et Current "); Serial.print(servo4Position); Serial.print(" "); Serial.println(servo4Current);
// Serial.print("Servo5Pos et Current "); Serial.print(servo5Position); Serial.print(" "); Serial.println(servo5Current);
// Serial.print("Servo6Pos et Current "); Serial.print(servo6Position); Serial.print(" "); Serial.println(servo6Current);
// Serial.println(" ");
int cOffset = (servo1Position - servo1Current); cOffset = abs(cOffset)/numberSteps;
int dOffset = (servo2Position - servo2Current); dOffset = abs(dOffset)/nombrePas;
int cOffsetTotal=0, dOffsetTotal=0;
cOffsetTotal = servo1Current;
dOffsetTotal = servo2Current;
pour (entier x=0; x
if (servo1Position > servo1Current) { cOffsetTotal = cOffsetTotal + cOffset; }
else { cOffsetTotal = cOffsetTotal - cOffset; }
if (servo2Position > servo2Current) { dOffsetTotal = dOffsetTotal + dOffset; }
else { dOffsetTotal = dOffsetTotal - dOffset; }
if (servo1Position != servo1Current) servoWrite(servo1, cOffsetTotal);
if (servo2Position != servo2Current) servoWrite(servo2, dOffsetTotal);
// Serial.print(" a et b Offset "); Serial.print(aOffsetTotal); Serial.print(" ");Serial.println(bOffsetTotal); retard(10);
delay(timeDelay);
}// fin pour
//////////////////////////////////////
// prend en charge les restes modulo //
/////////////////////////////////////
if (servo1Position != servo1Current) servoWrite(servo1, servo1Position);
if (servo2Position != servo2Current) servoWrite(servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Ceci est le degré de départ (doit être inférieur au degré de fin)
int degDébut = 0;
// Ce sont les degrés de fin (doit être supérieur au degré de début)
int degEnd = 360;
//C'est le rayon du cercle
rayon int = 8;
void setup()
{
Serial.begin(9600);
retard (100);
monservo1.attach(7); // attache le servo sur la broche 7 à l'objet servo
monservo1.write(90);
monservo2.attach(8); // attache le servo sur la broche 8 à l'objet servo
monservo2.write(90);
retard(1000); // attend que le servo y arrive
interpoler2Servos(1, 90, 2, 90, 10, 60); // neutre
retard(1000);
}
boucle vide() {
Délai de synchronisation = 15; // travaille à 10
Délai d'asservissement = 4;
spin4();
//interpoler2Servos(1, 90, 2, 90, 1, 60); // neutre
//retard(1000);
// sortie(0); //pause programme - appuyez sur reset pour continuer
}
void spin3() {
interpoler2Servos(1, 90, 2, 110, 1, 60); // neutre
delay(timingDelay);
interpoler2Servos(1, 90, 2, 80, 1, 60); // neutre
delay(timingDelay);
}
void spin2() {
//interpoler2Servos(1, 80, 2, 90, 1, 50); // neutre
delay(timingDelay);
interpoler2Servos(1, 80, 2, 80, 1, 60); // neutre
delay(timingDelay);
interpoler2Servos(1, 110, 2, 80, 1, 60); // neutre
delay(timingDelay);
//interpoler2Servos(1, 110, 2, 110, 1, 60); // neutre
delay(timingDelay);
}
void spin1() {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // convertir les degrés en radians
float xPos = 90 + (cos(deg) * rayon);
// xPos = round(xPos);
float yPos = 90 + (sin(deg) * rayon);
// yPos = round(yPos);
Serial.print("degGap=");Serial.print(degGap);Serial.print(" deg=");Serial.print(deg);Serial.print(" cos=");Serial.print(cos(deg));Serial.print(" degStart=");Serial.print(degStart);Serial.print("x=");Serial.print(xPos);Serial.print(" y=");Serial. println(yPos);
// interpoler2Servos(1, xPos, 2, yPos, 1, servoDelay); // neutre
monservo1.write(xPos);
monservo2.write(yPos);
delay(timingDelay);
if (degStart >= degEnd) {
degDébut = 0;
si (degGap > 180)
degGap = 180;
//degGap = 0;
autre
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4() {
for(int i=0; i<=360; i++){
flottant j = 20 * (cos ((3.14 * i)/180)) + 90;
flottant k = 20 * (péché ((3.14 * i)/180)) + 90;
monservo1.write(j);
monservo2.write(k);
Serial.print(j);
Serial.print(", ");
Serial.println(k);
retard (100);
}
}
Conseillé:
Rouleau de dés Mason Jar : 5 étapes (avec photos)
Mason Jar Dice Roller : Voici un excellent projet de week-end à entreprendre, si vous prévoyez de jouer à des jeux de société / dés liés. Pour construire le projet, vous aurez besoin d'un servo à rotation continue, d'un bouton d'arcade et d'une carte arduino nano ou ESP8266, en plus vous aurez besoin d'un p
Rouleau de papier toilette R/C : 10 étapes
Rouleau de papier toilette R/C : 2019 bien avant la panique du papier toilette, je me suis intéressé aux Battlebots et à la création de mon propre bot. aller voir comment ça marche, c'était un challenge mais là
Support de téléphone en rouleau de papier toilette : 7 étapes (avec photos)
Support de téléphone en rouleau de papier toilette : avez-vous besoin d'un endroit pour garder votre téléphone pendant qu'il se charge afin qu'il soit toujours debout ? Un support de téléphone est la réponse à cela. Vous avez quelques rouleaux de papier toilette de rechange qui traînent chez vous et juste un peu de carton ? Si vous le faites, alors vous le ferez
Tri robotique de billes : 3 étapes (avec photos)
Tri robotique de perles : dans ce projet, nous allons construire un robot pour trier les perles Perler par couleur. .Perler perles sont utilisées t
Horloge à billes Trophy utilisant un servomoteur : 18 étapes
Trophy Ball Clock à l'aide d'un servomoteur : l'horloge est disponible dans toutes les formes. Mais je veux faire quelque chose de nouvelle horloge en forme de sphère, où l'aiguille du cadran des minutes est la moitié inférieure de la sphère et l'aiguille des heures est la moitié supérieure de la sphère. Pensez tout d'abord à convertir l'horloge normale. Mais tandis que les minutes déplacent l'heure