| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Stop wasting time looking for files and revisions. Connect your Gmail, DriveDropbox, and Slack accounts and in less than 2 minutes, Dokkio will automatically organize all your file attachments. Learn more and claim your free account.

View
 

SensoresLDR

Page history last edited by pabloevaristo 9 years, 7 months ago

Uso de Sensores LDR

 

El ejemplo más sencillo pasa por utilizar 2 LDR situados en los laterales del robot para permitirle detectar niveles de iluminacióin y por tanto programarlo para que evite objetos, por ejemplo.

 

Construiremos, sobre una pequeña placa perforada-estañada, unos conectores para que los valores de variación de la resistencias se envíe a 2 de las entradas analógicas de Arduino y los motores actuen en consecuencia.

Veamos el circuito de las LDR:

 

 

Ahora como queda en la placa:

 

Por fin el robot completo:

 

 

El código del programa:

Suponemos que vamos a usar 2 motores DC conectados a M3 y M4 (ver comentarios en código) y uso de motores

 

<span style="color: #808080;" _mce_style="color: #808080;"><span style="font-family: Courier New;" _mce_style="font-family: Courier New;">#include &lt;AFMotor.h&gt;



// La librería AFMotor.h para control de motores

//***************EL MOTOR IZQ(mirando desde encima al robot, va al revés por su colocación)************************



AF_DCMotor motor3(3, MOTOR12_1KHZ); // crea motor #1, 64KHz pwm MAYOR FRECUENCIA MÁS PRECISIÖN -&gt; Más CONSUMO

AF_DCMotor motor4(4, MOTOR12_1KHZ); // crea motor #2, 64KHz pwm

int LDR_D = 0;   // LDR derecho (vista superior desde atrás);analog pin 0

int LDR_I = 1;   // LDR izquierdo ;analog pin 1

int LDR_D_val = 0;  // variables para leer el valor del LDR 

int LDR_I_val = 0; 





void setup() {

  Serial.begin(9600);           // Para imprimir mensajes por pantalla (monitor serie)



  // PONEMOS LAS VELOCIDADES

  motor3.setSpeed(100);     // velocidad de 0-255

  motor4.setSpeed(100);

}



void loop() {

  LDR_D_val = analogRead(LDR_D);   // lee el valor de las LDR

  LDR_I_val = analogRead(LDR_I);  

  </span></span>
<span style="color: #808080;" _mce_style="color: #808080;"><span style="font-family: Courier New;" _mce_style="font-family: Courier New;">     //Calibramos los LDR para ver los valores que devuelven, en este caso, el izquierdo devuelve un valor un poco menor por eso se suman 8</span></span><span style="color: #808080;" _mce_style="color: #808080;"><span style="font-family: Courier New;" _mce_style="font-family: Courier New;">     Serial.print("LDRDerecha = ");

  Serial.println(LDR_D_val);

  Serial.print("LDRIzquierda = ");

  Serial.println(LDR_I_val+8);

  

   // Compara los valores devueltos por las LDR y produce el cambio de dirección de los motores

   if (LDR_D_val &gt; LDR_I_val+8) 

    {

      Serial.println("D&gt;I");

        motor3.run(BACKWARD); // tuerce derecha  

        motor4.run(RELEASE);

        delay(100);

    } 

    else if (LDR_D_val &lt; LDR_I_val+8) 

    {

      Serial.println("I&gt;D");

         motor3.run(RELEASE);

         motor4.run(FORWARD); // tuerce izquierda

         delay(100);      

    }

    else if (LDR_D_val == LDR_I_val) 

    {

      Serial.println("D=I");

         motor3.run(BACKWARD);  // centro

         motor4.run(FORWARD);

        delay(100);

       }

 motor3.run(RELEASE);

 motor4.run(RELEASE);



}
</span></span>

Comments (0)

You don't have permission to comment on this page.