OiO - una lámpara de escritorio que tiene un alma (5 / 7 paso)

Paso 5: El código, el alma

La parte más interesante, es donde todo el trabajo duro lo pagará. Hemos estado trabajando para cuidar todos los detalles físicos, ahora, ¿qué pasa con los emocionales? : p

Como un comienzo, usted necesitará tener el IDE de Arduino para su sistema operativo, entonces usted necesita instalar manualmente la biblioteca de Adafruit para poder controlar la NeoPixel en caso de que haya decidido utilizar.

Adjunto está el código completo de oiO a partir del momento que estoy escribiendo esto. Definitivamente recibirá más código y educación como ir :) Tenga en cuenta que el código está calibrado para trabajar con los sensores y servos que utiliza, así que tal vez no tiene sentido para usted cuando usted lo intenta. Usted tendrá que pasar por muchas pruebas hasta encontrar los buenos valores (más sobre esto en la siguiente sección)

Introducción

Para mí, la idea detrás de este proyecto es hacer oiO interactiva y autónoma, actuando por su cuenta. debe continuar su función principal, darle luz, pero también tiene su estado de ánimo y estado de ánimo, cambia de postura e interactúa con el usuario.

Pero había un reto para mí, resume en el siguiente puntos

1) Cómo puedo mover 3 servos a la vez o por separado si es necesario

2) como puedo facilitar los movimientos y presentar cierta flexibilización para simular un movimiento fluido. También tener algún control sobre la velocidad de servos para simular diferentes comportamientos.

3) Cómo puedo leer y controlar todos los sensores y servos en paralelo, sabiendo que Arduino nativamente no soporta multitarea.

4) Cómo puedo hacer creíble comportamiento de oiO y evitar respuestas robóticas para entradas análogas, como quiero que responden de manera diferente para la misma entrada (sonido y proximidad), todo este saber que Arduino solo lee el código de arriba a abajo y luego lazos

5) oiO debe tener un sentido del tiempo pasando por un acto según él.

Todo esto se hace con 32KB de memoria dinámica en el Arduino para el código y manteniendo simple!

Después de 2 días de escribir código, creo que he logrado mis metas y respondió a la pregunta cinco de forma aceptable con algunas concesiones.

Podríamos argumentar en qué tan bien lo hice y lo creíble es, pero final del día, el video que vi, es usando sólo el 17% de la memoria de código, y hay mucho espacio para mejoras, que voy a seguir a seguir. pero ya que tienes el código, por favor me escriba cualquier sugerencia o compartir las mejoras.

En siguientes secciones comparto algunos fragmentos de código que sentí necesario discutir, dejo a ustedes que están leyendo el código completo y hacer sentido de ella, también es fuertemente comentó para ayudar a comprender mejor y para mí recordar los detalles 3 meses a partir de ahora:). Espero que encima no lo hice!

Puntos 1 y 2

Mover 3 servos simultáneamente en Arduino no es posible nativamente. así que tuve que escribir una función que toma 3 servos y 3 posiciones de destino para cada uno, además de un factor de aceleración para controlar la velocidad y la facilidad de servos. Los controles de función los servos usando writeMicroseconds() en lugar de write(), como el anterior da un control más preciso debido a su amplia gama de valores, control de los servos ajuste el ancho de pulso PWM exacto en milisegundos, en lugar de este último grados angulares de los usuarios.

La función es:

- target_posX: tiene límites por inicio y fin de posiciones, entre los 600 y 2400 ms., algunos servos trabajan entre 1000 y 2000... por favor, consulte sus límites de servos por pruebas u hoja de datos antes de establecer los valores

-aceleración: es un valor entre 0.0 y 5.0, donde:

-valores entre 0.0 a 1.0 causa los servos para iniciar movimiento rápido pero terminan lento, valores alrededor de cero (ex: 0.05) da mucha respuesta lenta/deseado de alisar, el valor de 0.1 es lo suficientemente rápido como

-valores entre 1.0 y 5.0, no son considera flexibilización factores, ya que un cambio en el comportamiento, provocando servos para mover linealmente comienzan a parar x incrementos según el valor proporcionado. Valor de 2.0 es velocidad de tortuga, mientras que un valor de 5.0 es relativamente rápido.

Para simular el control simultáneo de 3 servos, el control de la función cada servo uno paso a la vez, pero en una fila, es decir, mueve servo1 un paso pequeño, entonces mueve servo 2 un paso pequeño, luego servo3 semejantemente, entonces hace otra vez y agin en un bucle hasta servos todos habían alcanzado sus posiciones de destino. El resultado final, servos todos parecen que han movido al mismo tiempo a sus posiciones de destino.

Puntos 3 y 4

Para hacer frente a esto, el truco era separar la lectura de los sensores valor de realmente actúan sobre los servos y los ojos. Esto me permite crear contadores que cuentan la sonido y consiguiente detección de proximidad, y también medir el tiempo entre las ocurrencias. Estos contadores y sellos de tiempo pueden utilizarse más adelante independientemente en la parte que actúan sobre los servos y los ojos. I prueba para los valores de contadores y ver cuánto tiempo tomó el usuario entre cada detección. Por ejemplo, se trata de cómo oiO puede distinguir entre un usuario aproximándose a él 3 veces de manera rápida, así haciendo oiO enojado con ojos rojos y movimientos espasmódicos o si el usuario se le acercó consecutivamente de manera lenta, por lo que oiO más tranquilo con más color de ojos y movimientos agraciados...

En Resumen, obtener sensores valor primero, luego actuar más tarde. pero puesto que el loop() Arduino está funcionando lo suficientemente rápido, el usuario no notará el retraso.

Punto 5

Desde el Arduino no está conectado a una fuente de tiempo externa, así puede saber el tiempo absoluto, así que oiO es utilizando la sincronización interna de Arduino usando la función millis() que cuenta el número de milisegundos desde el inicio/reinicio de Arduino. El contador vuelca después de aprox. 50 días, más que suficiente para el ciclo de vida de oiO. Esto debería ser suficiente para calcular por ejemplo: 15 minutos ha pasado así que no esta y eso, o ha sido 60 segundos el usuario no interactuar con oiO.

Por ejemplo, se trata de cómo oiO detecta que el usuario no interactuar con él desde 1 hora y por consiguiente comienza dormido, seguido de sueño profundo!

Control de los ojos

He utilizado la biblioteca de Adafruit ya que proporcionan funciones interesantes para controlar la NeoPixels, he agregado algunas funciones como setEyesColor() y dimmer() para tener fácil acceso a ajuste ambos colores de ojos y también controlan la atenuación en un color determinado con una determinada velocidad y dirección.

una: min brillo

b: máximo brillo

r, g, b: son los componentes de color RGB, cada uno puede tener un valor entre 0 y 255

fadeDirection: puede ser 1 = arriba, 2 = abajo, 3 = updown

stepSpeed, retardo en milisegundos entre el color se descolora pasos

Conclusión

Altamente recomiendo leer el código y entenderlo y modificarlo según sea necesario. Todas las variables en la fase de inicialización del código (es decir antes y dentro de la setup()) se debe fijar según sus necesidades.

Artículos Relacionados

Hacer una lámpara de escritorio de bajo costo

Hacer una lámpara de escritorio de bajo costo

cuando juego mi juego favorito durante la noche (véase BF2) su tragedia para tratar de volar un Jet porque no puedo ver el teclado... Por supuesto tengo una lámpara de escritorio pero es una luz spot y perturba el sueño de mi esposa. Así que creo que
Retro Fit una lámpara de escritorio con LED

Retro Fit una lámpara de escritorio con LED

este instructivo detalla los pasos que he realizado para cambiar una lámpara de escritorio ya tuve que usar LEDs en lugar de un tubo de fluoro.Este costo de proyecto me en este momento $49,95 australiano para la tira de 30 LEDs.Ya tenía la lámpara de
Modding de una lámpara de escritorio LED de cama, baño y más allá

Modding de una lámpara de escritorio LED de cama, baño y más allá

se trata de una lámpara de escritorio LED hecho expresamente para cama, baño y más allá. No sé cuánto tiempo he tenido. Sin embargo, ha durado me un buen 2 o 3 años. Sin embargo, tuve problemas con el mecanismo del interruptor. Salen a veces y tengo
Cómo hacer una lámpara de escritorio doble

Cómo hacer una lámpara de escritorio doble

Aquí encontrarás cómo hacer una lámpara de madera, el prosses es bastante fácil y no lleva mucho tiempo, no será muy caro ambos senos lo único que puede costar más es las luces del LED.Y luego podrás hacer una bonita lámpara doble!Paso 1: Reunir los
Lo Dalek, una lámpara de escritorio de steampunk para el mad doctor

Lo Dalek, una lámpara de escritorio de steampunk para el mad doctor

un par de semanas atrás, he encontrado cuatro bulbos vintage y la idea era construir una lámpara especial.Al terminar mi trabajo de que mi hija me dijo, Hey papá parece un Dalek de Dr. Who.  :-)Paso 1: materiales ¿De qué te necesita?Un caso de madera
Brazo robot de una lámpara de escritorio (terciarias de IKEA hack)

Brazo robot de una lámpara de escritorio (terciarias de IKEA hack)

este proyecto responde a una necesidad que tenía: una tercera mano que sostiene una cámara mientras realizo una prueba y toma fotos y vídeos (útiles cuando estás atrapado en el laboratorio por la noche y de repente necesita un fotógrafo).La desventaj
Una lámpara de escritorio

Una lámpara de escritorio

Un par de mont hace que pude tener en mis manos dos de este bulbos muy agradable.Me gusta operan con un voltaje menor porque en normal 230V las bombillas son demasiado brillantes.Estas bombilla de baja tensión de funcionamiento se extenderá la vida e
Convertir un viejo ratón en una lámpara de escritorio LED con USB

Convertir un viejo ratón en una lámpara de escritorio LED con USB

¿Tiene un viejo ratón poner alrededor? Por supuesto que hacer. ¿Necesita más LEDs en tu vida? POR SUPUESTO QUE HACER. Volvamos ratón viejo en una fuente de alimentación USB de algunas luces de LED. Vamos a utilizar algunos Sugru e imanes para hacer e
Lujo hasta una lámpara de escritorio de Ikea

Lujo hasta una lámpara de escritorio de Ikea

así, en primer lugar, esta es mi primera publicación en este sitio maravilloso. No es una cosa de paso a paso, porque no tomar fotos en el camino (lo hice hace algún tiempo).Hice una vieja lámpara de Ikea mira mucho más fresco, en mi humilde opinión,
Construir una lámpara de escritorio de cortina de Metal

Construir una lámpara de escritorio de cortina de Metal

no un instructable pero demasiado bueno para mantener a mí mismo.Ve las fotos, el vídeo. ¡ Voy averiguar.Envíeme por correo electrónico para cualquier duda.
Lámpara de escritorio articulado Low-Tech

Lámpara de escritorio articulado Low-Tech

si tienes tres trozos small-ish de madera, algunas bandas de goma, papel y un foco de luz, entonces usted puede hacer su propia lámpara de escritorio articulada!Lámparas de escritorio articulada son algo complejos objetos mecánicos que requieren de u
Lámpara de escritorio

Lámpara de escritorio

se trata de una lámpara de escritorio que es el gran proyecto para la construcción de sus habilidades. Esta es una actividad de desarrollo de gran habilidad. Se trata de una lámpara que se puede cambiar a casi cualquier otro diseño, incorpora alumini
Collar de la lámpara de escritorio y titular de la pulsera

Collar de la lámpara de escritorio y titular de la pulsera

¿tienes una lámpara de escritorio que se sienta en su escritorio sin usar?  ¿Tienes joyas enredadas que ignoras?  Si es así, ¿has considerado utilizar su lámpara de escritorio y un sostenedor de la joyería?Paso 1: Elementos necesarios: lámpara de esc
Oculto fácil instalación cable de la lámpara de escritorio fluorescente

Oculto fácil instalación cable de la lámpara de escritorio fluorescente

La tarea deHe comprado una lámpara de escritorio fluorescente barato instalar encima de un escritorio. Quería para que no muestre los cables y parece tan limpio como sea posible. Este instructable muestra cómo iba hacer esto fácilmente. Puede encontr