In diesem Video präsentiere ich ein spannendes Arduino-Projekt, das die Steuerung von mehreren Servos mit analogen Eingängen zeigt. Wir erfassen die Positionen über Potentiometer und speichern diese ab, um sie später automatisch abzuspielen. Dieser Aufbau eignet sich ideal für Robotikanwendungen und Automatisierung.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Inhalt des Videos:
- Projektübersicht: Einführung in die Projektidee und die zu erreichenden Ziele.
- Hardware-Setup: Detaillierte Erklärung der verwendeten Komponenten und des Aufbaus.
- Code-Durchgang: Schritt-für-Schritt-Erklärung des Codes, der die Servos steuert, Positionen erfasst und abspielt.
- Live-Demonstration: Vorführung des Systems, wie es Servopositionen aufzeichnet und automatisch abruft.
Komponenten:
- Arduino Uno
- 4 Servos
- 4 Potentiometer (als analoge Eingänge)
- Jumper-Kabel
- Breadboard
- LEDs (optional zur Anzeige von Positionen)
- Externe Stromversorgung (falls erforderlich)
Code-Highlights:
- Servo-Initialisierung: Festlegen der Anfangspositionen der Servos.
- Positionserfassung: Erfassen und Speichern der Servopositionen über analoge Eingänge.
- Automatische Bewegung: Abspielen der gespeicherten Positionen in einer Schleife.
Ressourcen:
- Code auf GitHub:
-
#include <Servo.h>
int pos[5][3];
Servo servo_0;
Servo servo_1;
Servo servo_2;
Servo servo_3;int rs[10][5];
int no=0;
int b1,b2;void setup()
{
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
servo_0.attach(10);
servo_1.attach(11);
servo_2.attach(12);
servo_3.attach(9);pinMode(13, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);pinMode(6, INPUT);
pinMode(7, INPUT);
}void loop()
{
digitalWrite(13, LOW);
readPos();
delay(25);
b1 = digitalRead(6);
if(b1==1){
b1=0;
delay(500);
while(1){
digitalWrite(13, 1);
readPos();
b2 = digitalRead(7);
if(b2==1){
no++;
for(int i=0;i<=3;i++){
rs[no][i]=pos[i][0];
}
Serial.println(no);
digitalWrite(no, HIGH);
Serial.println(no);
delay(200);
}
b1 = digitalRead(6);
if(b1 == 1 || no>=5) {
digitalWrite(13, 0);
automove();
}
}
}
}void readPos(){
pos[0][0] = map(analogRead(A0), 0, 1023, 0, 179);
pos[1][0] = map(analogRead(A1), 0, 1023, 0, 179);
pos[2][0] = map(analogRead(A2), 0, 1023, 0, 179);
pos[3][0] = map(analogRead(A3), 0, 1023, 0, 179);
if(pos[0][1] != pos[0][0]) {
servo_0.write(pos[0][0]);
pos[0][1] = pos[0][0];
}
if(pos[1][1] != pos[1][0]) {
servo_1.write(pos[1][0]);
pos[1][1] = pos[1][0];
}
if(pos[2][1] != pos[2][0]){
servo_2.write(pos[2][0]);
pos[2][1] = pos[2][0];
}
if(pos[3][1] != pos[3][0]){
servo_3.write(pos[3][0]);
pos[3][1] = pos[3][0];
}
}void automove(){
for(int i=1;i<=5;i++){
digitalWrite(i,LOW);
}
while(1){
for(int i=1;i<=5;i++){
servo_0.write(rs[i][0]);
servo_1.write(rs[i][1]);
servo_2.write(rs[i][2]);
servo_3.write(rs[i][3]);
if( i<=5) digitalWrite(i, HIGH);
delay(2000);
if( i<=5) digitalWrite(i, LOW);
}
}
} - Schaltplan:
Zeitstempel:
- 00:00 - Einführung
- 01:20 - Hardware-Setup
- 03:10 - Code-Erklärung
- 06:30 - Live-Demonstration
- 09:00 - Fazit und Ausblick