Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

KITtyBot

Componentes y suministros

SparkFun Arduino Pro Mini 328 - 5V / 16MHz
× 1
Servos (Tower Pro MG996R)
SG-90 o servo de 9 g con el mismo factor de forma
× 12
Adafruit UBEC DC / DC Step-Down (Buck) Convertidor - Salida 5V @ 3A
× 1
Adafruit Mini Remote Control
Por supuesto que puedes usar cualquier control remoto. Esto pasó a funcionar bien junto con la biblioteca IRLib
× 1
Sensor receptor Adafruit IR (infrarrojos) - TSOP38238
× 1
Resistencia 1k ohm
× 1
Resistencia de 2,2 k ohmios
× 1
Batería LiPo de 7,4 V / 500 mAh
Una batería de aproximadamente esta capacidad destinada al pasatiempo de R / C servirá
× 1

Herramientas y máquinas necesarias

Impresora 3D (genérica)
Soldador (genérico)
El diseño de la placa de pruebas podría funcionar sin soldadura

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Introducción

Quería hacer un robot andante de cuatro patas, más al estilo de un "mamífero" que al de una "araña" o un "insecto" normal. La inspiración proviene de los conocidos robots Boston Dynamics y otros robots de investigación de cuatro patas. Hacer un robot como este es bastante desafiante, ya que se vuelca con bastante facilidad debido a un centro de gravedad alto y los pies debajo del cuerpo en lugar de extenderse hacia las esquinas.

El objetivo era construir un robot barato, usando Arduino y micro servos de bajo costo. Esta solución, por supuesto, tiene sus limitaciones. No se puede esperar que sea perfecto, pero ahora he logrado construir algunos robots que pueden realizar el comportamiento de caminar como se describe en esta película. Y hacer lo mejor que se puede con un presupuesto muy pequeño es un desafío en sí mismo y tal vez algo que los chicos en proyectos de investigación fuertemente financiados nunca tengan que enfrentar. :)

Se identificó temprano que se necesitaba un estudio de cinemática invertida (IK) para hacerlo bien. El código tiene un conjunto de ecuaciones para calcular los ángulos de las articulaciones en función de los movimientos deseados del pie. Estos pueden usarse más en funciones para algunas tareas recurrentes como hacer un movimiento corporal (mover los cuatro pies en la dirección opuesta) y hacer un movimiento completo del pie (levantar hacia arriba moviéndose en una dirección específica y bajarlo nuevamente).

El siguiente desafío es realizar estudios de la marcha, es decir, definir cómo debe caminar y girar el robot en términos de movimientos del cuerpo y del pie. Mi robot usa andares estáticamente estables todo el tiempo. Se levanta un pie a la vez y se coloca en una nueva posición. El cuerpo descansa sobre los otros tres pies y para no volcar el centro de gravedad debe permanecer dentro del trípode que forman estos pies. Desarrollé cuatro pasos estándar:adelante, atrás, izquierda y derecha. Esto, a su vez, utiliza las funciones de movimiento del pie y del cuerpo para combinarlas en una secuencia completa.

También diseñé una función para movimientos servo síncronos. En algunos casos, varios servos realizan diferentes golpes durante un tiempo establecido. Esto debe estar sincronizado para lograr movimientos suaves.

Por último, pero no menos importante, utilizo una batería LiPo completamente desprotegida. Esto puede ser arriesgado, el mayor peligro es descargarlo demasiado rápido o demasiado profundo. Se evita el primer peligro siempre que no se produzca un cortocircuito accidental. Una batería normal de R / C tiene una velocidad de descarga de 25 C que en este caso permite 12 A. El UBEC evitará que sea superior a 2 A en cualquier circunstancia. El segundo peligro se evita mediante una función de vigilancia en el software. El voltaje se mide en uno de los pines analógicos y si desciende por debajo de 7,0 V, el robot se detiene.

Y, finalmente, debo enfatizar que las baterías deben cargarse con un cargador especialmente diseñado y manejarse con el cuidado habitual, nunca dejar la carga desatendida. La batería debe separarse del robot (use velcro para montarlo) y cargarse dentro de una bolsa a prueba de fuego o al menos a una distancia segura de los materiales inflamables para que el fuego se pueda contener y no propagar. También guarde sus baterías de forma segura.

Si no está familiarizado con las baterías LiPo, consulte con una tienda de pasatiempos de R / C local y compre las baterías junto con un cargador adecuado y posiblemente una bolsa / contenedor a prueba de fuego para cargar y almacenar. Estos elementos suelen estar llenos de señales de advertencia. Vuelva a leerlos y use su propio buen juicio. :)

Construyendo el robot

Imprima las piezas de acuerdo con los archivos suministrados. Tómese un tiempo para mirar las imágenes y descubrir cómo ensamblar las piezas antes de comenzar. Soy escandinavo, pero esta instrucción está lejos del nivel de una instrucción de IKEA o LEGO :)

Primero se debe ensamblar la articulación de la cadera. Utilicé cinta adhesiva de doble cara de buena calidad para unir las piezas. También se pueden pegar, pero en caso de que sea necesario reparar una pieza rota, son imposibles de desmontar, un servo roto conduce a un reemplazo de la junta completa.

Coloque el soporte del servo en la parte inferior de un servo, en línea con el eje de actuación. Luego une otro servo con su eje perpendicular. La siguiente imagen muestra la articulación de la cadera de la parte delantera derecha y trasera izquierda. Para las otras dos esquinas se deben hacer juntas espejadas.

Antes de continuar, es buena idea asegurarse de que los 12 servos estén centrados. La mejor manera es ensamblar el PCB (o protoboard, ver más abajo), conectar todos los servos y cargar el código. Cuando se inicia el Arduino, todos los servos se centrarán (señal de comando de 90 grados). Será necesario ajustar las posiciones centrales más adelante una vez que el robot esté ensamblado.

El siguiente paso es unir la parte llamada muslo, la "extremidad superior" de un conjunto de pierna. Esta parte tiene huecos que encajan junto con las bocinas del servo que normalmente se entrega junto con el servo. Pega cuernos en los huecos. Asegúrate de usar un pegamento que funcione para unir el material impreso en 3D y el plástico de nailon del que está hecho el cuerno. La pistola de pegamento que utilicé funcionó bien, sin embargo, he tenido cierto éxito con el pegamento CA (algunas marcas funcionan, otras no).

El muslo se une a la articulación de la cadera en un ángulo de 60 grados. Trate de encontrar una posición que se acerque lo más posible a este ángulo cuando los servos estén centrados. Asegure la bocina en la ranura del servo con el tornillo suministrado (a menudo el más corto de los tres que se entregan con un servo). A continuación se muestran dos imágenes de muslo y cadera ensamblados, la bocina del servo no se incluye para mayor claridad (o nunca se modeló por pereza de mi lado).

También se debe ensamblar la parte inferior de la pierna. En este caso, se adjunta un servo a la parte de la pierna mediante tornillos. Hay tornillos suministrados con el servo (a menudo dos tornillos de "madera" más largos).

Ahora las patas se pueden montar en el cuerpo. Hay dos partes que llamé "parachoques" que están en la parte delantera y trasera del robot (como los parachoques de un automóvil). Tienen huecos para servo cuernos al igual que la parte del muslo. Pega cuernos en ellos. A continuación, deslice el soporte del servo de la parte superior de la pierna en el orificio correspondiente del cuerpo. Cuando se hace esto en ambos lados, el conjunto se puede asegurar con el parachoques. Deje que las piernas apunten aproximadamente a 12 grados (un dedo del pie de la pierna de 20 mm). El parachoques se fija al cuerpo mediante el uso de servo tornillos sobrantes (más largos).

Por fin se pueden acoplar las patas inferiores del robot. Deben estar en ángulo en la dirección opuesta al muslo, haciendo que la punta del pie quede justo debajo de la articulación de la cadera de cada pierna.

Con esto se ensambla el robot. Debería verse como en la imagen de abajo. Tenga en cuenta que el diseño del robot ha cambiado ligeramente en comparación con la imagen superior y el clip de película. La carrocería se ha rediseñado para simplificar y hacer un diseño más robusto. El servo soporte y la bocina para la articulación de la cadera han cambiado de lugar. Así que ensambla de acuerdo con las imágenes en 3D y evita que las fotos y los clips de película te confundan.

Por supuesto, los ángulos de cada articulación no pueden estar exactamente en los ángulos requeridos, el número de ranuras en un servo SG-90 es 21, lo que lleva a un ángulo de 17 grados entre dos posiciones. En el mejor de los casos, puede ensamblar el robot dentro de los 10-20 grados, el error restante debe ajustarse cambiando la posición neutral en el código, consulte más abajo en estas instrucciones. Podría ser una buena idea conectar una vez más todos los servos y encender el Arduino y verificar las posiciones neutrales y, si es necesario, hacer algunos ajustes mecánicos (moviendo una articulación una spline o dos). Uno tiende a girar accidentalmente los servos cuando se trabaja con ellos.

Conexión de la electrónica

Hay dos opciones, tener todo en una placa de pruebas o producir una PCB con el archivo Fritzing suministrado. Es posible que tenga algunos problemas con el voltaje en la placa de pruebas si no tiene cuidado al conectar todas las líneas de alimentación y tierra a los servos. En casos extremos, un servo puede consumir 600 mA y las malas conexiones provocan un comportamiento errático. La PCB tiene trazas de cobre muy anchas para las líneas eléctricas, por lo que si suelda correctamente, funcionará bien.

No hay un interruptor de encendido en mi diseño. El robot simplemente se enciende y apaga conectando la batería. Si desea agregar uno, debe ser después del conector de la batería, cortando el suministro de 7.4 V tanto para Arduino como para UBEC.

Versión protoboard

Es posible tener el Pro Mini, los conectores para los servos y la mayoría de los demás componentes electrónicos en una placa de prueba de tamaño medio. Dibujo los esquemas en la imagen de abajo. Asegúrese de utilizar cables de puente cortos, especialmente para la alimentación de 5 V y las conexiones a tierra de los servos. Los servo conectores son simplemente conectores macho extralargos que se cortan en pedazos de tres y se presionan en la placa de pruebas.

Lo que no se muestra en la imagen es la batería y la UBEC. Es posible que haya algo de soldadura para solucionar esto con el fin de conectar un conector a la batería. Desde el conector, se deben conectar dos cables de puente al "riel de alimentación" inferior de la placa para alimentar el Pro Mini (conectado a RAW y GND). También conecte dos resistencias del suministro de 7,4 V al pin A0. 2.2k van desde el lado positivo y 1k desde el suelo. Esto dividirá el voltaje, que es más de 8 V con una batería llena, a un valor por debajo de 5 V que se puede medir con el pin analógico.

El lado de salida del UBEC tiene un conector de servo. Es muy conveniente agregar un cabezal de dos machos en el "riel de potencia" superior. Colóquelo en algún lugar en el medio como en la imagen para asegurarse de que la distribución de energía a los servos sea lo más equilibrada posible.

El receptor de infrarrojos debe estar conectado a A1 y tener un suministro de 5V. Las clavijas del receptor son lo suficientemente largas como para encajarlas en los orificios directamente en la placa de pruebas.

Hay un esquema a continuación y una imagen de cómo se vería la placa de pruebas terminada. Tenga en cuenta que la imagen muestra una versión anterior del robot con diferentes pines y conexiones. Todavía da una idea de cómo conectar cables de puente y conectores de servo.

La placa de pruebas está unida al cuerpo con su parte trasera autoadhesiva. Oriéntelo de modo que la esquina con los servos conectados a los pines D3, D4 y D5 (arriba a la derecha en el esquema) esté en la esquina frontal / izquierda del robot y asegúrese de que la placa esté centrada en el cuerpo (centro correcto de la gravedad es vital).

Versión de PCB

Agregué un archivo de Fritzing a continuación. Esto se puede utilizar para producir un PCB, ya sea solicitándolo al servicio disponible en Fritzing o exportando archivos para la fabricación de PCB. Hice una serie de imágenes para mostrar el montaje a continuación. La PCB está hecha a medida para este robot con conectores para todos los servos, IR y medición de voltaje. Pero también hay conectores rotos de los pines restantes. Estos se pueden usar para conectar otros equipos si desea expandir el robot en el futuro.

Hay pequeñas "almohadillas" en el cuerpo que se ajustan a las esquinas de la PCB. También aquí, la esquina con el conector D3 a D5 debe estar en la parte delantera / izquierda. Hay orificios de montaje en la PCB, pero solo utilicé un trozo de cinta adhesiva de doble cara en el cuerpo para sujetarlo. Permanecerá en su lugar.

Batería

La batería está unida a la parte inferior con velcro. Hay una superficie plana dedicada a esto en el cuerpo. Una batería LiPo de 7,4 V / 500 mAh normalmente tiene un factor de forma de aproximadamente 55x30x10 mm (más o menos unos pocos mm) y encaja bastante bien en este lugar.

Por último, se puede "retocar" el robot atando los cables del servo en bonitos haces para que no se tropiece con ellos mientras camina. También le da al robot una apariencia agradable de ser en realidad una criatura de cuatro patas caminando y no un montón de cables de servo. :)

Finalizando

Antes de usar los robots, las posiciones centrales deben ajustarse con precisión. Esto se hace editando la matriz servodeg0 en el código:

  const float servodeg0 [12] ={90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90};  

Los valores están en orden alfa, beta gamma y delantero / izquierdo, trasero / izquierdo, delantero / derecho, trasero / derecho. Entonces, beta en la parte delantera derecha es la octava posición en la matriz o servodeg0 [7] (la numeración de la matriz comienza con 0).

También hay una matriz llamada servodir que define la dirección de rotación de los servos.

  const int servodir [12] ={+1, +1, -1, -1, -1, +1, -1, -1, -1, +1, +1, +1}; // Dirección de giro (el servo positivo es en sentido antihorario)  

Los servos que utilicé se mueven de 0 a 180 grados en sentido antihorario. He leído en alguna parte que hay servos que van en la otra dirección. En tal caso, el array servodir debe tener sus signos cambiados todo el tiempo.

Encienda el Arduino y verifique los ángulos en todos los servos. Haz medidas y mira que todo se vea recto y simétrico. Las distancias y los ángulos deben coincidir con la imagen siguiente.

Es difícil estar dentro de un milímetro exacto en cada medida, estar dentro de un cm es razonable. Vea qué cambios son necesarios y sume / reste al valor en la matriz servodeg0. Esto definitivamente requerirá algunas iteraciones antes de que todo sea correcto. Terminará con una matriz servodeg0 que se parece a esto (un fragmento de código real de uno de mis robots). Y lo más importante, al final deberías tener un robot que descanse sobre los cuatro pies y se mantenga erguido.

  const float servodeg0 [12] ={80, 95, 100, 100, 110, 90, 100, 115, 100, 80, 80, 100};  

Ahora todo ha terminado. ¡Disfruta!

Tal vez solo algunos consejos en el camino.

Es posible que sea necesario volver a calibrar los servos después de un tiempo. La posición central puede variar con el tiempo. Solo verifique si todo está alineado de vez en cuando.

Si ha hecho todo correctamente y todavía tiene un robot que se volcará, verifique el centro de gravedad. La batería se puede mover para equilibrar esto, algo bueno con el uso de velcro.

Una vez mas. Trate sus baterías LiPo con cuidado.

Más mejoras

Al enviar mi robot aquí, también invito a las personas a refinar el diseño, ya sea agregando más funciones o para hacer un diseño ligeramente diferente (más grande, más pequeño, más fresco). El código debería poder reutilizarse en un robot de un diseño o tamaño ligeramente diferente. El siguiente esquema muestra cuáles son las diferentes constantes en el código. Todas las funciones de IK y de movimiento deberían seguir funcionando si se fabrica un robot con diferentes medidas. También muestra que las coordenadas están definidas, x apunta en la dirección de avance.

Y, por supuesto, sería interesante que la gente añadiera funciones al robot. Hay varios botones en el control remoto que podrían tener funciones (por qué no bailar o hacer alguna otra secuencia de movimientos si se presiona un botón).

Yo personalmente experimento con la entrada analógica. También he trabajado con un modo de andar "girando al caminar" para poder dirigir el robot hasta cierto punto, o para corregir las desviaciones del rumbo con la ayuda de un giroscopio o una brújula. Y también agregué un sensor ultrasónico y comportamiento autónomo (evitando obstáculos). Mi proyecto actual es combinar el control analógico con el autónomo y tenerlo todo controlado desde un smartphone. Esto me ha obligado a aprender muchas cosas nuevas (Blynk, ESP6822, comunicación en serie entre dispositivos, etc.) y espero poder lanzar una versión refinada del robot (o tal vez alguien con mejores habilidades me gane en eso):)

Código

  • El código de KITtyBot2
El código para KITtyBot2 Arduino
Subir al Arduino Mini
 / * Una versión controlada por infrarrojos del KITtyBot 2. Utiliza Arduino Pro Mini y la placa PCB diseñada por mí (Fritzing sketch Kittybotmini.fzz) Se basa en los robots anteriores KITtyBot y KITtyBot mini usando un control remoto IR para controlar el robot Utiliza un control remoto NEC (Adafruit) y las bibliotecas IRLib2, consulte https://github.com/cyborg5/IRLib2. Descargue las bibliotecas IRLib2 del repositorio e instálelas de acuerdo con las instrucciones. Las dimensiones generales son similares a las del KITtyBot original, pero hay un desplazamiento entre el eje gamma y alfa de 12 mm (los servos se montan uno encima del otro) .He ajustado concientemente los pasos para caminar y girar, pero hasta ahora siento que esto ha dado el comportamiento más estable. Creado por Staffan Ek 2017 * / # include  #include  #include  // Primero incluye la base de decodificación # include  // Incluye solo el protocolo que estás using # define MY_PROTOCOL NEC // Define el control IR (NEC) long Previous; IRrecv My_Receiver (A1); // Recibir en el pin A0IRdecodeNEC My_Decoder; const int servonum =12; // La cantidad de servosServo servo [servonum]; // Crear objeto servoconst float servodeg0 [12] ={90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90}; // Posiciones neutrales para los servos ajustadas desde los 90 grados nominales ( se necesita una calibración para ajustar estos valores) float servodegnew [servonum]; // La posición deseada del servo en gradosfloat servodegold [servonum]; // La posición del servo anterior (o actual) // Actualiza los valores siguientes al miniconst KITtyBot int servodir [12] ={+1, +1, -1, -1, -1, +1, -1, -1, -1, +1, +1, +1}; // Dirección de giro (el servo positivo es en sentido antihorario) const float pi =3.1416; const float alfa0 =pi / 6; // La posición neutra de alfa (30 grados) const float beta0 =pi / 3; // La posición neutral de beta (60 grados) const float jointlength =50; // La longitud de una parte de la pierna (ambas tienen la misma longitud) const float width =120; // El ancho (distancia entre pies en la dirección y, con toeout0 agregado) const float leng =120; // La longitud (distancia entre pies en la dirección x) const float distag =12; // Distancia entre alfa y gamma axisconst float toeout0 =20; // La distancia hacia afuera de los pies desde el centro del servo gamma (la distancia que el pie apunta hacia afuera) const float leglength0 =2 * jointlength * cos (alfa0); const float gamma0 =asin (toeout0 / (leglength0 + distag)); // La posición neutra de gamma (debido a la convergencia 20 mm y la distancia 12 mm) const float bodyradius =sqrt (pow ((ancho / 2), 2) + pow ((leng / 2), 2)); // La longitud de la diagonal (distancia desde el centro hasta la esquina del pie) const float phi0 =atan (width / leng); // El ángulo del radio del cuerpo frente al x (apuntando hacia adelante) axisconst float height0 =sqrt (pow (leglength0 + distag, 2) - pow (toeout0, 2)); // La altura normal del robot (si se cambia algún ángulo o distancia, debe actualizarse) float leglength [4] ={sqrt (pow (height0, 2) + pow (toeout0, 2)), sqrt (pow (height0, 2) + pow (toeout0, 2)), sqrt (pow (altura0, 2) + pow (toeout0, 2)), sqrt (pow (altura0, 2) + pow (toeout0, 2))}; // Valores iniciales de leglengthunsigned long time step =500; // Tiempo que toma cada secuencia (cuando se usa servomove ()) int steplength =40; // La longitud de un paso en la dirección x durante la marcha (avance y retroceso) float phi =20; // giro durante el giro (en grados, no radianes!) // Variable para el movimiento de posición flotante [12]; // Posiciones del pie, orden LeftFrontxyz, LeftRearxyz, RightFrontxyz, RightRearxyzfloat stepturn [12] ={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Movimiento del pie en caso de un giro // Las posiciones de los pies se calibran con sus respectivas posiciones iniciales const float jointangle0 [12] ={alfa0, beta0, 0, alfa0, beta0, 0, alfa0, beta0, 0, alfa0, beta0, 0}; float jointangle [12]; // Usando un vector para los ángulos, ordene LeftFrontAlfaBetaGamma etcconst int voltagepin =A0; // El pin asignado para la medición de voltaje en lowvolt =0; // Una variable que detiene el robot si el voltaje baja <7.0 Vint mode =0; // El modo de caminar ordenado actual; configuración de vacío hacia adelante, hacia atrás, izquierda, derecha () {Serial.begin (9600); Serial.println ("KITtyBot mini"); // Estas líneas son solo para verificar la configuración. Puede eliminarse. Serial.print ("Gamma0:"); Serial.println (gamma0); Serial.print ("Leglength0:"); Serial.println (leglength0); Serial.print ("Bodyradius:"); Serial.println (radio del cuerpo); Serial.print ("Phi0:"); Serial.println (phi0); Serial.print ("Alto0:"); Serial.println (altura0); servo [0] .conexión (3); servo [1]. adjuntar (4); servo [2]. adjuntar (5); servo [3]. adjuntar (6); servo [4]. adjuntar (7); servo [5]. adjuntar (8); servo [6]. adjuntar (2); servo [7] .conexión (A3); servo [8]. adjuntar (12); servo [9]. adjuntar (11); servo [10]. adjuntar (10); servo [11]. adjuntar (9); for (int i =0; i  2 * jointlength) lresult =2 * jointlength; // Si leglength es mayor de lo posible, algunas funciones siguientes se vuelven inestables return lresult;} float legright (float dx, float dz, float gamma) {float lresult =sqrt (pow (leglength0 - (dz / cos (gamma0 - gamma)), 2) + pow (dx, 2)); if (lresult> 2 * jointlength) lresult =2 * jointlength; // Si la longitud de la pierna es mayor de lo posible, algunas funciones siguientes se vuelven inestables return lresult;} // Beta, la "articulación de la rodilla" float beta (float leg) {float bresult =2 * acos (leg / (2 * jointlength)); return bresult;} // Alfa, La otra cadera servofloat alfafront (float dx, float beta, float leg) {float aresult =(beta / 2) - asin (dx / leg); return aresult;} float alfarear (float dx, float beta, float leg) {float aresult =(beta / 2) + asin (dx / leg); return aresult;} // Dar posiciones de pie basadas en un ángulo de giro f (en grados). Stepturn se utiliza para hacer que los valores de footpos eviten turnpos (float f) {stepturn [0] =bodyradius * cos (phi0 + (f * pi / 180)) - leng / 2; stepturn [1] =bodyradius * sin (phi0 + (f * pi / 180)) - ancho / 2; stepturn [3] =radio del cuerpo * cos (pi - phi0 + (f * pi / 180)) + leng / 2; stepturn [4] =bodyradius * sin (pi - phi0 + (f * pi / 180)) - ancho / 2; stepturn [6] =radio del cuerpo * cos (2 * pi - phi0 + (f * pi / 180)) - leng / 2; stepturn [7] =radio del cuerpo * sin (2 * pi - phi0 + (f * pi / 180)) + ancho / 2; stepturn [9] =radio del cuerpo * cos (pi + phi0 + (f * pi / 180)) + leng / 2; stepturn [10] =bodyradius * sin (pi + phi0 + (f * pi / 180)) + width / 2;} // Calcula las posiciones de los servos (en grados) basándose en los ángulos de articulación en la función anteriorvoid servopos () {for ( int i =0; i <12; i ++) {servodegnew [i] =servodeg0 [i] + servodir [i] * (jointangle [i] - jointangle0 [i]) * 180 / pi; }} // El servo algoritmo para movimientos controlados y sincronizados. Todos los servos deben alcanzar su posición final al final de un paso de tiempo servomove () {int servotimeold [servonum]; // Variable local para el tiempo de la última posición del servo int servotimenew [servonum]; // Variable local para el tiempo actual cuando el servo se posicionó int SERVOPULSE [servonum]; // Variable local para escribir en el servocontrolador float servodeg [servonum]; // Variable local para la posición actual del servo float servodegspeed [servonum]; // Variable local para el grado de velocidad del servo deseado por milisegundo unsigned long starttime =millis (); // Marca de tiempo el inicio del algoritmo unsigned long timenow =starttime; // Restableciendo el tiempo ahora para (int i =0; i   

Piezas y carcasas personalizadas

The body of the robot. Carries the PCB and battery.At each end of body, like bumper on a car. You should have two of these.Supports the hip joint. Print four of theseThe upper limb of leg. Print four.The lower limb (or foot). Print four.All parts put together. Not for printing.

Esquemas

This is a Fritzing file to allow PCB production. Use it to order from Fritzing themselves or export to a suitable format an manufacture elsewhere. kittybotmini_XKZYltyQVJ.fzz

Proceso de manufactura

  1. Windows 10 IoT Core en Raspberry Pi 2 - Datos del sensor Adafruit
  2. Reloj de pared simple con Adafruit 1/4 60 Ring Neopixel
  3. UnifiedWater v1
  4. Avenger ensamblado:casco de Iron Man y reactor de arco
  5. Cuadro de votación móvil
  6. Intel Arduino 101 BLE Blynk Tank
  7. Arduino101 / tinyTILE BLE:Gafas de sol para combinar
  8. Whac-A-Mole (Edición Botón)
  9. Jukebox moderno
  10. Arduino Apple Watch
  11. Da las gracias a todos los conductores corteses