Вы находитесь на странице: 1из 9

1. Introduccin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2. Instalacin de la biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3. PololuQTRSensors Mtodos y Notas de utilizacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin Pgina 1 de 121. Introduccin Sensor de reflectancia QTR-1RC. QTR-8A reflectancia matriz de sensores. Los sensores QTR reflectancia Pololu llevan pares de LED y el fototransistor inf rarrojo que pueden proporcionar mediciones analgicas de reflectancia IR, lo que los hace ideal para la deteccin de bordes de proximida d y de lnea siguientes aplicaciones. La mdulos vienen como unidades compactas, de un solo sensor (QTR-1A [http://www.polo lu.com/catalog/product/958] y QTR-1RC [http://www.pololu.com/catalog/product/959]) o como matrices de 8 sensor es (QTR-8A [http://www.pololu.com/catalog/product/960] y QTR-8RC [http://www.pololu.com/catalog/product/961]) que puede estar opcionalm ente dividida en una matriz de 2-sensor y un sensor 6 array. Los mdulos estn disponibles en dos formatos de salida diferentes: QTR-xA emite una seal analgica entre 0 y Vcc que puede ser medida por un convertidor analgico-a-digital (ADC), y la QTR-xRC emite un pulso que se puede medir por una lnea digital de E / S (cuya duracin proporciona una medicin analgica de reflectancia ). Sensor de reflectancia QTR-1A esquemtica diagrama. Diagrama esquemtico del sensor de reflectancia QTR-1RC. Por favor, consulte las pginas de productos [http://www.pololu.com/catalog/catego ry/7] para ms informacin sobre cmo funcionan estos sensores. Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin 1. Introduccin Pgina 2 del documento 12 Esta explicar cmo instalar bibliotecas Ardui no para los sensores QTR reflectancia Pololu, y proporcionar dibujos de muestra, as como enlaces a documentacin de la biblioteca. Las bibliotec as le dar todo lo que necesita para interactuar con un conjunto de sensores de reflectancia QTR-8x o varios sensores de reflectancia QTR-1x, incluyendo funciones avanzadas como la automtica calibracin y, en el caso de deteccin de la lnea, el clculo de la posicin de la lnea. Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin 1. Introduccin Pgina 3 de 122. Instalacin Biblioteca En primer lugar, descargue el siguiente archivo (actualizado 04 de octubre 2010) : PololuQTRSensorsForArduino.zip [http://www.pololu.com/file/download/ PololuQTRSensorsForArduino.zip? File_id = 0J403] (13k zip) A continuacin, extraerlo en el directorio arduino-00xx/libraries. Una vez complet ado esto debera ver PololuQTRSensors como subdirectorio en el directorio de bibliotecas. Ahora debera ser capaz de utilizar estas bibliotecas en sus dibujos al selecciona r Sketch> Import Library> PololuQTRSensors desde tu Arduino IDE (o simplemente escribir # include <PololuQ TRSensors.h> en la parte superior de su esquema). Tenga en cuenta que puede que tenga que reiniciar el IDE Arduino antes de ver la s nuevas bibliotecas. Una vez hecho esto, se puede crear un objeto PololuQTRSensorsAnalog para sus sen sores QTR-xA y Objeto PololuQTRSensorsRC para sus sensores QTR-XRC: / / Crear un objeto de tres sensores QTR-Xa en entradas analgicas 0, 2 y 6

PololuQTRSensorsAnalog qtra ((unsigned char []) {0, 2, 6}, 3); / / Crear un objeto de cuatro sensores QTR-XRC en los pines digitales 0 y 9, y e n analgico / / Entradas 1 y 3 (que se estn utilizando como entradas digitales 15 y 17 en est e caso) PololuQTRSensorsRC qtrrc ((unsigned char []) {0, 9, 15, 17}, 4); Esta biblioteca se encarga de las diferencias entre los sensores QTR-XRC interna mente QTR-xA y que le proporciona una interfaz comn a los dos sensores. La nica diferencia externa es de los constructor es, como se puede ver en el ejemplo de cdigo anteriormente. El primer argumento del constructor PololuQTRSensorsAnalog es una matriz de pines de entrada analgica (0 - 7), mientras que el primer argumento del constructor PololuQTRSensorsRC es una matriz de pines digit ales (0 - 19). Tenga en cuenta que las entradas analgicas 0-5 se puede utilizar como pines digitales 14-19. Para ms detalles, consulte la Seccin 3. La nica diferencia que puede experimentar es en el tiempo que se necesita para le er los valores de los sensores. Los sensores QTR-XRC todo se puede leer en paralelo, pero cada uno requiere la sincronizacin de un pul so que puede tardar hasta 3 ms (usted puede especificar cmo durante mucho tiempo la biblioteca debe cronometrar este pulso antes de un timeo ut y declarar el resultado completo negro). Los sensores QTR-xA utilizan el convertidor de analgico a digital (ADC) y por lo tanto debe ser ledo secuencialmen te. Adems, los resultados analgicas son producidas por promediando en su interior una serie de muestras para cada sensor (se puede espe cificar el nmero de muestras a promediar) para disminuir el efecto del ruido en los resultados. Dos bocetos de muestra estn disponibles, uno de los sensores QTR-xA y uno de los sensores QTR-XRC. Para ver estos ejemplos bocetos, abra el IDE Arduino y vaya a: Archivo> Ejemplos> PololuQTRSensors y seleccione PololuQTRAExample o PololuQTRRCExample. Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin 2. Instalacin Biblioteca Pgina 4 de 123. PololuQTRSensors Mtodos y Notas de uso Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin 3. PololuQTRSensors Mtodos y notas de uso Pgina 5 de la Referencia de comandos 12P ololuQTRSensor Para los sensores QTR-Xa, tendr que crear una instancia de un objeto PololuQTRSen sorsAnalog, y para los sensores QTR-XRC que tendr que crear una instancia de un objeto PololuQTRSensorsRC. Aparte de los cons tructores, estos dos objetos proporcionan la misma mtodos para leer valores de los sensores (ambas clases se derivan de la misma cla se base abstracta). La biblioteca proporciona acceso a los valores de sensores primas, as como para funciones de alto nivel, incluyend o la calibracin y la lnea de seguimiento. Esta seccin de la biblioteca define un objeto para cada uno de los dos tipos de s ensores QTR, con la PololuQTRSensorsAnalog clase destinado a usewithQTR-xAsensors y thePololuQTRSensorsRCclass destinados s ensores usewithQTR-XRC. Esta biblioteca se encarga de las diferencias entre los sensores QTR-XRC interna mente QTR-xA y que le proporciona una interfaz comn a los dos sensores. La nica diferencia externa es de los constructor es. Esto se consigue con las dos estas clases se derivan de los PololuQTRSensors clase base abstracta. Esta clase base no se pueden crear instancias. Las clases PololuQTRSensorsAnalog y PololuQTRSensorsRC deben instanciar antes de que se utilizan. Esto permite mltiples conjuntos de sensores QTR para ser controlados de forma independiente co

mo objetos PololuQTRSensors separadas. Para la calibracin, se asigna memoria mediante el comando malloc (). Esto conserv a la memoria RAM: si se calibran los ocho sensores con los emisores, tanto en un lugar, con un total de 64 bytes se dedicara a los v alores de calibracin de almacenamiento. Sin embargo, para una aplicacin en la que slo se utilizan tres sensores, y los emisores estn siempre en d urante lecturas, slo se requieren 6 bytes. Internamente, la biblioteca utiliza todas las funciones estndar de Arduino como m icros () para medir el tiempo y analogRead () o digitalRead () para obtener los valores de los sensores, por lo que debera funcionar en todos lo s Arduinos sin entrar en conflicto con otras bibliotecas. anular la lectura (unsigned int * sensorValues, unsigned char ReadMode = QTR_EMI TTERS_ON) Lee los valores de los sensores en bruto en una matriz. Debe haber espacio para tantos valores como haba sensores especificados en el constructor. Los valores devueltos son una medida de la reflectancia en la s unidades que dependen del tipo de sensor que se est usado, con valores ms altos corresponden a la reflectancia inferior (una superfic ie de color negro o un vaco). Sensores QTR-xA devolver un valor bruto entre 0 y 1023. Sensores QTR-XRC devolver un valor en bruto entre el 0 y el argumento timeout (en unidades de microsegundos) previstas en el constructor (que por defecto es 2000). Las funciones que se leen los valores de los sensores de todos toman un ReadMode argumento, que especifica el tipo de lectura que se llevar a cabo. Se definen varias opciones: QTR_EMITTERS_OFF especifica que la lectura debe ser hecha sin necesidad de encender los emisores de infrarrojos (IR), en cuyo caso la lect ura representa niveles de luz ambiente cerca del sensor; QTR_EMITTERS_ON especifica que los emisores deben estar encendidos para la lectu ra, lo que se traduce en una medida de reflectancia, y QTR_EMITTERS_ON_AND_OFF especifica que una lectura debe hacerse tanto en el encendido y apagado estados. Los valores devueltos cuando se utiliza la opcin QTR_EMITTERS_ON_AND_OFF estn dadas por el + max - off, Cuando est en la lectura con los emisores de encendido, apagado es la lectura con los emisores de descanso, y el mximo es el sensor de mxima la lectura. Esta opcin puede reducir la cantidad de interferencia de luz ambienta l desigual. Tenga en cuenta que el control del emisor se slo funcionan si se especifica un pin emisor vlido en el constructor. Ejemplo de uso: [8]; unsigned int sensor_values sensors.read (sensor_values); void emittersOn () Gire el LED IR. Esto es principalmente para uso por el mtodo de lectura, y llamar a estas funciones antes o despus de la lectura los sensores no tendrn ningn efecto sobre las lecturas, pero puede que desee utili zar stos para fines de prueba. Este mtodo se slo hacer algo si el pin emisor especificada en el constructor no es QTR_NO_EMITT ER_PIN. void emittersOff () Gire el LED IR apagado. Esto es principalmente para uso por el mtodo de lectura, y llamar a estas funciones antes o despus de la lectura los sensores no tendrn ningn efecto sobre las lecturas, pero puede que desee utili zar stos para fines de prueba. Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin 3. PololuQTRSensors Mtodos y notas de uso Pgina 6 de 12void calibrar (unsigned cha r ReadMode = QTR_EMITTERS_ON) Lee los sensores para la calibracin. Los valores de los sensores no son devueltos , sino que los valores mximos y mnimos encontrados

con el tiempo se guardan internamente y se utiliza para el mtodo readCalibrated ( ). Se puede acceder a la calibracin (es decir cruda mximo y lecturas de los sensores min) a travs del elemento pblica punteros calibrat edMinimumOn, calibratedMaximumOn, calibratedMinimumOff, y calibratedMaximumOff. Tenga en cuenta que estos punteros apuntarn a las matrices de longitud numSensors, segn lo especificado en el constructor, y slo se asignarn despus de cali brar () ha sido llamado. Si slo calibrar con los emisores de los arrays de calibracin que mantienen los valores d e corte no se asignarn. anular readCalibrated (unsigned int * sensorValues, unsigned char ReadMode = QTR _EMITTERS_ON) Lecturas de sensor vuelve calibrados a un valor entre 0 y 1.000, donde 0 corresp onde a una lectura que es menor o igual al valor mnimo ledo por calibrar () y 1000 corresponde a una lectura que es mayor que o igual a la valor mximo. Los valores de calibracin se almacenan por separado para cada sensor, de modo que se tienen en cuenta las diferencias en los sensores para automticamente. unsigned int readLine (unsigned int * sensorValues, unsigned char ReadMode = QTR _EMITTERS_ON, sin firmar caracteres WhiteLine = 0) Funciona igual que leer calibrado, pero con una caracterstica diseada para la lnea siguiente: esta funcin devuelve un estimado posicin de la lnea. La estimacin se realiza utilizando una media ponderada de los nd ices de sensor multiplicado por 1000, de modo que un valor de retorno de 0 indica que la lnea est directamente debajo del sensor 0 ( o fue visto por ltima vez por el sensor de 0 antes de que se pierdan), una devolver el valor de 1000 indica que la lnea est directamente debajo del sensor 1, 2000 indica que est por debajo del sensor de 2000, etc Los valores intermedios indican que la lnea entre dos sensores. La frmula es: 0 * value0 + 1,000 + 2,000 * valor1 valor2 * + ... -------------------------------------------value0 + valor1 valor2 + + ... Siempre y cuando sus sensores no estn demasiado separados en relacin con la lnea, e ste valor devuelto est diseado para ser monotnica, lo que lo hace ideal para su uso en el control PID de lazo cerrado. Adems, este mt odo recuerda donde vio por ltima vez la lnea, por lo que si alguna vez pierde la lnea hacia la izquierda o la derecha, es la po sicin de la lnea seguir indicando la direccin tiene que ir volver a adquirir la lnea. Por ejemplo, si el sensor 4 es el sensor ms a la derech a y se acaba por completo fuera de la lnea a la izquierda, Esta funcin continuar para volver 4000. Por defecto, esta funcin supone una lnea oscura (valores altos), rodeada de blanca s (valores bajos). Si su lnea es la luz en negro, ajuste el segundo WhiteLine argumento opcional como true. En este caso , cada valor del sensor ser reemplazado por el mximo valor posible menos de su valor real antes de que el promedio. unsigned int * calibratedMinimumOn Los valores mnimos medidos calibrados para cada sensor, con emisores sobre. Los p unteros estn sin asignar y se pusieron a luego asignado a exactamente el tamao requerido. Se 0 hasta calibrar () se llama, y gn el argumento de ReadMode calibrar (), slo las Activar o Desactivar valores pueden ser asignados, segn se re quiera. Esta y las siguientes variables se hacen pblicos de modo que usted puede utilizar para sus propios clculos y hacer cosas como guar dar los valores en la EEPROM, la realizacin de la cordura comprobacin, etc unsigned int * calibratedMaximumOn Los valores mximos medidos calibrados para cada sensor, con emisores sobre.

unsigned int * calibratedMinimumOff Los valores mnimos medidos calibrados para cada sensor, con emisores de fuera. unsigned int * calibratedMaximumOff Los valores mximos medidos calibrados para cada sensor, con emisores de fuera. Destructor: ~ PololuQTRSensors () Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin 3. PololuQTRSensors Mtodos y notas de uso Pgina 7 de 12 El destructor de la clase PololuQTRSensors vaca la memoria asignada para los arrays de calibracin. Constructor: PololuQTRSensorsRC () Esta versin del constructor realiza ninguna inicializacin. Si se utiliza, el usuar io debe llamar a init () antes de usar los mtodos en esta clase. Constructor: PololuQTRSensorsRC (sin firmar digitalPins * char, numSensors unsig ned char, unsigned int timeout = 2000, unsigned char emitterPin = QTR_NO_EMITTER_PIN); Este constructor slo llama a init (), a continuacin. anular PololuQTRSensorsRC :: init (sin firmar digitalPins * char, numSensors uns igned char, unsigned int timeout = 2000, unsigned char emitterPin = QTR_NO_EMITTER_PIN) Inicializa una (digital) matriz de sensores QTR-RC. Los digitalPins matriz debe contener los nmeros de pin digitales de Arduino para cada sensor. numSensors especifica la longitud de la matriz digitalPins (el nmero de sensores QTR-RC que est utilizando). numSensors no debe ser mayor que 16. timeout especifica el perodo de tiempo en microsegundos ms all de que considere que el sensor de lectura completamente negro. Es decir, si la longitud del impulso para un perno excede tiempo de espera, temp orizacin de los impulsos se detendr y la lectura para que el pasador ser considerado completo negro. Se recomienda establecer tiempo de espera que entre 1000 y 3000 nosotros, dependiendo de factores como la altura de los sensores y la iluminacin ambiente. Esto le permite acortar la du racin de un ciclo de sensor de lectura, mientras que el mantenimiento de mediciones tiles de reflectancia. emitterPin es el pin digital Arduino que controla si los LEDs IR estn encendidos o apagados. Este pin es opcional y slo existe en el 8A y 8RC QTR matrices de sensores. Si se especifica un PIN vlido, los emiso res slo se activan durante una lectura. Si se utiliza el valor QTR_NO_EMITTER_PIN (255), se puede dejar el pin emisor desco necta y los emisores IR siempre en. Constructor: PololuQTRSensorsAnalog () Esta versin del constructor realiza ninguna inicializacin. Si se utiliza este cons tructor, el usuario debe llamar a init () antes de usar los mtodos de esta clase. Constructor: PololuQTRSensorsAnalog (sin firmar analogPins * char, numSensors un signed char, unsigned char numSamplesPerSensor = 4, unsigned char emitterPin = QTR_NO_EMITTER_PIN) Este constructor slo llama a init (), a continuacin. anular init (sin firmar analogPins * char, unsigned char numSensors, numSamplesP erSensor unsigned char = 4, unsigned char emitterPin = QTR_NO_EMITTER_PIN) Inicializa una QTR-A (analgico) matriz de sensores. Los pasadores en formacin deben contener el nmero pin de entrada analgica de Arduin o para cada sensor. Por ejemplo, si los pasadores es {0, 1, 7}, Sensor 1 es en la entrada analgica 0, el sensor 2 es en la entrada analgica 1, y e l sensor 3 es en la entrada analgica 7. numSensors especifica la longitud de la matriz analogPins (el nmero de sensores Q TR-A que est utilizando). numSensors

no debe ser mayor que 16. numSamplesPerSensor indica el nmero de muestras analgicas de 10 bits a media por c anal (por sensor) para cada la lectura. El nmero total de conversiones analgico-digitales realizadas ser igual a numSensors veces numSamplesPerSensor. El aumento de este parmetro aumenta la supresin de ruido en e l costo de la frecuencia de muestreo. Este parmetro no debe superar los 64. Valor recomendado: 4. Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin 3. PololuQTRSensors Mtodos y notas de uso Pgina 8 de 12emitterPin es el pin digita l Arduino que controla si los LEDs IR estn encendidos o apagados. Este pin es opc ional y slo existe en el 8A y 8RC QTR matrices de sensores. Si se especifica un PIN vlido, los emiso res slo se activan durante una lectura. Si se utiliza el valor QTR_NO_EMITTER_PIN (255), se puede dejar el pin emisor desco necta y los emisores IR siempre en. Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin 3. PololuQTRSensors Mtodos y notas de uso Pgina 9 de Notas 12Usage Calibracin Esta biblioteca le permite usar el calibre () para calibrar fcilmente sensores de las condiciones especiales, se encontrar. Calibracin de los sensores puede conducir a lecturas de los sensores m ucho ms fiables, lo que a su vez puede ayudar a simplificar su cdigo desde entonces. Por lo tanto, recomendamos a construir una fase de calib racin en la rutina de inicializacin de la aplicacin. Este puede ser tan simple como un overwhich duracin fija que repite llamar al calibrar () method.During esta fase de calibracin, tendr que exponer cada uno de los sensores de reflectancia de las lecturas claras y ms oscuras que encontrarn. Por ejemplo, Si has hecho un seguidor de lnea, tendr que deslcelo por la lnea durante la fase de calibracin para cada sensor del puede obtener una lectura de lo oscura que la lnea es y cmo la luz el terreno es. Una rutina de calibracin de la muestra sera: # Include <PololuQTRSensors.h> / / Crear un objeto para el tipo de sensor (RC o analgica) / / En este ejemplo tenemos tres sensores en las entradas analgicas 0-2, alfilere s digitales aka 14-16 PololuQTRSensorsRC trim ((char []) {14, 15, 16}, 3); / / PololuQTRSensorsA trim ((char []) {0, 1, 2}, 3); void setup () { / / Opcional: esperar a que alguna entrada del usuario, como pulsar un botn / / A continuacin, iniciar la fase de calibracin y mover los sensores de ms de dos / / Extremos que encontrarn en la aplicacin de la reflexin: int i; for (i = 0; i <250; i + +) / / realizar la calibracin de unos 5 segundos { qtr.calibrate (); retardo (20); } / / Opcional: seal de que la fase de calibracin ha terminado y esperar an ms / / Entrada del usuario, tales como pulsar un botn } La lectura de los sensores Esta biblioteca le da un nmero de diferentes formas de leer los sensores. 1. Puede solicitar valores de los sensores en bruto utilizando el mtodo read (), que toma un argumento opcional que le permite

realizar la lectura de los emisores IR apagado (tenga en cuenta que convertir lo s emisores fuera slo con el apoyo del QTR-8x matrices de sensores de reflectancia). 2. Puede solicitar valores de los sensores calibrados utilizando el mtodo readCal ibrated (), que tambin tiene una opcin argumento que le permite realizar la lectura de los emisores IR apagado. Valores de los sensores calibrados siempre irn de 0 a 1000, con 0 siendo tan o ms reflectante (es decir, ms blanco) que la mayora de la superficie reflectante encontrado durante calibracin, y 1000 como siendo o menos reflectante (es decir, ms negro) de la supe rficie menos reflectante encontrado durante de calibracin. 3. Para las aplicaciones de lnea de deteccin, puede solicitar la ubicacin de la lnea utilizando el readLine () mtodo, que toma como parmetros opcionales un booleano que indica si la lnea es de color blanco sobre un fondo negro o negro sobre un fondo blanco fondo, y un booleano que indica si los emisores de infrarrojos deben estar encen dido o apagado durante la medicin. readLine () proporciona valores calibrados para cada sensor y devuelve un entero que indica donde se cree la lnea. Si est utilizando N sensores, un valor devuelto de 0 significa que piensa que la lnea est encendido o en el exterior del sensor de 0 y un valor de retorno de 1000 * (N-1), significa que piensa que la lnea est encendido o en el exterior del sensor N-1. A medida que desliza sus sensores a travs de la lnea, la posicin de la lnea cambiar monotnicamente de 0 a 1000 * (N-1), o viceversa. Esta posicin-line valor se puede utilizar para el control PID de bucle cerrado. Una rutina de muestra para obtener los valores de los sensores y realizar rudime ntaria lnea siguiente sera: Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin 3. PololuQTRSensors Mtodos y notas de uso Pgina 10 de bucle 12void () { sensores unsigned int [3]; / / Obtener valores de los sensores calibrados devueltas en la matriz de sensore s, junto con la posicin de lnea / / Posicin estar en el intervalo de 0 a 2.000, con 1.000 correspondiente a la lnea sobre el sensor central int posicin = qtr.readLine (sensores); / / Si los tres sensores ven muy baja reflectancia, tomar algn tipo de accin aprop iada para esta situacin if (sensores [0]> 750 && sensores [1] Sensores> 750 && [2]> 750) { / / Hacer algo. Tal vez esto significa que estamos en el borde de un curso oa pu nto de caer de una mesa, / / En este caso, lo que se quiere dejar de moverse, una copia de seguridad, y d ar la vuelta. volver; } / / Calcular el "error" de la posicin de lnea. Vamos a hacerlo de modo que el erro r es cero cuando / / El sensor central es sobre la lnea, ya que este es nuestro objetivo. Error es tar en el intervalo desde / / -1,000-1000. Si tenemos sensor de 0 a la izquierda y el sensor 2 de la derec ha, una lectura de -1,000 / / Significa que vemos la lnea de la izquierda y una lectura de 1000 significa q ue vemos la lnea en / / La derecha. int error = posicin - 1000; = 100; int leftMotorSpeed

int rightMotorSpeed = 100; if (error <-500) / / la lnea est a la izquierda leftMotorSpeed = 0; / / girar a la izquierda if (error> 500) / / la lnea est a la derecha rightMotorSpeed = 0; / / girar a la derecha / / Velocidad del motor de ajuste utilizando las dos variables de velocidad del motor por encima de } Control PID El valor entero devuelto por readLine () se puede convertir fcilmente en una medi da del error de posicin de la lnea siguiente aplicaciones, como se demostr en el ejemplo de cdigo anterior. La funcin que se uti liza para generar esta posicin / valor de error es diseado para ser monotnica, lo que significa que el valor ser casi siempre cambiar en la misma direccin a medida que mueves tu sensores en toda la lnea. Esto hace que sea una gran cantidad que se utilizar para el control PID. Explicar la naturaleza del control PID est ms all del alcance de este documento, pe ro wikipedia tiene una muy buena artculo [http://en.wikipedia.org/wiki/PID_controller] sobre el tema. El siguiente cdigo proporciona un ejemplo muy simple de control PD (creo que el tr mino integral PID no suele ser necesario cuando lo que se refiere a la lnea siguiente). La naturaleza especfica de las constantes se determinar por la aplicacin particular, pero que Debe tener en cuenta que la derivada constante Kd es generalmente mucho ms grande que el Kp constante proporcional. Esto es debido a que el derivada del error es una cantidad mucho ms pequea que el error en s mismo, por lo que con el fin de producir una correccin significativa se tiene que ser multiplicado por una constante mucho ms grande. LastError int = 0; void loop () { sensores unsigned int [3]; / / Obtener valores de los sensores calibrados devueltas en la matriz de sensore s, junto con la posicin de lnea / / Posicin estar en el intervalo de 0 a 2.000, con 1.000 correspondiente a la lnea sobre el sensor central int posicin = qtr.readLine (sensores); / / Calcular el "error" de la posicin de lnea. Vamos a hacerlo de modo que el erro r es cero cuando / / El sensor central es sobre la lnea, ya que este es nuestro objetivo. Error es tar en el intervalo desde / / -1,000-1000. Si tenemos sensor de 0 a la izquierda y el sensor 2 de la derec ha, una lectura de -1,000 / / Significa que vemos la lnea de la izquierda y una lectura de 1000 significa q ue vemos la lnea en / / La derecha. int error = posicin - 1000; / / Establecer la velocidad del motor en base a trminos PID proporcional y deriva tiva / / KP es la constante proporcional de punto flotante (tal vez comenzar con un v alor de alrededor de 0,1) / / KD es la constante derivado de punto flotante (tal vez comenzar con un valor de alrededor de 5) / / En cuenta que al hacer PID, es muy importante que usted recibe sus seales bie n, o de lo contrario la / Loop / control ser inestable Biblioteca de Arduino para los Pololu QTR sensores de reflectancia 2001-2010 Pol olu Corporacin 3. PololuQTRSensors Mtodos y notas de uso Pgina 11 de 12int motorSpeed = KP * error

+ KD * (error - LastError); LastError = error; / / M1 y M2 son las velocidades del motor de base. Es decir, son las velocidades de los motores deberan / / Girar a si est perfectamente en la lnea sin ningn error. Si los motores se corr esponden, / / M1 y M2 sern iguales. Al iniciar las pruebas de su lazo PID, podra ayudar a co menzar con / / Valores pequeos para M1 y M2. A continuacin, puede aumentar la velocidad a med ida que afinar su / / Constantes PID KP y KD. int m1Speed = M1 + motorSpeed; int m2Speed = M2 - motorSpeed; / / Puede ser que ayude a mantener las velocidades positivo (esto es opcional) / / En cuenta que es posible que desee agregar una lnea similar para mantener las velocidades de exceder / / Un valor mximo permitido if (m1Speed <0) m1Speed = 0; if (m2Speed <0) m2Speed = 0; / / Velocidad del motor de ajuste utilizando las dos variables de velocidad del motor por encima de

Вам также может понравиться