Lassen Sie mich damit beginnen, zu sagen, dass ich enttäuscht war von der Anzahl der Roboter, die ich finden konnte, die die Verwendung eines Arduino beinhalten. Seit ich einen 3D-Drucker besitze, war das etwas, was ich immer tun wollte. Ich bin kein Ingenieur, und ich habe mir selbst beigebracht, Modelle in einer 3D-CAD-Software (FreeCAD) zu erstellen. Das ist etwas, was ich in meiner Freizeit tue
Das gesamte Ziel des Roboters ist, Angst vor Menschen zu haben, und er mag es nicht, von einem angesehen zu werden. Wenn du also in die Nähe des Sonic Sensors kommst, verhält er sich "hektisch", schwenkt seine Arme und bewegt seinen Kopf aus dem Weg.
TEILLISTE -
1- Arduino Uno
1 - Mittelgroßes Brotbrett
1- Sonic Senor
1- OLED 0,96in
1- 3Ohm Mini-Lautsprecher
3- SG90 Servomotoren
Ein Haufen kleiner Drähte / einige große.
Code für den Bot - (er lässt derzeit nur die Arme, den Kopf und den Sonic-Sensor funktionieren)
----------------------------------------------------------------------------------------------------------
#include <Servo.h>
// Pin-Definitionen
#define HEAD_SERVO_PIN 11 // Kopf-Servo-Pin
#define LEFT_ARM_PIN 9 // Pin des Servos für den linken Arm
#define RIGHT_ARM_PIN 10 // Pin des Servos für den rechten Arm
#define TRIG_PIN 12 // Trigger-Pin des Ultraschall-Sensors
#define ECHO_PIN 13 // Echo-Pin des Ultraschall-Sensors
// Servo-Objekte für den Kopf und die Arme
ServokopfServo;
Servo linkerArmServo;
Servo rechter Arm Servo;
// Entfernungsvariablen
lange Dauer;
Int Distanz;
// Armpositionen
int armNeutral = 90;
int armUp = 0;
int armDown = 180;
// Variablen für das Kopfscannen
int scanCenter = 90; // Position des Kopfes in der Mitte
int currentHeadPos = scanCenter;
// Geschwindigkeiten der Armbewegungen
int armSpeed = 20; // Geschwindigkeit der Armbewegungen
void setup() {
// Befestige die Servos an ihren jeweiligen Pins.
headServo.attach(HEAD_SERVO_PIN);
leftArmServo.attach(LEFT_ARM_PIN);
rightArmServo.attach(RIGHT_ARM_PIN);
// Initialisieren Sie den Ultraschallsensor
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Beginne mit zentriertem Kopf und Armen
headServo.write(scanCenter); // Kopf zentrieren
leftArmServo.write(armNeutral); // Zentrieren des linken Arms
rightArmServo.write(armNeutral); // Zentrieren des rechten Arms
delay(1000); // Warte, bis sich die Servos beruhigt haben
randomSeed(analogRead(0)); // Seed des Zufallszahlengenerators
)
void loop() {
// Messen Sie die Entfernung mit dem Ultraschall-Sensor.
Distanz = getDistance();
// Wenn ein Objekt innerhalb von 5 cm erkannt wird, bewegen Sie sowohl den Kopf als auch die Arme.
wenn (Entfernung <= 5) {
moveHeadAndArms("frantic"); // Bewegen Sie Kopf und Arme hektisch
}
// Wenn ein Objekt innerhalb von 20 cm erkannt wird, bewegen Sie sowohl den Kopf als auch die Arme.
else if (distance <= 20) {
moveHeadAndArms("frantic"); // Bewegen Sie Kopf und Arme hektisch
} else {
// Weiteres Scannen ohne zurückzusetzen
headServo.write(scanCenter); // Halte den Kopf zentriert
leftArmServo.write(armNeutral); // Halte die Arme in der Mitte
rightArmServo.write(armNeutral); // Halte die Arme zentriert
}
delay(100); // Verzögerung, um den Betrieb zu glätten
)
// Funktion, um die Entfernung vom Ultraschallsensor zu erhalten
int getDistance() {
// Sende einen Impuls, um den Sensor auszulösen.
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Messen Sie die Dauer des Pulses.
Dauer = pulseIn(ECHO_PIN, HIGH);
// Berechne die Entfernung in cm (Schallgeschwindigkeit = 343m/s, oder 0.0343 cm/us)
int distanceCm = Dauer * 0.0343 / 2;
return distanceCm;
)
// Funktion, um sowohl den Kopf als auch die Arme basierend auf dem Aktionstyp zu bewegen
void moveHeadAndArms(String actionType) {
wenn (Aktionstyp == "frenetisch") {
// Bewegen Sie Kopf und Arme hektisch, wenn ein Objekt erkannt wird.
int franticMovement = random(1, 4);
wenn (franticMovement == 1) {
headServo.write(30); // Bewegen Sie den Kopf nach links
leftArmServo.write(armUp); // Linker Arm hoch
rightArmServo.write(armDown); // Rechter Arm nach unten
}
sonst, wenn (franticMovement == 2) {
headServo.write(150); // Bewegen Sie den Kopf nach rechts
leftArmServo.write(armDown); // Linker Arm nach unten
rightArmServo.write(armUp); // Rechter Arm hoch
}
Andernfalls, wenn (franticMovement == 3) {
headServo.write(180); // Bewegen Sie den Kopf in die vollständig gedrehte Position.
leftArmServo.write(random(0, 180)); // Zufällige Bewegung des linken Arms
rightArmServo.write(random(0, 180)); // Zufällige Bewegung des rechten Arms
}
andernfalls, wenn (franticMovement == 4) {
headServo.write(60); // Bewegen Sie den Kopf in eine moderate linke Position
leftArmServo.write(armUp); // Linker Arm hoch
rightArmServo.write(armDown); // Rechter Arm nach unten
}
delay(500); // Kurze Verzögerung, bevor die Armpositionen geändert werden.
// Setze die Arme nach der Bewegung in die neutrale Position zurück.
leftArmServo.write(armNeutral);
rightArmServo.write(armNeutral);
delay(200); // Kurze Verzögerung vor der nächsten Aktion
}
)
--------------------------------------------------------------------------------------------------------------
Die meisten Teile passen perfekt zusammen, andere nicht so sehr. Ich mache das wiederum zum Spaß und um zu lernen. Ich wollte die "Entwurfs"-Version schon eine Weile hochladen. Mein Ziel ist, dass andere Gleichgesinnte dieses Projekt vielleicht mit mir übernehmen und daraus einen gemeinschaftsbetriebenen Roboter machen. Ändern/Upgraden/Hinzufügen von mehr Teilen/Verbessern der Funktionen/Hinzufügen von
----------------------------------------------------------------------------------------------------------------
Einige Teile werden Klebstoff erfordern, aber nicht viele. Die Servos rutschen an ihren Platz, genauso wie der Lautsprecher und das OLED. Das einzige Problem ist, dass ich die Stellen zu perfekt gemacht habe, und sowohl der Lautsprecher als auch das OLED müssen perfekt eingesetzt werden, sonst passen sie nicht. Die einzigen Teile, die Klebstoff erfordern, sind die Fußverbinder zu den Beinen und die Beine zum Körper.
----------------------------------------------------------------------------------------------------------------
Теги
Источник модели
