Seguimiento de una fuente de luz con un actuador (5 / 6 paso)

Paso 5: Siga desklamp!

OK, así que tal vez es una mejor aplicación de seguimiento un desklamp... :)

Si subes el código que sigue a la Arduino, usted debe poder reproducir los resultados en el video.

/ * Este script mueve un actuador hasta que se logra de entrada analógica máxima. Mientras que la aplicación de ejemplo es una fuente de luz con una célula solar que se adjunta al final del actuador de la pista, podría utilizarse para rastrear la entrada máxima de nada a la LIGHT_SENSOR_PIN. ¿tal vez suena como fuente de seguimiento también? :) * / #define ACTUATOR_AMP_SENSOR_PIN A5 #define ACTUATOR_PWM_PIN 11 #define ACTUATOR_DIR_PIN 12 #define LIGHT_SENSOR_PIN A4 / / velocidad máxima es de 255 - este es el valor que se escribe / / a la ACTUATOR_PWM_PIN. Nota no cambie ni limitar / / detección trabajará no #define ACTUATOR_SPEED 255 / cuando el valor analógico del sensor amp es entre estos, es / / considerado como en reposo (no corriente absorbida). #define ZEROAMP_RANGE_LOW 505 #define ZEROAMP_RANGE_HIGH 520 / / instrucciones para el actuador (el valor se establece a ACTUATOR_DIR_PIN) #define retraer 0 #define extender 1 / / no te muevas si muestra valor de entrada de luz está dentro de / / STILL_TOLERANCE de g_lastInputValue #define STILL_TOLERANCE 2 / / mover el actuador hasta que la caída del máximo es menor que #define SEEK_TOLERANCE 2 / mínimo número de milisegundos de retardo entre toma de muestras el ACS712 / recomienda en fabricante muestra fuente #define SAMPLING_DELAY 1 int g_currentDirection = extender; int g_lastInputValue = 0; limitado a 255 char cadenas void serialPrintf (char const * formato,...) {buffer char [255], args va_list va_start (formato, args); vsprintf (almacenador intermediario, formato, args); va_end(args); Serial.println(buffer); } boolean isActuatorMoving() {int val = analogRead(ACTUATOR_AMP_SENSOR_PIN); / / serialPrintf ("lectura del sensor de Amp: %d", val); volver val < ZEROAMP_RANGE_LOW || val > ZEROAMP_RANGE_HIGH;} void stopActuator() {analogWrite (ACTUATOR_PWM_PIN, 0);} boolean almostEqual (int a, int b, int tolerancia) {volver un > = b - tolerancia & & a < = b + tolerancia;} / / msegundos = opcionalmente avanzar en dirección de números milisegundos y luego parar / / devuelve false si msegundos! = 0 y final de viaje boolean moveActuator (int dirección int msegundos = 0) {serialPrintf ("dirección del actuador de movimiento = %d", dirección); analogWrite (ACTUATOR_PWM_PIN, ACTUATOR_SPEED); digitalWrite (ACTUATOR_DIR_PIN, dirección); if(mSeconds > 0) {delay(mSeconds); boolean stillMoving = isActuatorMoving(); stopActuator(); return stillMoving;} verdaderas;} / / devuelve el número de milisegundos tomada moveActuatorToEnd largo sin signo (dirección int) {startMs largo = millis(); moveActuator(direction); mientras que (isActuatorMoving()) {delay(SAMPLING_DELAY); / ligero retraso entre el ACS712 módulo de muestreo se recomienda} stopActuator(); endMs largo = millis(); volver endMs - startMs;} void changeDirection (int Dirección = -1) {si (Dirección == -1) dirección = g_currentDirection + 1; máscara de bit único - 0 o 1, 0 + 1 en 1 y 1 + 1 se convierte en g_currentDirection 0 = dirección & 1; } / considera el máximo entrada moviéndose a través de toda la gama de movimiento vacío calibrate() {moveActuatorToEnd(EXTEND); / arranca tMaxInput largo totalmente extendido = 0; / / tiempo transcurrido mientras que retraer esa entrada máxima fue alcanzada int maxInput = 0; / / lo que fue la entrada startMs largo = millis(); moveActuator(RETRACT); mientras que (isActuatorMoving()) {int inputValue = analogRead(LIGHT_SENSOR_PIN); si (inputValue > maxInput) {maxInput = inputValue; tMaxInput = millis() - startMs; delay(SAMPLING_DELAY);}} endMs largo = millis(); / / volver al punto en el tiempo cuando a max moveActuator (extensión endMs - startMs - tMaxInput); } / / devuelve false si al final del viaje boolean seekHighInput (int pin, dirección de int, int inputValue) {int nextInputValue = inputValue; int maxInputValue = inputValue, boolean stillMoving, boolean atMax; serialPrintf ("buscando a la entrada en dirección % d. inputValue = %d", dirección, inputValue); moveActuator(direction); hacer {delay(SAMPLING_DELAY); stillMoving = isActuatorMoving(); if (nextInputValue > maxInputValue) maxInputValue = nextInputValue; nextInputValue = analogRead(pin); serialPrintf ("stillMoving = %d nextInputValue = %d", stillMoving, nextInputValue); atMax = almostEqual (nextInputValue maxInputValue, SEEK_TOLERANCE); } mientras que (stillMoving & & atMax); stopActuator(); volver stillMoving; } void seekToLight() {boolean stillMovable; int inputValue = analogRead(LIGHT_SENSOR_PIN); int initialValue = inputValue; si (almostEqual (inputValue, g_lastInputValue, STILL_TOLERANCE)) {vuelta;} stillMovable = seekHighInput (LIGHT_SENSOR_PIN, g_currentDirection, inputValue); inputValue = analogRead(LIGHT_SENSOR_PIN); lessThanAtStart booleano = inputValue < initialValue - STILL_TOLERANCE; si ()
! stillMovable || lessThanAtStart) {changeDirection();} / / si estamos recibiendo menos insumos que al inicio de esta convocatoria, changeDirection / / y volver a max if (lessThanAtStart) {seekHighInput (LIGHT_SENSOR_PIN, g_currentDirection, inputValue);} g_lastInputValue = inputValue; } / / la rutina de instalación se ejecuta una vez al presionar reset: void setup() {/ / inicializar la comunicación serial a 9600 bits por segundo: Serial.begin(9600) pinMode (ACTUATOR_PWM_PIN, salida) pinMode (ACTUATOR_DIR_PIN, salida); pinMode (ACTUATOR_AMP_SENSOR_PIN, entrada); pinMode (LIGHT_SENSOR_PIN, entrada); / / no necesitamos calibrar nada, debe manejar el algoritmo de búsqueda / / variación en los rangos de entradas para el sensor de luz. / / / / la exploración de la gama del movimiento para la entrada más alta de la fuente eso calibrate() / / realiza mayo vienen en mano en altos ambientes de la luz ambiente donde es difícil / / para distinguir una fuente singular. El algoritmo de búsqueda deba ser iterado / a mejor soporte entornos de luz ambiente alta / / / / calibrate(); serialPrintf ("instalación completa"); } / / la rutina del bucle se ejecuta una y otra vez para siempre: void loop() {seekToLight();}

Artículos Relacionados

Revivir un antiguo microscopio: la limpieza apropiada, nueva fuente de luz (con madera) y adaptador de cámara

Revivir un antiguo microscopio: la limpieza apropiada, nueva fuente de luz (con madera) y adaptador de cámara

¿Te gusta la ciencia?Si la respuesta es sí, entonces usted necesita un microscopio. ¿Por qué, usted pregunta? Porque puede tener una idea del mundo invisible lo contrario. Y también puede colocar un Pi de frambuesa y un Ipad (o cualquier otro tipo de
Cómo crear una caja de luz con sensor de distancia y Ardunio

Cómo crear una caja de luz con sensor de distancia y Ardunio

necesitarás:1. hueco caja de sombra1. Ardunio1. creación de un prototipo escudo1. HC-SR04 gama ultrasónica módulo1. N + resistencia1. externa de alimentación (12v 2a)Unas tiras de LEDSe trata de cómo hacer una caja de luz LED que se ilumina como el v
Una mesa de luz con pilas.

Una mesa de luz con pilas.

mesas de luz pueden ser muy útiles en de arte tradicional de animación en 2d que le da la capacidad de reorganizar fácilmente diferentes partes de un bosquejo o los bosquejos múltiples durante las primeras etapas de la obra para una mejor composición
Fuente de agua con sistema de luz y sonido (proyecto EPM Letourneau)

Fuente de agua con sistema de luz y sonido (proyecto EPM Letourneau)

Hola, mi nombre es Namkyoung Lee.Nuestro equipo hizo una fuente de agua con sistema de luz y sonido.Es una parte del proyecto de laboratorio EPM de la Universidad de LeTourneau.Esta fuente de agua es alimentada por batería independiente y tiene 2 uno
¿Fuente de luz de espectro

¿Fuente de luz de espectro

necesita fuentes de luz monocromáticas?  Notar el hecho de que muchos LEDs tienen espectros muy estrechos, que quería hacer una fuente de luz multi-narrow-espectros para diversos fines científicos como para especímenes botánicos bajo el microscopio. 
Convertir una pantalla de 22" roto en una caja de luz

Convertir una pantalla de 22" roto en una caja de luz

¿Tienes en casa una pantalla rota? Necesidad de una nueva luz?!Reutilizar la retroiluminación de la pantalla rota!Tuve un Samsung 22" panel, LCD estaba roto, así que decidí transformarlo en una fuente de luz.Primeros pasos son simples: abrir la panta
Construcción de una antorcha (Olímpico) (con fuego simulado)

Construcción de una antorcha (Olímpico) (con fuego simulado)

en este instructable voy a mostrar cómo construir una antorcha (Olímpico) con un fuego simulado sólo con materiales domésticos.Nuestra división de Atletismo participará en un espectáculo (el 50 aniversario de nuestro club principal) la próxima semana
Fuente de luz remota usando el sensor de luz

Fuente de luz remota usando el sensor de luz

En este instructable le demostraré cómo hice una fuente de luz que será accionada por un sensor de luz a través de un módulo de comunicación de 2,4 GHz lo que le permite mover el sensor de luz sin que está conectado a un cable.Cuáles fueron mis lucha
Cómo pintura de luz con un IPhone

Cómo pintura de luz con un IPhone

Aquí es un how-to post para alguien que no está seguro acerca de comprar una costosa cámara réflex digital, pero aún quiere experimentar con la luz-pintura y fotografía nocturna.¿No creo que se puede disparar una imagen decente del light-painting con
Fuente de luz de 10W LED fibra

Fuente de luz de 10W LED fibra

en los últimos años he sido poco a poco Armando un microscopio estéreo de Franken-ebay. El stand, microscopio y la luz de anillo todos vinieron de diferentes proveedores y fueron seleccionados sobre todo porque el precio era justo. Adaptar el soporte
Fuente de luz portátil

Fuente de luz portátil

una fuente de luz portátil, con pilas puede ser muy útil en la búsqueda de métodos rápidos y baratos al aire libre de iluminación (o en el interior cuando una salida es difícil de conseguir). Este instructivo cubre el diseño y la fabricación de una f
Preciosa fuente de luz...

Preciosa fuente de luz...

Esto usé muchas veces para preservar la fuente de luz preciosa...Paso 1: tomar una batería... Llevar una batería si no se puede tomar una fuente pequeña batería de un coche rc... también podemos tomar una pila de otros dispositivos de rc.Paso 2: ahor
Lógica difusa humor luz con LEDs

Lógica difusa humor luz con LEDs

en este instructable voy a hacer un humor rojo luz de cosas tuve que usar cosas encontré alrededor de la casa.Después de una noche particularmente larga, torpe entretenimiento empresa me encontré que necesitan una fuente de luz de baja potencia de la
La construcción de una caja de luz super barata para fotografía macro.

La construcción de una caja de luz super barata para fotografía macro.

Quería tomar algunas fotografías de objetos pequeños cerca, pero estaba insatisfecho con las imágenes originales. La iluminación era pobre y los colores parecen ser eliminada. Así que decidí construir una caja de luz de objetos que tenía alrededor de