CS4985 Del proyecto: movimiento Scanner (4 / 5 paso)

Paso 4: Paso 4: el dispositivo de codificación

Ahora que tenemos todo puesto junto, su tiempo hacer que funcione. Lo primero es lo primero, abre el software de Arduino. Asegúrese de que seleccione el dispositivo apropiado y empezar un nuevo proyecto.

Una vez que esté listo, es hora de comenzar con la configuración inicial. Comenzar por definir nuestros constantes, incluyen archivos y variables.

 #include #define trig 8 //Trig pin #define echo 9 //Echo pin #define serv 10 //Servo pin #define loopDuration 60 //Duration of scan loop #define alertDuration 30 //Duration of alert long duration, initialDistance, scannedDistance, timer, alertTimer; Servo servo; int servoPosition; bool alertMode; bool positiveMovement; 

El siguiente es el programa de instalación. Aquí establecemos nuestras iniciales variables que vamos a usar enseguida. Ocupa la posición del servo, los pernos se asignan y se lee la lectura inicial en. Hay un retraso de segundo 2.1 general antes de que termine la configuración.

 void setup() { servoPosition = 45; positiveMovement = 1; timer = 0; alertMode = 0; servo.attach(serv); servo.write(servoPosition); pinMode(trig, OUTPUT); pinMode(echo, INPUT); Serial.begin(9600); delay(1000); Serial.println("Initializing..."); delay(1000); Serial.println("Initialized."); initialScan(); delay(100); } 

Ahora para el bucle principal. El programa comprueba las condiciones y se ejecuta basándose en el resultado. Es decir, si el programa está en modo de alerta, lo hará un análisis específico para ese modo. Si no, comprueba si el lazo es largo y si es así mover el servo a una nueva posición y tomar una nueva lectura y reiniciar el temporizador. De lo contrario, se compruebe para el movimiento y aumentar el contador de tiempo.

 void loop() { if (alertMode) { alertScan(); } else if (timer > loopDuration ) { adjustServo(); initialScan(); timer = 0; } else { movementCheck(); timer++; } delay(10); } 

manijas de alertScan informando al usuario que ha sido un problema y la cuenta atrás durante la alerta. Si el tiempo de alerta es para arriba sin problemas, que poner fin a la alerta y retomar la exploración normal. De lo contrario se informa al usuario de la situación y la cuenta regresiva.

 void alertScan() { if (alertTimer >= alertDuration) { alertMode = 0; initialScan(); Serial.println("Alert ended. Returning to normal."); delay(50); initialScan(); } else { Serial.print("Alert in progress. Time left: "); Serial.println(alertDuration - alertTimer); movementCheck(); alertTimer++; delay(10); } } 

initialScan obtiene la distancia que le ser comparado con el resto de las exploraciones. El sensor envía ondas de ultrasonido y luego leerlos en. La lectura de datos entonces se convierte a pulgadas y aparece en el monitor serial.

 void initialScan() { digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); initialDistance = duration / 148; //Converts to inches Serial.print("Monitoring Distance: "); Serial.print(initialDistance); Serial.println("\""); delay(100); } 

movementCheck hace lo mismo que initialScan, pero luego compara los resultados a la distancia inicialmente leer en. Si no hay ningún problema, entonces el bucle continúa. De lo contrario establece la alertMode en true.

 }void movementCheck() { digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); scannedDistance = duration / 148; delay(100); if (alertMode) { return; } if (scannedDistance > initialDistance + 2 || scannedDistance < initialDistance - 2) { Serial.print("Issue detected. Distance at: "); Serial.print(scannedDistance); Serial.println("\""); Serial.println("Alert in progress."); alertMode = 1; alertTimer = 0; timer -= 50; delay(10); } } 

adjustServo qué es el ajuste de ángulo actual del sensor. Actualmente utiliza 45, 90 y 135 grados, aunque esto puede ser ajustado como usted necesita. El retraso después de servo.write compensar cualquier cambio o movimiento que de lo contrario causaría problemas con las lecturas.

 void adjustServo() { if (alertMode) { Serial.println("Lockdown in progress."); return; } if (positiveMovement) { servoPosition+=45; } else if (!positiveMovement) { servoPosition-=45; } servo.write(servoPosition); delay(500); Serial.print("Current angle: "); Serial.println(servoPosition); if (servoPosition == 135) { positiveMovement = 0; } else if (servoPosition == 45) { positiveMovement = 1; } } 

Aquí está el código completo. No dude en modificar y utilizar como mejor parezca.

 /* Nicholas RoweCS4985Movement Scanner */#include <Servo.h>#define trig 8 #define echo 9 #define serv 10 #define loopDuration 60 #define alertDuration 30 long duration, initialDistance, scannedDistance, timer, alertTimer; Servo servo; int servoPosition; bool alertMode; bool positiveMovement;void setup() { servoPosition = 45; positiveMovement = 1; timer = 0; alertMode = 0; servo.attach(serv); servo.write(servoPosition); pinMode(trig, OUTPUT); pinMode(echo, INPUT); Serial.begin(9600); delay(1000); Serial.println("Initializing..."); delay(1000); Serial.println("Initialized."); initialScan(); delay(100); }void loop() { if (alertMode) { alertScan(); } else if (timer > loopDuration ) { adjustServo(); initialScan(); timer = 0; } else { movementCheck(); timer++; } delay(10); }void alertScan() { if (alertTimer >= alertDuration) { alertMode = 0; initialScan(); Serial.println("Alert ended. Returning to normal."); delay(50); initialScan(); } else { Serial.print("Alert in progress. Time left: "); Serial.println(30 - alertTimer); movementCheck(); alertTimer++; delay(10); } }void initialScan() { digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); initialDistance = duration / 148; Serial.print("Monitoring Distance: "); Serial.print(initialDistance); Serial.println("\""); delay(100); }void movementCheck() { digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); scannedDistance = duration / 148; delay(100); if (alertMode) { return; } if (scannedDistance > initialDistance + 2 || scannedDistance < initialDistance - 2) { Serial.print("Issue detected. Distance at: "); Serial.print(scannedDistance); Serial.println("\""); Serial.println("Alert in progress."); alertMode = 1; alertTimer = 0; timer -= 50; delay(10); } }void adjustServo() { if (alertMode) { Serial.println("Lockdown in progress."); return; } if (positiveMovement) { servoPosition+=45; } else if (!positiveMovement) { servoPosition-=45; } servo.write(servoPosition); delay(500); Serial.print("Current angle: "); Serial.println(servoPosition); if (servoPosition == 135) { positiveMovement = 0; } else if (servoPosition == 45) { positiveMovement = 1; } } 

Artículos Relacionados

Latino 2012 Final del proyecto: Armadura de Commodus 'Gladiator'

Latino 2012 Final del proyecto: Armadura de Commodus 'Gladiator'

para mi clase de Latin que tenemos un proyecto final que consiste en un ensayo, una presentación oral y un proyecto de físico. Para mi proyecto de tercer año que decidí probar y reproducir la armadura Commodus lleva en el Senado en la película Gladia
Rack de transporte Growler (cuna del proyecto de ley)

Rack de transporte Growler (cuna del proyecto de ley)

Me gusta beber cerveza. Y como muchas personas que les gusta beber cerveza después de tener una maravillosa cerveza en golpecito en mi restaurante favorito que tengo un envase de medio galón (llamado un growler) lleno con cerveza, para ir así que pue
Fase del proyecto de tablero de corcho 2

Fase del proyecto de tablero de corcho 2

hice esto en TechShop (www.techshop.ws) en Menlo Park.Este proyecto continúa el "proyecto de tablero de corcho" descrito en un Instructable anterior.Todo el proyecto es construir varios tableros del corcho como regalos de Navidad o cumpleaños. C
Gov'nor - montaje de un piloto de trayectoria con una década de 1930 el presupuesto... un diario del proyecto en curso...

Gov'nor - montaje de un piloto de trayectoria con una década de 1930 el presupuesto... un diario del proyecto en curso...

Es el Pashley Gov'nor... es simplemente hermoso... sentarse y mirar un rato, te hará sentir bien...http://www.Pashley.co.uk/Products/Guvnor.htmlSe basa en el modelo realizado por Episteme en la década de 1930, pero está equipado con componentes moder
La energía reprimida de residuos de cocina! (parte del proyecto de la bomba de agua bio-combustible)

La energía reprimida de residuos de cocina! (parte del proyecto de la bomba de agua bio-combustible)

El video muestra el poder potencial de levadura o ácido láctico fermentación de residuos de cocina.Es parte del proyecto de la bomba de agua bio-combustible. Ya hice una prueba de concepto de bomba de agua que aprovecha esta energía para recircular a
Cambiar el tamaño de una caja de la computadora a una caja de caja del proyecto

Cambiar el tamaño de una caja de la computadora a una caja de caja del proyecto

decidí utilizar una fuente de alimentación de computadora para uno de mis proyectos. Al retirar la fuente de alimentación de un ordenador viejo, pensé que también necesitan un recinto. Pero la caja de la PC era demasiado grande para mi uso. Re-de tam
Enfermedad del anti-movimiento formación gratis vuelo

Enfermedad del anti-movimiento formación gratis vuelo

¿Usted ha conseguido siempre mareo por movimiento?¿Es molesto?Durante los últimos dos años he trabajado para conocer y maestro un método usado para entrenar a astronautas y pilotos de combate para gestionar y mitigar la enfermedad de movimiento.Es im
Cabeza de Deadmau5 &gt; aquí va el título del proyecto

Cabeza de Deadmau5 &gt; aquí va el título del proyecto

Mi hijo ama a Deadmau5, y tengo que decir, él, también me gusta. Muy interesante personaje, buena música, si estás en EDM, cultura pop y juegos de azar. Mi hijo es un loco jugador, Deadmau5 es en varios juegos como un personaje así como su música es
Ideas para organizar tu garaje taller del proyecto

Ideas para organizar tu garaje taller del proyecto

Durante los últimos meses he sido reacondicionar mi taller de garaje.El objetivo era organizar un espacio donde podía hacer un poco de carpintería, pero que fue lo suficientemente flexible como para manejar cualquier tipo de proyectos creativos quizá
Categorías del proyecto jóvenes ingenieros

Categorías del proyecto jóvenes ingenieros

este Instructable es un intento de categorización de los proyectos de jóvenes ingenieros para ayudar a los profesores a decidir que lección es conveniente para su clase. Planes de proyectos se subdividen en gamas de grado apropiado en la siguiente pá
Cerradura sin llave para puerta del proyecto jaspalr

Cerradura sin llave para puerta del proyecto jaspalr

uno de los problemas en las conversiones de autobús de la escuela es cómo bloquear la puerta trasera.  Bruce en Yahoo Shoolie grupo utiliza una cerradura de pasador en la puerta trasera de su conversión del autobús de la escuela y me ha gustado la id
Fase del proyecto de tablero de corcho 4

Fase del proyecto de tablero de corcho 4

hice esto en TechShop (www.techshop.ws) en Menlo Park.Esto es una continuación de la serie de Instructables para el proyecto de la Junta de corcho.Estas placas necesitan dos anillos de corchos acostado horizontalmente. Para la conveniencia de mezclar
¿transformador para fuente de alimentación del proyecto

¿transformador para fuente de alimentación del proyecto

preguntando qué hacer con los viejos transformadores de pared? Utilizarlos para fuentes de alimentación para ejecutar proyectos de electrónica!Usted necesitará algunos de estos:fuente de alimentación (ir con un junker)Pinzas de cocodrilo con botas de
Modelo su antes y después del proyecto

Modelo su antes y después del proyecto

Sierra instructable "púrpura Ombre Dresser" de Mimanne y fue motivada a utilizar el método en un aparador que había encontrado en una venta de garaje ($10). Ver aquí: (aparador de Ombre púrpura).Parecía un divertido proyecto y aparador antiguo n