Cabeza humana a cabeza de robot
Componentes y suministros
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 |
Herramientas y máquinas necesarias
|
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Planee hacer algo nuevo pero no tan costoso. Me gusta mucho la robótica. Pero debido al requisito de servos y otras partes, no me gusta hacerlo. Ahora tengo 4 servomotores que cuestan solo 13 $. Ya tengo una placa Link it one y una placa Arduino.
Así que planee hacer una cabeza de robot que se mueva como nuestra cabeza en todos los ejes pero de forma barata. Estudio para diferentes sensores y métodos, pero finalmente encuentro una manera con todos los elementos en mi mano. Muchas cosas que estudio durante este proyecto. Vamos te explico lo que estudio. Menciono lo que aprendo en negrita.
Utilice el sensor de inclinación móvil inteligente para controlar la cabeza
Paso 1:materiales necesarios
Materiales que utilicé
1) Arduino uno.
2) Linkit una placa.
3) 3 servomotores.
4) Descarga de la aplicación gratuita para Android SensoDuino desde aquí.
5) Tarjeta de alimentación regulada (12V, 5V, 3.3V).
6) PCB simple.
7) Conectores macho de PCB
8) Pieza de corte de alimentación de residuos de aluminio.
9) Pistola de pegamento caliente.
10) Adaptador de 12V y 5V.
11) Algunos elementos más para decorar.
Por qué Linkit One Board y Arduino Uno
Si tienes una placa Linkit y un servomotor de 3 V, entonces no necesitas Arduino UNO porque mi servo de 5 V no funciona bien en Vincula un tablero.
Si tienes Arduino uno y módulo Blue tooth, entonces no es necesario Vincula un tablero.
No tengo un protector de diente azul, así que elijo una placa Linkit One y Arduino uno.
Paso 2:Servo Shield propio
1) Haga un protector de servomotor para Arduino. (Tenga cuidado si incluso usa servos de 3v Linkit one tiene solo 2 pines PWM)
2) Hago un escudo como PCB para servomotor.
3) Usando esta placa podemos controlar 6 servomotores de arduino pind (3,5,6,9,10,11).
4) Aquí se utilizan servos de 3 cables. donde la fuente de alimentación proviene de una placa de fuente de alimentación del regulador de 5 V externo.
5) Mientras controla el servo, use el suministro de adaptador para la placa Arduino. Porque la fuente de alimentación USB de la PC causa vibración. Esto causa sobrecalentamiento en el servomotor y daña el Servomotor . (uno de mis servos dañados)
Paso 3:establezca una conexión Linkit
1) Linkit one quiere hablar con arduino para controlar los servos.
2) Para eso, conecte el Tx de la placa Linkit one al Rx de la placa Arduino y ambos Gnd.
3) cada vez que los datos recibidos se envían al Arduino.
Nota:-
Si tienes Arduino bluetooth shield, entonces controlas toda la configuración usando una placa.
Paso 4:Posición del servo
1) Configure todos los servomotores a 90 grados. Para eso, cargue el programa anterior en arduino ..
2) Conecte la potencia del servo y la potencia del arduino a la placa de la fuente de alimentación del regulador en los pines de 5V y 12V.
3) Conecta el conector servo hembra al conector macho si el PCB lo hacemos en los pines digitales Arduino 3,5,6.
3) Conecte el adaptador de 12 V a la placa de alimentación del regulador.
4) Encienda el adaptador.
5) Ahora todos los motores giran 90 grados según el programa.
Ahora desconecte los motores para unirlos sin perturbar el rotor.
La posición del código IDE de Arduino se da como Servoposition.ino
Paso 5:planifica
1) La cabeza gira en 3 ejes x, y, z.
2) Las rotaciones son
a) Guiñada - Ver izquierda y derecha.
b) Pitch -Ver arriba y abajo
c) Roll-Shake lateralmente.
3) Primero use una cinta de doble cara para planificar los Servos.
4) Corte la pieza de partición de aluminio en forma de L para fijar el servo superior al segundo.
5) Conecte la bocina del servomotor según su plan o como se muestra en la imagen
6) Todo el centro de los servos debe estar recto cuando esté en 90 grados.
7) pegue todos los servos y la pieza L de aluminio con cinta de doble cara y verifique que el movimiento no perturbe a otros servos.
Paso 6:construcción
1) Ahora es el momento de arreglarlo permanentemente.
2) Retire la pegatina de doble cara una por una y fíjela de forma permanente con una pistola de pegamento caliente.
3) Tenga cuidado de no dañar los servos.
4) Vuelva a conectar el conector del servo a la placa arduino y encienda el suministro
5) conformar todos de pie derecho como la última imagen.
Paso 7:Detalles de la aplicación de Android
1) Abra SensoDuino en su teléfono Android. Tiene opciones para ver toda la lectura del sensor móvil y poder enviarla a través de blue tooth.
2) Se enumeran todos los sensores más recientes y solo podemos seleccionar qué sensores están disponibles en nuestro teléfono.
3) Vaya al menú y seleccione conectar Bluetooth.
4) La lista muestra los dispositivos Bluetooth disponibles.
5) Seleccione Linkit one bluetooth.
6) Para nuestro proyecto utilizamos sensor de orientación. Marque la primera casilla para activar y la segunda casilla para enviar datos a través de blue tooth.
7) También configuramos el rendimiento de cada sensor seleccionando la opción de rendimiento en el menú. Cambie el intervalo de tiempo para cada lectura.
Paso 8:codificación
1) Aquí hay dos codificaciones, una para Linkit one.
Usando blue tooth obtiene datos del móvil y los envía al Arduino usando el puerto serial
2) Programación de Arduino
Cuando se reciben datos en el puerto serie, concatenan los caracteres como una cadena. Y usando indexof y subcadena, divida un resultado de conjunto completo. En ese conjunto, use nuevamente el indexof y la subcadena para obtener cada posición. De eso usando el mapa en arduino para controlar el servo de 0 a 180 grados. Si usa el escudo de Bluetooth, cambie el programa de acuerdo con el requiremnet.
Cómo funciona el programa
1) Usando el sensor de orientación, el robot gira la cabeza como nosotros.
a) La guiñada es la rotación de 0 a 360 grados según la posición magnética. Para eso usamos 90 a 270 grados donde 180 es el 90 grados para el servo. Así que queremos mirar 180 grados como una cuerda cuando usemos la gorra.
b) El tono es el anverso hacia arriba y hacia abajo. La lectura de su sensor es de -180 a + 180. Usamos -90 a +90.
c) El rollo se agita lateralmente, es de 0 a 90 a 0 a -90 a 0. usamos -90 a 90.
Linkit se proporciona un código en Linkitonehead.ino
El código de Arduino se proporciona en Arduinohead.ino
Paso 9:Ordene las tablas
1) conecte ambas placas de protección a la parte superior de ambos microcontroladores.
2) Péguelo todo con una pegatina de doble cara uno encima del otro.
3) Tenga cuidado de no disparar ninguna terminal.
Paso 10:Sigue con la mano
Ahora enciende todo el suministro y usa el móvil en la mano. Siéntese mirando a 180 grados en la guiñada y use el móvil para controlar los tres servomotores.
Paso 11:arregla una cara
1) Es tiempo de Navidad, así que encontré muchos muñecos de Papá Noel en la tienda.
2) Compre una muñeca y fije la cabeza con un toque doble en el brazo superior del servo.
Paso 12:Prepare un sombrero de control
1) Lleva un sombrero normal.
2) Pegue una pegatina de doble cara en la parte delantera de la gorra como se muestra en la figura.
3) Pegue su teléfono móvil sobre la cinta de doble cara.
Paso 13:prueba del video
Prueba de bajo rendimiento significa frecuencia de actualización del sensor cada 250 milisegundos.
Paso 14:video final
Vea la acción a una velocidad de lectura del sensor de una lectura por 100 milisegundos
Código
- Servoposition.ino
- Linkitonehead.ino
- Arduinohead.ino
Servoposition.ino Arduino
#includeServo izquierdo derecho; Servo arriba abajo; Servo vibración; configuración vacía () {Serial.begin (9600); leftright.attach (3); updown.attach (5); agitar.enganchar (6); leftright.write (90); updown.write (90); agitar.escribir (90); } bucle vacío () {}
Linkitonehead.ino Arduino
#include#include int readval; String inputString =""; String outputString =""; int firstpoint =0; int secondpoint =0; void setup () {if (! LBTServer.begin ((uint8_t *) "Sivam_LIO")) {return; } // Serial.begin (9600); Serial1.begin (9600); } bucle vacío () {uint8_t buf [64]; int bytesRead; if (LBTServer.connected ()) {while (true) {bytesRead =LBTServer.readBytes (buf, 32); si (! bytesRead) romper; inputString =""; para (int j =0; j <32; j ++) {char inChar =char (buf [j]); // agregarlo a inputString:inputString + =inChar; } // Serial.println (inputString); Serial1.println (inputString); // primer punto =inputString.indexOf ('>'); // Serial.println (inputString); // Serial.println (primer punto); // if (primer punto> 0) // {/ / secondpoint =inputString.indexOf ('>', firstpoint + 1); // if (secondpoint> 0) // {// outputString =inputString.substring (firstpoint, secondpoint); // inputString =inputString.substring (secondpoint); // Serial.println (outputString); //} //}} delay (100); } else {LBTServer.accept (5); }}
Arduinohead.ino Arduino
#includeServo leftdown; Servo updown; Servo shake; String inputString =""; boolean stringComplete =false; String teststr2; String sensorid; String sensorrecid; String sensorval1; String sensorval2; String sensorval3; int S1; int S2; int S3; int startchr =0; int endchr =0; int rot1; int rot2; int rot3; void setup () {Serial.begin (9600); // inputString.reserve (200); leftright.attach (3); updown.attach (5); shake.attach (6);} void loop () {} void serialEvent () {while (Serial.available ()) {char inChar =(char) Serial.read (); if (inChar! ='\ n') {inputString + =inChar; }} startchr =inputString.indexOf ('>'); if (startchr> =0) {endchr =inputString.indexOf ('>', startchr + 1); if (endchr> 0) {teststr2 =inputString.substring (startchr, endchr); inputString =inputString.substring (endchr); startchr =teststr2.indexOf (','); sensorid =teststr2.substring (1, startchr); endchr =teststr2.indexOf (',', startchr + 1); sensorrecid =teststr2.substring (startchr + 1, endchr); startchr =endchr; endchr =teststr2.indexOf (',', startchr + 1); sensorval1 =teststr2.substring (startchr + 1, endchr); startchr =endchr; endchr =teststr2.indexOf (',', startchr + 1); sensorval2 =teststr2.substring (startchr + 1, endchr); startchr =endchr; sensorval3 =teststr2.substring (startchr + 1); S1 =sensorval1.toInt (); S2 =sensorval2.toInt (); S3 =sensorval3.toInt (); rot1 =mapa (S1, 90, 270, 180, 0); si (rot1 <0) rot1 =0; si no (rot1> 180) rot1 =180; rot2 =mapa (S2, -90, 90, 0, 180); si (rot2 <0) rot2 =0; si no (rot2> 180) rot2 =180; rot3 =mapa (S3, 90, -90, 0, 180); si (rot3 <0) rot3 =0; si no (rot3> 180) rot3 =180; if (rot1! =0 &rot1! =180) {leftright.write (rot1); } if (rot1! =0 &rot1! =180) {updown.write (rot2); } if (rot1! =0 &rot1! =180) {shake.write (rot3); } retraso (15); // Serial.print ("Sensor -"); // Serial.println (sensorid); // Serial.print ("Sensor Val1 -"); // Serial.println (rot1); // Serial.print (" Sensor Val2 - "); // Serial.println (rot2); // Serial.print ("Sensor Val3 -"); // Serial.println (rot3); }}}
Proceso de manufactura
- Robot de caja de CD Raspberry Pi
- Robot de alarma rodante
- Placa RaspiRobot V2
- Crea un robot Creeper de Minecraft
- Arquímedes:El búho robot con IA
- Abrir CV Robot
- Robot ROS
- DETECCIÓN HUMANA DE ROBOT SONBI USANDO KINECT Y FRAMBUESA PI
- Robot Pi simple
- Capital humano
- Los robots suaves usan la cámara y las sombras para sentir el tacto humano