Paso 4: Incorporar sensores de la luz Part 2
Por preferencia personal, me gustaria tener el analogRead() función retorno 0(min) si el sensor de luz es oscuro y 1023(max) si detecta luz. Podemos solucionar este problema usando el software. No existen cambios en el circuito.
En esta sección de código:
SensorLeft = analogRead(LeftSensor);
Delay(1);
Podemos agregar:
SensorLeft = 1023 - analogRead(LeftSensor);
Delay(1);
Esto restará lo que valor la analogRead() función devuelve por 1023 (que es el valor máximo que puede devolver).
Esta manera, será invertir lo que valoran los rendimientos analogRead().
Por ejemplo, si el valor de analogRead() es x
x = 0
Valor del sensor = 1023 - x
Valor del sensor = 1023 0
Valor del sensor = 1023
x = 1023
Valor del sensor = 1023 - x
Valor del sensor = 1023-1023
Valor del sensor = 0
Este método puede utilizarse para invertir en cualquier valor, como usted sabe el valor máximo que volverá.
Por ejemplo, si un sensor devuelve un máximo de 255:
Val = 255 - valor del sensor
Añadir este código a la placa Arduino y probarlo.
Copiar el código desde aquí:
/****************************************************************************************************************
* Programa para leer dos LDRs
* creado por: Anuj
* (c) copyright
*
*
* Configuración físico:
* Dos LDRs conectados a tierra y el pin análogo 1(Right) y 2(left) pin analógico
*
*
******************************************************************************************************************/
Usando Arduino Duemilinove
Definiciones del PIN - une una variable a un pin.
const int RightMotor = 2; Este pin se utiliza para activar o desactivar el motor adecuado. Conectado a la base de un transistor NPN.
const int LeftMotor = 3; Este pin se utiliza para activar o desactivar el motor izquierdo. Conectado a la base de un transistor NPN.
const int RightSensor = 1; Este pin se utiliza para leer el valor del Sensor de la derecha.
const int LeftSensor = 2; Este pin se utiliza para leer el valor del Sensor de la izquierda.
Definiciones de variables
int SensorLeft; Esto almacena el valor del pin Sensor izquierda para utilizar más tarde en el bosquejo
int SensorRight; Esto almacena el valor del pin Sensor derecho para utilizar más tarde en el bosquejo
el método setup() se ejecuta una vez cuando se ejecuta el programa. Cuando el
Arduino se restablece, el setup() se ejecutará una vez más.
void setup() {}
pinMode (LeftSensor, entrada); Define este pin como entrada. El Arduino leerá los valores de este pin.
pinMode (RightSensor, entrada); Define este pin como entrada. El Arduino leerá los valores de este pin.
digitalWrite (A1, alto); Permite una resistencia pullup interna
digitalWrite (A2, alto); Permite una resistencia pullup interna
Serial.Begin(9600); Permite una conexión en serie con el Arduino al USB o UART (pines 0 y 1). Observe que es la velocidad en baudios de 9600
Serial.println ("\nReading sensores de luz."); Colocado en el extremo del void Setup() modo que funciona una vez, justo antes del void Loop()
}
el método loop() se ejecuta una y otra vez,
como el Arduino tiene poder
void loop() {}
SensorLeft = analogRead(LeftSensor); Esto lee el valor del sensor, luego guarda el entero correspondiente.
Delay(1); el retraso permite que el convertidor analógico a Digital IC a recuperarse para la siguiente lectura.
SensorRight = analogRead(RightSensor); Esto lee el valor del sensor, luego guarda el entero correspondiente.
Delay(1); el retraso permite que el convertidor analógico a Digital IC a recuperarse para la siguiente lectura.
Esta sección del bosquejo se utiliza para imprimir los valores de la
sensores a través de la serie a la computadora. Útil para determinar
Si los sensores están trabajando y si el código también funciona correctamente.
Esto se conoce como depuración.
Serial.Print ("Sensor izquierdo ="); Imprime el texto dentro de las comillas.
Serial.Print(SensorLeft); Imprime el valor del Sensor de la izquierda.
Serial.Print("\t"); Imprime una pestaña (espacio).
Serial.Print ("Sensor de la derecha ="); Imprime el texto dentro de las comillas.
Serial.Print(SensorRight); Imprime el valor del Sensor de la derecha.
Serial.Print("\n"); Imprime una nueva línea después de todos los datos necesarios se visualizan.
}
No copie nada más allá de este punto.
Ahora tenemos a los sensores a utilizar con nuestro robot, pero no hemos terminado todavía. Necesitamos una forma de comparar estos valores. Utilizando sólo estos valores, podemos determinar si un sensor está leyendo un valor mayor o menor y el otro sensor, o si son exactamente iguales.
Ahora, debido a otros factores como menores discrepancias en la fabricación de la LDR, jitter, EMI, etc., los valores para el sensor de luz rara vez va a ser exactamente el mismo. Así que por el contrario, podemos utilizar otro entero para determinar si son aproximadamente lo mismo. Podemos lograrlo mediante el uso de cálculo de la diferencia entre los dos sensores de luz. Podemos restar el valor de un sensor por el valor de los otros sensores y luego encontrar el valor absoluto del sensor. Devolverá la diferencia de los dos sensores y podemos usarlo inmediatamente, o guardar en otro entero, en caso de necesitar usar más de una vez. El valor final puede utilizarse para determinar si los sensores son leer dos valores distintos, o si tienen algo similares. Cuanto mayor sea el valor, cuanto mayor sea la diferencia. Utilizando un if instrucción, puedo decir, si los valores de los sensores son en incrementos de 100, hacer esto.
Si (SensorDifference < = 100) {}
Ejecutar esto.
}
Piggybacking nuestro código anterior que todavía debe estar corriendo en la placa de Arduino,
podemos utilizar los dos enteros que contienen el valor de los sensores para calculcate la diferencia y salvar a un entero nuevo.
El nuevo código se ve así. Los cambios están en negrita.
/****************************************************************************************************************
* Programa para leer dos LDRs
* creado por: Anuj
* (c) copyright
*
*
* Configuración físico:
* Dos LDRs conectados a tierra y el pin análogo 1(Right) y 2(left) pin analógico
*
*
******************************************************************************************************************/
Usando Arduino Duemilinove
Definiciones del PIN - une una variable a un pin.
const int RightMotor = 2; Este pin se utiliza para activar o desactivar el motor adecuado. Conectado a la base de un transistor NPN.
const int LeftMotor = 3; Este pin se utiliza para activar o desactivar el motor izquierdo. Conectado a la base de un transistor NPN.
const int RightSensor = 1; Este pin se utiliza para leer el valor del Sensor de la derecha.
const int LeftSensor = 2; Este pin se utiliza para leer el valor del Sensor de la izquierda.
Definiciones de variables
int SensorLeft; Esto almacena el valor del pin Sensor izquierda para utilizar más tarde en el bosquejo
int SensorRight; Esto almacena el valor del pin Sensor derecho para utilizar más tarde en el bosquejo
int SensorDifference; / / este valor se utiliza para determinar la diferencia entre la izquierda y derecha
el método setup() se ejecuta una vez cuando se ejecuta el programa. Cuando el
Arduino se restablece, el setup() se ejecutará una vez más.
void setup() {}
pinMode (LeftSensor, entrada); Define este pin como entrada. El Arduino leerá los valores de este pin.
pinMode (RightSensor, entrada); Define este pin como entrada. El Arduino leerá los valores de este pin.
digitalWrite (A1, alto); Permite una resistencia pullup interna
digitalWrite (A2, alto); Permite una resistencia pullup interna
Serial.Begin(9600); Permite una conexión en serie con el Arduino al USB o UART (pines 0 y 1). Observe que es la velocidad en baudios de 9600
Serial.println ("\nReading sensores de luz."); Colocado en el extremo del void Setup() modo que funciona una vez, justo antes del void Loop()
}
el método loop() se ejecuta una y otra vez,
como el Arduino tiene poder
void loop() {}
SensorLeft = analogRead(LeftSensor); Esto lee el valor del sensor, luego guarda el entero correspondiente.
Delay(1); el retraso permite que el convertidor analógico a Digital IC a recuperarse para la siguiente lectura.
SensorRight = analogRead(RightSensor); Esto lee el valor del sensor, luego guarda el entero correspondiente.
Delay(1); el retraso permite que el convertidor analógico a Digital IC a recuperarse para la siguiente lectura.
SensorDifference = abs(SensorRight = SensorLeft);
Esta sección del bosquejo se utiliza para imprimir los valores de la
sensores a través de la serie a la computadora. Útil para determinar
Si los sensores están trabajando y si el código también funciona correctamente.
Esto se conoce como depuración.
Serial.Print ("Sensor izquierdo ="); Imprime el texto dentro de las comillas.
Serial.Print(SensorLeft); Imprime el valor del Sensor de la izquierda.
Serial.Print("\t"); Imprime una pestaña (espacio).
Serial.Print ("Sensor de la derecha ="); Imprime el texto dentro de las comillas.
Serial.Print(SensorRight); Imprime el valor del Sensor de la derecha.
Serial.print("\t"); / / imprime una pestaña (espacio).
Serial.print ("diferencia de Sensor ="); Imprime el texto dentro de las comillas.
Serial.Print(SensorDifference);
Serial.Print("\n"); Imprime una nueva línea después de todos los datos necesarios se visualizan.
}