Inhaltsverzeichnis:
- Schritt 1: Basis und Klappdeckelhalter herstellen
- Schritt 2: Machen Sie einen längeren Servoarm und befestigen Sie das Servo
- Schritt 3: Skizze laden und ausführen
Video: Automatisierte Ballroller mit Arduino und einem Servo - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
Dies ist ein einfaches kleines Arduino- und Servo-Projekt, das etwa zwei Stunden dauert. Es verwendet ein Servo, um ein Ende eines Glasdeckels anzuheben, um eine Stahlkugel um den Innenumfang zu drehen. Es ist selbststartend, kann die Geschwindigkeit ändern und kann zwei (oder mehr?) Bälle gleichzeitig drehen. Es macht Spaß zu bauen und zu arbeiten. Die Timing-Parameter können für wahrscheinlich noch schnellere Geschwindigkeiten gespielt werden. Ein paar Hall-Effekt-Sensoren mit einer magnetischen Kugel könnten verwendet werden, um sie zu einer intelligenteren Maschine zu machen, die die besten Parameter ermitteln kann.
Ich sollte erwähnen, dass jemand hier bei instructables.com eine anspruchsvollere Ballroller-Maschine hat:
Benötigte Materialien:
Arduino Uno (oder ein Arduino)
Servoschild (optional)
9g Servo
Glasdeckel
Stahl Ball
etwas Altholz
Schritt 1: Basis und Klappdeckelhalter herstellen
Die Basis ist nur ein Stück Holz, um das aufklappbare Holzstück zu montieren. Das aufklappbare Holz sollte größer sein als eine Glaskappe, die Sie verwenden werden und genügend Platz für die Scharniere und die Montage des Servos haben.
Ich habe kleine Plastik-RC-Flugzeugscharniere verwendet und sie einfach auf das aufklappbare Holz und die Basis geklebt.
Schritt 2: Machen Sie einen längeren Servoarm und befestigen Sie das Servo
Um einen längeren Servoarm zu machen, habe ich einfach ein 5 Zentimeter großes Stück Holz mit ein paar kleinen Schrauben und Muttern am Servoarm befestigt. Der Servoarm sollte sich in einem Winkel von 90 Grad auf dem Servo befinden, wenn er horizontal zur Basis ist.
Ich habe das Servo nur mit Heißkleber auf den aufklappbaren Holzhalter geklebt, aber ich habe festgestellt, dass das Servo den Heißkleber aufheizt und vom Holz loslässt, wenn Sie es länger als ein paar Minuten laufen lassen. Daher ist eine bessere Befestigungsmethode gewährleistet.
Schritt 3: Skizze laden und ausführen
Ich habe mein Servo mit einem Schild an Pin 7 befestigt, weil es einfach praktisch ist und sie nur ein paar Dollar kosten. Wenn Sie keine Abschirmung haben, befestigen Sie das Servosignalkabel an Pin 7 am Arduino, das rote Kabel an 5V am Arduino und das Massekabel an GND am Arduino. Das Arduino sollte genug Strom liefern, um das Servo zu betreiben. Ich verwende den Schirm, weil es einfach ist, eine externe Spannung nur für das Servo zu verwenden.
Hier ist die Skizze. Ich habe eine Servo-Geschwindigkeitsregler-Routine geschrieben, um die Geschwindigkeit des Servos zu ändern, da es wahrscheinlich bei voller Geschwindigkeit nicht gut funktioniert.
Sie können das TimingDelay ändern, um unterschiedliche Geschwindigkeiten des Ballrollens zu erzielen. Sie können auch den dritten Parameter der myServo()-Funktion ändern, um auch die Geschwindigkeit zu ändern.
//////////////////////////////////////////////// //////////////////////////////////////////////// ////////////// // erstellt von Jim Demello, Shangluo University, 2017
// Sie können diesen Code verwenden, manipulieren, tun, was Sie wollen, mein Name ist nicht erforderlich
// Diese Routine ermöglicht die Interpolation einer beliebigen Anzahl von Servos, fügen Sie einfach neue Zeilen hinzu, wenn die Anzahl der Servos 4. überschreitet
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#enthalten
Servo myservo1, myservo2; // Servo-Objekt erstellen, um ein Servo zu steuern
int servoRead (int servoNummer) {
int servoStrom;
if (servoNumber== 1) { ServoCurrent = myservo1.read (); }
if (servoNumber== 2) { ServoCurrent = myservo2.read (); }
Servostrom zurückgeben;
}
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 (Winkel);
if (servoNum == 2) myservo2.write(Winkel);
Verzögerung (incDelay); }
}
else if (curAngle > newAngle) {
for(int angle=curAngle;angle > newAngle;angle -= angleInc) {
if (servoNum == 1) myservo1.write (Winkel);
if (servoNum == 2) myservo2.write(Winkel);
Verzögerung (incDelay); }
}
}
void interpolate2Servos(int servo1, int servo1Position, int servo2, int servo2Position, int numberSteps, int timeDelay){
int servo1Strom, servo2Strom;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos und Strom"); Serial.print (servo3Position); Serial.print (" "); Serial.println (servo3Current);
// Serial.print ("Servo4Pos und Strom"); Serial.print (servo4Position); Serial.print (" "); Serial.println (servo4Current);
// Serial.print ("Servo5Pos und Strom"); Serial.print (servo5Position); Serial.print (" "); Serial.println (servo5Current);
// Serial.print ("Servo6Pos und Strom"); Serial.print (servo6Position); Serial.print (" "); Serial.println (servo6Current);
// Serial.println (" ");
int cOffset = (servo1Position - servo1Current); cOffset = abs(cOffset)/ZahlSchritte;
int dOffset = (servo2Position - servo2Current); dOffset = abs(dOffset)/ZahlSchritte;
int cOffsetTotal=0, dOffsetTotal=0;
cOffsetTotal = servo1Current;
dOffsetTotal = servo2Current;
für (int 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 und b Offset"); Serial.print (aOffsetTotal); Serial.print (" "); Serial.println (bOffsetTotal); Verzögerung(10);
Verzögerung (Zeitverzögerung);
} // Ende für
//////////////////////////////////////
// auf Modulo-Reste achten //
/////////////////////////////////////
if (servo1Position != servo1Current) servoWrite(servo1, servo1Position);
if (servo2Position != servo2Current) servoWrite(servo2, servo2Position);
}
int TimingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Dies ist der Anfangsgrad (muss kleiner als der Endgrad sein)
int degStart = 0;
// Dies ist der Endgrad (muss größer als der Startgrad sein)
int degEnd = 360;
//Dies ist der Kreisradius
int-Radius = 8;
Void-Setup ()
{
Serial.begin (9600);
Verzögerung (100);
myservo1.attach(7); // befestigt das Servo an Pin 7 an das Servoobjekt
myservo1.write(90);
myservo2.attach(8); // befestigt das Servo an Pin 8 an das Servoobjekt
myservo2.write(90);
Verzögerung (1000); // wartet, bis das Servo dort ankommt
interpolieren2Servos(1, 90, 2, 90, 10, 60); // neutral
Verzögerung (1000);
}
Leere Schleife () {
TimingDelay = 15; // arbeitet bei 10
Servoverzögerung = 4;
spin4();
//interpolieren2Servos(1, 90, 2, 90, 1, 60); // neutral
// Verzögerung (1000);
// beenden(0); // Programm pausieren - Reset drücken, um fortzufahren
}
Leere spin3() {
interpolieren2Servos(1, 90, 2, 110, 1, 60); // neutral
Verzögerung (Zeitverzögerung);
interpolieren2Servos(1, 90, 2, 80, 1, 60); // neutral
Verzögerung (Zeitverzögerung);
}
Leere spin2() {
// interpolieren2Servos (1, 80, 2, 90, 1, 50); // neutral
Verzögerung (Zeitverzögerung);
interpolieren2Servos(1, 80, 2, 80, 1, 60); // neutral
Verzögerung (Zeitverzögerung);
interpolieren2Servos(1, 110, 2, 80, 1, 60); // neutral
Verzögerung (Zeitverzögerung);
//interpolieren2Servos(1, 110, 2, 110, 1, 60); // neutral
Verzögerung (Zeitverzögerung);
}
Leere spin1() {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3,141592 / 180); // Grad in Bogenmaß umrechnen
Float xPos = 90 + (cos(Grad) * Radius);
// xPos = rund(xPos);
float yPos = 90 + (sin(deg) * Radius);
// yPos = rund(yPos);
Serial.print("degGap=");Serial.print(degGap);Serial.print("deg=");Serial.print(Grad);Serial.print("cos=");Serial.print(cos(deg));Serial.print(" degStart=");Serial.print(degStart);Serial.print("x=");Serial.print(xPos);Serial.print(" y=");Seriell. println(yPos);
// interpolate2Servos (1, xPos, 2, yPos, 1, servoDelay); // neutral
myservo1.write(xPos);
myservo2.write(yPos);
Verzögerung (Zeitverzögerung);
if (degStart >= degEnd) {
GradStart = 0;
if (GradGap > 180)
degGap = 180;
//GradGap = 0;
anders
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
Leere spin4() {
for(int i=0; i<=360; i++){
Gleitkomma j = 20 * (cos ((3,14 * i)/180)) + 90;
Schwimmer k = 20 * (sin ((3.14 * i)/180)) + 90;
myservo1.write(j);
myservo2.write(k);
Serial.print (j);
Serial.print (", ");
Serial.println(k);
Verzögerung (100);
}
}
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
So schützen Sie Flash-Laufwerke in Windows 10 mit einem Kennwort – wikiHow
So schützen Sie Flash-Laufwerke in Windows 10 mit einem Kennwort: Mit der zunehmenden Popularität von Cloud-Speichern wie Google Drive, One Drive und Dropbox nimmt die Popularität von Flash-Laufwerken ab. Es gibt jedoch immer noch einige Vorteile von Flash-Laufwerken gegenüber Cloud-Speichern. Einige davon umfassen den Zugriff auf
So koppeln Sie einen Xbox One-Controller mit einem Windows 10-Laptop.: 16 Schritte
So koppeln Sie einen Xbox One Controller mit einem Windows 10 Laptop.: Sie benötigen:Xbox ControllerWindows 10 Laptop
So reparieren Sie einen Wechselrichter mit LCD-Hintergrundbeleuchtung. Mit einem Fujiplus FP-988D. für 0 $.: 9 Schritte
So reparieren Sie einen Wechselrichter mit LCD-Hintergrundbeleuchtung. Mit einem Fujiplus FP-988D. für $ 0.: In diesem anweisbaren werde ich Sie durch die Reparatur eines toten LCD-Hintergrundlicht-Wechselrichters mit den Teilen führen, die Sie haben. Sie können feststellen, ob Sie ein totes Gegenlicht haben, indem Sie zuerst andere Möglichkeiten ausschließen. Monitor auf mehreren Computern überprüfen. Stellen Sie sicher, dass
So kommunizieren Sie mit einem Alien-Artefakt oder . . .: 4 Schritte (mit Bildern)
Wie man mit einem außerirdischen Artefakt kommuniziert oder…: *** Enge Begegnungen der seltsam-minzigen Art. *** Dieses Instructable zeigt Ihnen, wie Sie eine Altoids-Version des Mutterschiffs "Close Encounters" bauen und damit interagieren. Dies kann ein wichtiges Training für den Tag sein, an dem das Bright White Be