Desde 1994 en la Red. La pagina de los aficionados a la electronica, informatica y otras curiosidades de la vida. No dudes en visitarnos.
Ahora 2 visitas.| 2819442 Visitas (desde Dic. 2011), hoy: 436 Visitas 1300 Pag. Vistas , ultimos 36 dias: 17697 Visitas. 115339 Pag. Vistas. Tu IP: 34.200.236.68
Que ando curioseando:
AutosuficienciaCosas de casaElectronicaEn InternetInformáticaMundo MisticoSin categoríaSociedadTe lo recomiendo

SiLi LiLa BOT tu primer seguidor de linea barato.

SiLiBOT[1]

Mi objetivo era construir un robot-line siguiendo barato y sencillo para los principiantes.

Durante el diseño y la construcción, traté de mantener el robot lo más simple y barato de construir como sea posible. Usé cinta aislante negro sobre una alfombra blanca para hacer la línea.

El Diseño Robot
El primer paso en el proceso de diseño debe ser la definición precisa de la tarea del robot.

La tarea del robot
La tarea de nuestro robot es simple: hay que seguir la línea de negro en el piso de alfombra blanca. La tarea parece sencilla, pero con el fin de resolver este problema, tenemos que dividirlo en sub-tareas:
- El robot tiene que detectar la línea de alguna manera (sensores).
- El robot tiene que ser capaz de mover y girar para seguir la línea (motores y sistema de tracción).
- El robot necesita un cerebro, que lee los datos del sensor y toma decisiones y ordena los motores (microcontrolador + programación).

El sistema de transmisión
Para hacerlo más simple, el robot utilizará un sistema de accionamiento diferencial. Para la dirección del robot, este método no requiere de giro de las ruedas delanteras, como en los coches o bicicletas. El robot tendrá dos conjuntos de ruedas motrices y una rueda de ricino. Con un sistema de accionamiento diferencial de movimiento del robot se controla con el ajuste de la velocidad y dirección del motor. Por ejemplo, si ambos motores avanzan a la misma velocidad, el robot seguirá adelante también (A). Si la rueda derecha gira más rápido que la rueda izquierda, a continuación, el robot gire hacia la izquierda en un arco (B). Si el motor izquierdo se para, a continuación, el robot girará alrededor de la rueda izquierda (C). Si los motores izquierdo y derecho van en la dirección opuesta, a continuación, el robot puede dar la vuelta en el mismo lugar (D).

diffdrive[1]

El robot de línea seguidor necesita para controlar la velocidad del motor con precisión para ser capaz de seguir la línea. Para el control de los motores voy a utilizar un chip de motor L293D. El L293D IC puede controlar dos motores de corriente continua, y necesita 3 señales de entrada para controlar un motor (1para la velocidad del motor, 2 para la dirección del motor). La velocidad del motor se puede controlar mediante el suministro de una señal PWM (Pulse Width Modulation) a la entrada de habilitación ENABLE-1 pin del L293D. La dirección del motor se puede controlar mediante el suministro de la señal digital apropiada a las INPUT1 INPUT2 y clavijas. El otro motor se puede controlar de manera similar por la HABILITAR-2 y INPUT3 y INPUT4 Pins. Las señales de entrada para cada motor tiene que ser todo lo contrario de la otra, así que por el uso de un convertidor hexagonal CD4069 IC, la dirección del motor puede ser controlada con sólo 1 señal de entrada.

El microcontrolador funciona con 3.3V, los motores de corriente continua, L293D y el inversor hexagonal IC necesita 5V mínimo y los motores dibujan grandes corrientes de alimentación. Debido a esto, voy a utilizar de alimentación separadas para el microcontrolador y los motores. La batería 4xAA (6V) es la fuente principal de energía para los motores de corriente continua, y la batería de 9V es la fuente de energía para los circuitos electrónicos.

La velocidad del motor que controla la señal PWM se enciende y apaga los motores de corriente continua de un par de miles de veces por segundo. Debido a esto, hubo una gran cantidad de ruido eléctrico en el sistema, lo que hizo que el microcontrolador en el panel de Launchpad se vuelven locos. He soldada 0.22 uF condensadores cerámicos entre los polos del motor de corriente continua para reducir el ruido eléctrico, y el chip L293D ya está equipado con los CEM interno (Fuerza electromotriz) diodos de protección. Pero esto todavía no era suficiente. Yo podría eliminar el ruido sólo separando galvánicamente el microcontrolador de los motores y las piezas del controlador de motor con un acoplador óptico de 4 canales IC.

La versión final del circuito controlador de motor se ve así:

MotorController[1]

El sensor de línea
Para el sensor de línea que decidí usar un LED blanco + par LDR. The Light Dependent Resistor (LDR) detectará la línea de negro. El diodo emisor de luz (LED) envía un constante haz de luz blanca hacia el suelo. Esta luz se refleja de nuevo a la LDR. Dependiendo del color de la tierra, la fotorresistencia recibe cantidades variables de luz reflejada. Cuanta más luz que llega a la LDR, menos de su resistencia será. El microcontrolador sólo puede detectar voltajes, así que tenemos que encontrar una manera de convertir este cambio de resistencia en un cambio de voltaje. Podemos hacerlo con un circuito divisor de tensión, que proporcionará el voltaje que varía de acuerdo a la cantidad de la intensidad de la luz reflejada de vuelta a la LDR.

LineSensor[1]

Cuando el sensor está por encima del fondo blanco, entonces la mayoría de la luz del LED blanco se refleja de vuelta a la LDR y el valor de la resistencia del LDR será baja, alta cantidad de corriente que fluye a través de la LDR y la resistencia R conectada en serie y gran tensión se aparece entre la salida y GND. Si el sensor está por encima de la línea de negro, entonces pequeña cantidad de voluntad de la luz reflejada de vuelta a la LDR y la resistencia del LDR será alta, baja cantidad de corriente que fluye a través de la LDR y la resistencia R y la pequeña aparecerá tensión entre la salida y GND.

LineSensSchem[1]

El microcontrolador
A medida que el cerebro para controlar el robot he usado un panel de Launchpad con un microcontrolador MSP430G2553.

LaunchPadMSP430G2553[1]

Diagrama de bloques del Robot

Ahora puedo resumir el diseño del robot:

- El robot utiliza dos motores de corriente continua y una rueda de ricino en una configuración de la unidad diferencial (la dirección del robot se realiza mediante el ajuste de la velocidad de los motores).

- La velocidad y dirección de los motores son controlados con señales digitales PWM y por un conductor de motor L293D IC.

- El robot utiliza dos baterías (uno para los componentes electrónicos y uno para los motores de corriente continua y circuitos del controlador del motor)

- El robot utiliza un panel de Launchpad con un microcontrolador MSP430G2553

- El robot utiliza dos sensores para determinar la posición de la línea de negro bajo el robot.

Mediante el ajuste de la velocidad de los dos motores de corriente continua sobre la base de las lecturas de los sensores, el microcontrolador puede mantener la línea entre los dos sensores, y el robot podría conducir alrededor de la pista.

BlockDiagram[1]

Construcción del Robot

A medida que el diseño esté finalizado, puedo empezar a construir el robot.

Construcción del marco de robot

El marco de robot se compone de dos CD / DVDs para dar suficiente resistencia estructural. El piso inferior celebrará la batería de 6V de motor, dos líneas sensor de detección, dos motores de corriente continua y la rueda de ricino. La cubierta superior se mantenga el circuito controlador de motor conectado a la placa Launchpad y la batería electrónica 9V.

Bottom[1]

Las ruedas están hechas de la tapa de los frascos de mantequilla de maní.
Hay suficiente espacio entre las dos cubiertas para mantener la batería del motor.
La rueda giratoria debería girar libremente alrededor.

Construcción del sensor de línea
Los sensores (LDR y LED par) están montados en un pequeño PCB perforado.
LineSensorBoard[1]

He colocado la LDR un poco más adelante (más cerca del suelo) en comparación con el LED para asegurarse de que no hay luz directa podría llegar a la LDR, sólo los que rebotadas desde el suelo.

He puesto mis sensores de unos 3 cm de distancia, y unos 5 mm desde el suelo. Para proteger a los sensores de la luz ambiente, utilicé tapones de las botellas de plástico.

LineSensorConstr[1]

Construcción del Panel Controlador de motor
He montado el circuito controlador de motor en un PCB perforado. Se puede ver en la imagen de abajo, que he dividido el circuito en diferentes secciones. El regulador de tensión LD1117V33 hace 3.3V de la 9V de la batería de la electrónica. Solía ​​encabezados extendidos y encabezados femeninos para conectarse a la plataforma de lanzamiento Pins. Para hacer la conexión de sensores al panel más fácil, me puse los encabezados con 3.3V (cabeceras rojos) y GND (cabeceras amarillo) junto a la Launshpad Pins. El acoplador óptico separa la sección de 3,3 V de la sección de controlador de motor de 6V. En el panel que he utilizado los puentes para conectar dos pines PWM capaces de Launchpad (P2.1 y P2.4) y dos clavijas de Launchpad digitales (P2.2 y P2.3) a los pines correspondientes del circuito controlador de motor para la velocidad y la dirección el control de los dos motores de corriente continua.

MotContrBrd[1]

El encabezado extendido y los encabezados femeninos hacen posible conectar el controlador de motor al panel de ejecución. Después de conectar el sensor izquierdo para Pin6 (P1.4), el sensor derecho a PIN15 (P1.7) y la conexión de la batería de 9V y la batería de 6V a los pines apropiados, la construcción del robot ha terminado.
Electronics[1]

El siguiente paso será la programación.

El Algoritmo de línea siguiente
Antes de que pudiéramos programar el robot, tenemos que encontrar una línea apropiada siguiente algoritmo. En primera w e que tomar medidas de prueba con la línea que sigue el sensor a ser capaz de decidir cuando un sensor está sobre la línea de color negro o la alfombra blanca. Sin encender la electrónica y la alimentación del motor, he conectado el panel de Launchpad al PC con el cable USB para alimentar el microcontrolador y el sensor de línea. He compilado y cargado el código adjunto con la Energia IDE en el panel de Launchpad (Véase el párrafo siguiente de la Energia IDE). El código lee los datos del sensor izquierdo y derecho y los envía a la PC a través de la comunicación serie. Los valores se pueden visualizar con el monitor serie.

Si el sensor estaba sobre la línea de negro, los valores de ADC fueron medidos alrededor de 665 a 675. Si el sensor estaba sobre la alfombra, que los valores fueron de alrededor 775 a 785. Así que podemos utilizar 720 como valor umbral. Si un valor del sensor es menor que 720, entonces el sensor se encuentra sobre la línea. Si el valor del sensor es mayor que 720, entonces es sobre la alfombra.

Ahora que podemos decidir cuando un sensor es de más de una línea o el fondo, podemos encontrar una línea siguiente algoritmo.

El microcontrolador debe leer los datos de los sensores, y en base a las lecturas que se debe ajustar la velocidad de los dos motores de corriente continua para mantener la línea entre los dos sensores. Así que el robot podría conducir alrededor de la pista. Si el sensor izquierdo está sobre la línea (el valor del sensor de la izquierda es menor que el valor umbral de 720), que el robot debe girar a la izquierda (C). Del mismo modo, si el sensor derecho está sobre la línea (el valor del sensor de la derecha es menor que 720), que el robot debe girar a la derecha (D). Si tanto el valor del sensor es mayor que el umbral (la línea está entre los dos sensores – A), o si tanto el valor del sensor es menor que el umbral (el robot acercó a un cruce de líneas – B), que el robot debe seguir adelante. Para evitar la oscilación, es una buena idea esperar un par ms antes de la siguiente medición del sensor.

Algorithm[1]

La línea que sigue el algoritmo que se muestra en un diagrama de flujo:
Flowchart[1]

Debemos codificar este algoritmo para Launchpad con el Arduino como Energia IDE.

La Energia IDE
Energia es una plataforma de creación de prototipos electrónicos de código abierto, lo que eleva el cableado y el marco de Arduino para el Texas Instruments MSP430 LaunchPad.

Acerca de la descarga e instalación de la Energia IDE y sobre cómo configurar su tarjeta, consulte el siguiente sitio:
https://github.com/energia/Energia/wiki/Getting-Started

Acerca de cómo configurar la comunicación serie:
https://github.com/energia/Energia/wiki/Serial-Communication

Carga del Código
Ahora, el robot está casi terminado, es el momento de cargar el código en el panel de Launchpad. Asegúrese de que el chip MSP2553 se encuentra en el panel, y que el chip MSP2553 se selecciona en el menú “Herramientas / Board” (el código se adjunta es por MSP430G2553 solamente, porque este chip es compatible con UART hardware, si utiliza otra MSP430 Chips, que apoya UART software sólo, que usted tiene que utilizar software softserial comunicación serial () en el código de Energia en lugar de en serie ()). Abra la Energia IDE y copiar el código del archivo de texto que se adjunta en un dibujo en blanco. Después de la copia, pulse el botón Compile para asegurarse de que no hay errores. Pulse el botón Cargar para cargar el código compilado en el panel de Launchpad.

Descripción del código
El lenguaje Energia es una implementación de Arduino para el Launchpad. Así que la mayoría de los proyectos de Arduino y códigos con pequeños modofications puede ser transferido directamente a la ejecución.

 

#define EN1 9 // Pin9 (P2.1) : Motor1 speed (PWM)
#define M1 10 // Pin10 (P2.2) : Motor1 direction (Left Motor)

#define EN2 12  // Pin13 (P2.4) : Motor2 speed (PWM)  
#define M2 11 // Pin12 (P2.3) : Motor2 direction (Right Motor)

int LeftSensor = A4; // Left sensor on A4 - Pin6 (P1.4) 
int RightSensor = A7;  // Right sensor on A7 - Pin15 (P1.7)
int leftvalue;    // Left sensor value
int rightvalue;    // Right sensor value
int treshold = 720;  //sensor treshold value
int MotorSpeed = 30;   // motor speed

void setup() 
{ 
  pinMode(EN1, OUTPUT);  // Motor1 speed (PWM)
  pinMode(EN2, OUTPUT);  // Motor2 speed (PWM)
  pinMode(M1, OUTPUT);   // Motor1 direction (Left Motor)
  pinMode(M2, OUTPUT);   // Motor2 direction (Right Motor)
  MotorLeft(MotorSpeed);  // Robot: Forward
  MotorRight(MotorSpeed);
   Serial.begin(9600); // set up serial communication with PC
} 

void loop()  // infinite loop
{ 
  leftvalue = analogRead(LeftSensor);    // reading Left sensor value (0 - 1023) 
  rightvalue = analogRead(RightSensor);    // reading Right sensor value (0 - 1023) 
  
// if both sensors over carpet: move forward 
  if (leftvalue>treshold && rightvalue>treshold) 
  {
   MotorLeft(MotorSpeed);  //Left motor: forward 
   MotorRight(MotorSpeed);   //Right motor: forward 
  }
 // If Left sensor is over the line and Right sensor is over the carpet: turn left 
  else if (leftvalue<treshold && rightvalue>treshold)
  {
   MotorLeft(0);     //Left motor: stop 
   MotorRight(MotorSpeed);   //Right motor: forward 
  }
// If Left sensor is over the carpet and Right sensor is over the line: turn right
  else if (leftvalue>treshold && rightvalue<treshold)
  {
   MotorLeft(MotorSpeed);  //Left motor: forward 
   MotorRight(0);     //Right motor: stop 
  }
// If both sensor is over the line (line crossing): move forward 
    else if (leftvalue>treshold && rightvalue>treshold)
  {
   MotorLeft(MotorSpeed);  //Left motor: forward 
   MotorRight(MotorSpeed);   //Right motor: forward 
  }
  
// sending sensor data to PC via serial port
// (used for treshold setup and debugging)
  Serial.print("Left Sensor = " );                       
  Serial.print(leftvalue);        
  Serial.print(" Right Sensor = ");  
  Serial.println(rightvalue);  
  
  delay(50);  // wait for 50ms      
} 


void MotorLeft(int speed) 
{   
    if (speed>0)
	{
	digitalWrite(M1,HIGH);
    	analogWrite(EN1,speed*255/100);
	} 
	else
	{
	digitalWrite(M1,LOW);
    	analogWrite(EN1,abs(speed)*255/100);
	}
} 

void MotorRight(int speed) 
{   
    if (speed>0)
	{
	digitalWrite(M2,HIGH);
    	analogWrite(EN2,speed*255/100);
	} 
	else
	{
	digitalWrite(M2,LOW);
    	analogWrite(EN2,abs(speed)*255/100);
	}
}

 

En el programa principal, el bucle () ciclo infinito de leer continuamente los datos del sensor izquierdo y derecho con el comando analogRead () en dos variables con nombre LeftLDR y RightLDR. El if () else if) y comandos (decidir qué sensores están sobre la línea o la alfombra. Sobre la base de estas decisiones, el microcontrolador controla los motores de acuerdo a la línea siguiente algoritmo para mantener la línea entre los dos sensores .

Para que el control del robot más fácil, he hecho el MotorLeft () y () MotorRight funciones motoras controlar. Estas funciones necesitan un parámetro entre -100 y 100 para controlar un motor (invertir 100% – 100% hacia adelante). En estas funciones MotorController, la dirección del motor se ajusta con el comando digitalWrite (), y la velocidad del motor se ajusta con el comando analogWrite ().

Fuente: http://letsmakerobots.com/node/37225

Escribe un comentario

Tu comentario