Dejaré comenzar diciendo que estaba decepcionado con la cantidad de robots que pude encontrar que implican el uso de un Arduino. Desde que tengo una impresora 3D, siempre quise hacer algo con ella. No soy ingeniero, y me enseñé a mí mismo cómo hacer modelos en un software de CAD 3D (FreeCAD), esto es algo que hago en mi tiempo libre, y nada de lo que he hecho es perfecto. Este robot es un simple bot inmóvil, no se
Todo el objetivo del robot es tener miedo de los humanos y no le gusta que lo miren, así que cuando te acercas al Sensor Sónico, actúa de forma "frenética", agitando sus brazos y moviendo su cabeza fuera del camino.
LISTA DE PIEZAS -
1- Arduino Uno
1- Placa de montaje de tamaño mediano.
1- Sonic Senor.
1- OLED de 0.96 pulgadas.
1- Altavoz Mini de 3 ohmios.
3- Servomotores SG90
Un montón de cables de tamaño pequeño / algunos grandes.
Código para el bot - (actualmente solo hace que los brazos, la cabeza y el sensor sónico funcionen)
----------------------------------------------------------------------------------------------------------
#include <Servo.h>
// Definiciones de pines
#define HEAD_SERVO_PIN 11 // Pin del servo de cabeza.
#define LEFT_ARM_PIN 9 // Pin del servo del brazo izquierdo.
#define RIGHT_ARM_PIN 10 // Pin del servo del brazo derecho.
#define TRIG_PIN 12 // Pin de activación del sensor ultrasónico.
#define ECHO_PIN 13 // Pin de eco del sensor ultrasónico.
// Objetos servo para la cabeza y los brazos.
Cabeza servo; Servo;
Servo brazo izquierdo Servo;
Servo de brazo derecho Servo;
// Variables de distancia
de larga duración;
Int distancia;
// Posiciones de los brazos.
Int armNeutral = 90;
int armUp = 0;
int armDown = 180;
// Variables de escaneo de cabeza
int scanCenter = 90; // Posición centrada de la cabeza.
int currentHeadPos = scanCenter;
// Velocidades de movimiento del brazo.
int velocidad del brazo = 20; // Velocidad de los movimientos del brazo.
void setup() {
// Adjunte los servos a sus pines respectivos.
headServo.attach(HEAD_SERVO_PIN);
leftArmServo.attach(LEFT_ARM_PIN);
rightArmServo.attach(RIGHT_ARM_PIN);
// Inicializa el sensor ultrasónico.
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Comienza con la cabeza y los brazos centrados.
headServo.write(scanCenter); // Centrar la cabeza
leftArmServo.write(armNeutral); // Centrar el brazo izquierdo.
rightArmServo.write(armNeutral); // Centrar el brazo derecho.
delay(1000); // Espera a que los servos se estabilicen.
randomSeed(analogRead(0)); // Sembrar el generador de números aleatorios.
}
void loop() {
// Mide la distancia usando el sensor ultrasónico.
distancia = getDistance();
// Si se detecta un objeto dentro de los 5 cm, mueva tanto la cabeza como los brazos.
si (distancia <= 5) {
moveHeadAndArms("frantic"); // Mover la cabeza y los brazos frenéticamente.
}
// Si se detecta un objeto dentro de los 20 cm, mueva tanto la cabeza como los brazos.
De lo contrario, si la distancia es igual o menor que 20:
moveHeadAndArms("frantic"); // Mover la cabeza y los brazos frenéticamente.
} else {
// Continuar escaneando sin reiniciar.
headServo.write(scanCenter); // Mantén la cabeza centrada.
leftArmServo.write(armNeutral); // Mantén los brazos centrados.
rightArmServo.write(armNeutral); // Mantén los brazos centrados.
}
delay(100); // Retraso para suavizar la operación.
}
int getDistance() {
// Envía un pulso para activar el sensor.
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, ALTO);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Mide la duración del pulso.
duración = pulseIn(ECHO_PIN, ALTO);
// Calcula la distancia en cm (velocidad del sonido = 343 m/s, o 0.0343 cm/us)
int distanciaCm = duración * 0.0343 / 2;
devuelve la distancia en cm;
}
void moveHeadAndArms(String actionType) {
si (tipo de acción == "frenético") {
// Mueve la cabeza y los brazos frenéticamente cuando se detecta un objeto.
int franticMovement = aleatorio(1, 4);
si (franticMovement == 1) {
headServo.write(30); // Mover la cabeza a la izquierda.
leftArmServo.write(armUp); // Brazo izquierdo arriba
rightArmServo.write(armDown); // El brazo derecho hacia abajo.
}
De lo contrario, si (franticMovement == 2) {
headServo.write(150); // Mover la cabeza a la derecha.
leftArmServo.write(armDown); // Brazo izquierdo hacia abajo.
rightArmServo.write(armUp); // Brazo derecho arriba
}
De lo contrario, si (franticMovement == 3) {
headServo.write(180); // Mover la cabeza a una posición completamente girada.
leftArmServo.write(random(0, 180)); // Movimiento aleatorio del brazo izquierdo.
rightArmServo.write(random(0, 180)); // Movimiento aleatorio del brazo derecho.
}
else if (franticMovement == 4) {
headServo.write(60); // Mover la cabeza a una posición moderadamente a la izquierda.
leftArmServo.write(armUp); // Brazo izquierdo arriba
rightArmServo.write(armDown); // El brazo derecho hacia abajo.
}
delay(500); // Retraso corto antes de cambiar las posiciones de los brazos.
// Restablecer los brazos a la posición neutral después del movimiento.
leftArmServo.write(armNeutral);
rightArmServo.write(armNeutral);
delay(200); // Retraso corto antes de la siguiente acción.
}
}
--------------------------------------------------------------------------------------------------------------
La mayoría de las piezas encajan perfectamente juntas, otras no tanto. De nuevo, hago esto por diversión y para aprender. Quería subir la versión "Borrador" hace un tiempo. Mi objetivo es que otras personas con ideas similares puedan participar en este proyecto conmigo y hacer de esto un robot impulsado por la comunidad. Cambiar / actualizar / agregar más piezas / mejorar las funciones / agregar funciones / cambiar el diseño, lo que sea que se
----------------------------------------------------------------------------------------------------------------
Algunas partes requerirán pegamento, pero no muchas. Los servos encajan en su lugar, al igual que el altavoz y el OLED. El único problema es que hice los orificios demasiado perfectos, y tanto el altavoz como el OLED necesitan encajar perfectamente o no cabrán. Las únicas partes que requieren pegamento son los conectores de los pies a las piernas y las piernas al cuerpo.
----------------------------------------------------------------------------------------------------------------
Tags
Source du modèle
