Taula de continguts:
- Pas 1: Feu el suport de la base i el tap taponat
- Pas 2: feu més llarg el braç de servo i connecteu el servo
- Pas 3: carregueu i executeu Sketch
Vídeo: Corró de boles automatitzat amb Arduino i un servo: 3 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:11
Es tracta d’un petit projecte Arduino i servo que dura aproximadament dues hores per completar-se. Utilitza un servo per aixecar un extrem d’una tapa de gerra per fer girar una bola d’acer al voltant de la circumferència interior. S'inicia automàticament, pot canviar de velocitat i pot girar dues (o més?) Boles alhora. Diversió per construir i treballar. Els paràmetres de temps es poden jugar amb probablement velocitats encara més ràpides. Es podrien utilitzar uns quants sensors d’efecte de sala amb una bola magnètica per convertir-la en una màquina més intel·ligent que pugui esbrinar els millors paràmetres.
He d’esmentar que algú d’aquí a instructables.com té una màquina de rodets de boles més sofisticada:
Materials necessaris:
Arduino Uno (o qualsevol Arduino)
Escut servo (opcional)
Servo de 9 g
gorra de pot
bola d'acer
una mica de ferralla
Pas 1: Feu el suport de la base i el tap taponat
La base és només un tros de fusta per muntar-hi el tros articulat. La fusta articulada hauria de ser més gran que una tapa de pot que utilitzeu i tenir prou espai per a les frontisses i per muntar el servo.
Vaig utilitzar petites frontisses d'avió RC de plàstic i les vaig encolar a la fusta articulada i a la base.
Pas 2: feu més llarg el braç de servo i connecteu el servo
Per fer un servo braç més llarg, acabo d’adherir un tros de fusta de 5 centímetres al braç servo amb un parell de petits cargols i femelles. El braç del servo ha d’estar a 90 graus del servo quan estigui horitzontal a la base.
Acabo d’enganxar el servo al suport de fusta articulada, però he descobert que, si el deixeu funcionar durant més de pocs minuts, el servo escalfarà la cola calenta i deixarà anar la fusta. Per tant, es garanteix un millor mètode d’adjunt.
Pas 3: carregueu i executeu Sketch
Vaig connectar el servo al pin 7 mitjançant un escut perquè és convenient i només costen uns quants dòlars. Si no teniu cap blindatge, connecteu el cable de senyal del servo al pin 7 de l'Arduino, el cable vermell a 5v a l'Arduino i el cable de terra a GND a l'Arduino. L'arduino ha de proporcionar prou corrent per fer funcionar el servo. Faig servir el blindatge perquè és fàcil utilitzar un voltatge extern només per al servo.
Aquí teniu l’esbós. Vaig escriure una rutina de control de velocitat del servo per alterar la velocitat del servo perquè probablement no funcionarà bé a tota velocitat.
Podeu alterar el timingDelay per obtenir diferents velocitats de rodament de boles. També podeu modificar el tercer paràmetre de la funció myServo () per canviar la velocitat també.
////////////////////////////////////////////////////// ////////////////////////////////////////////////////// ////////////// // creat per Jim Demello, Universitat de Shangluo, 2017
// Ets lliure d'utilitzar, manipular, fer el que vulguis amb aquest codi, el meu nom no és obligatori
// Aquesta rutina permet interpolar qualsevol nombre de servos, només cal afegir línies noves si el nombre de servos supera 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#incloure
Servo myservo1, myservo2; // crear un objecte servo per controlar un servo
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
tornar servoCurrent;
}
void servoWrite (int servoNumber, int offset) {
if (servoNumber == 1) {myservo1.write (offset); }
if (servoNumber == 2) {myservo2.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) myservo1.write (angle);
if (servoNum == 2) myservo2.write (angle);
endarreriment (incDelay); }
}
else if (curAngle> newAngle) {
for (int angle = curAngle; angle> newAngle; angle - = angleInc) {
if (servoNum == 1) myservo1.write (angle);
if (servoNum == 2) myservo2.write (angle);
endarreriment (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 i actual"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos i actual"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos i actual"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos i actual"); 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) / numberSteps;
int cOffsetTotal = 0, dOffsetTotal = 0;
cOffsetTotal = servo1Current;
dOffsetTotal = servo2Current;
per a (int x = 0; x
if (servo1Posició> 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 ("Offset a i b"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); retard (10);
retard (timeDelay);
} // finalitzar per
//////////////////////////////////////
// tenir cura de les restes del mòdul //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Aquest és el grau inicial (ha de ser inferior al grau final)
int degStart = 0;
// Aquest és el grau final (ha de ser superior al grau inicial)
int degEnd = 360;
// Aquest és el radi del cercle
radi int = 8;
configuració nul·la ()
{
Serial.begin (9600);
retard (100);
myservo1.attach (7); // fixa el servo al pin 7 a l'objecte servo
myservo1.write (90);
myservo2.attach (8); // fixa el servo al pin 8 a l'objecte servo
myservo2.write (90);
retard (1000); // espera que arribi el servo
interpolate2Servos (1, 90, 2, 90, 10, 60); // neutre
retard (1000);
}
bucle buit () {
timingDelay = 15; // funciona a les 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutre
// demora (1000);
// sortir (0); // pausa programa: prem restablir per continuar
}
buit spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neutre
endarreriment (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neutre
endarreriment (timingDelay);
}
buit spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutre
endarreriment (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neutre
endarreriment (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neutre
endarreriment (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutre
endarreriment (timingDelay);
}
buit spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // converteix els graus en radians
float xPos = 90 + (cos (deg) * radi);
// xPos = rodó (xPos);
float yPos = 90 + (sin (deg) * radi);
// yPos = rodó (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);
// interpolate2Servos (1, xPos, 2, yPos, 1, servoDelay); // neutre
myservo1.write (xPos);
myservo2.write (yPos);
endarreriment (timingDelay);
if (degStart> = degEnd) {
degStart = 0;
si (degGap> 180)
degGap = 180;
// degGap = 0;
en cas contrari
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart + degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
per a (int i = 0; i <= 360; i ++) {
flotador j = 20 * (cos ((3.14 * i) / 180)) + 90;
flotador k = 20 * (sin ((3.14 * i) / 180)) + 90;
myservo1.write (j);
myservo2.write (k);
Serial.print (j);
Serial.print (",");
Serial.println (k);
retard (100);
}
}
Recomanat:
Pingo: un llançador de boles de ping-pong amb detecció de moviment i alta precisió: 8 passos
Pingo: un llançador de boles de ping-pong amb detecció de moviment i alta precisió: Kevin Nitiema, Esteban Poveda, Anthony Mattacchione, Raphael Kay
Motor d'aigua automatitzat amb indicador de nivell: 6 passos (amb imatges)
Motor d'aigua automatitzat amb indicador de nivell: Hola a tots, benvinguts a un altre instructiu. En aquest projecte aprendrem a crear un controlador de nivell de dipòsit d’aigua completament automàtic amb funció d’indicador de nivell d’aigua mitjançant Arduino Nano. Arduino és el cervell d’aquest projecte. Prendrà aportació de
Boles de boles brillants de bricolatge amb Arduino: 8 passos (amb imatges)
Boles de boles brillants de bricolatge amb Arduino: Hola nois :-) En aquest instructiu vaig a construir un increïble projecte Arduino LED. He utilitzat boles de drac fetes de vidre, enganxo un LED blanc amb cada bola de drac i he programat l'Arduino amb diferents patró com l'efecte respiratori, apilat per c
Model de ferrocarril automatitzat punt a punt amb revestiment del pati: 10 passos (amb imatges)
Model de ferrocarril automatitzat punt a punt amb revestiment de jardí: els microcontroladors Arduino obren grans possibilitats en models de ferrocarril, especialment quan es tracta d’automatització. Aquest projecte és un exemple d’aquesta aplicació. És la continuació d’un dels projectes anteriors. Aquest projecte es compon d'un punt
Trofeu de rellotge de boles amb servo: 18 passos
Trofeu de rellotge de boles amb servo: el rellotge té totes les formes. Però vull fer alguna cosa amb un rellotge de forma d’esfera nova, on l’agulla del minut és la meitat inferior de l’esfera i l’hora és la meitat superior de l’esfera. Primer de tot, penseu a convertir el rellotge normal. Però mentre els minuts es mouen hora