Imos seguir unha liña negra de 2cm sobre fondo branco utilizando dous sensores IR dixitais situados no interior da liña.
Os datos dos sensores
Cada sensor enviará 0 cando estea sobre negro e 1 cando estea sobre branco.
Para seguir unha liña no chan haberá que darlle ao robot as instrución precisas para que se mova segundo as cores que detecten os sensores. Por exemplo, para seguir unha liña negra sobre unha superficie branca teremos os seguintes casos:
Sensor esquerdo | Sensor dereito | Que sucede | Instrucións |
0 – Negro | 0 – Negro | está dentro da liña | avanzar |
0 – Negro | 1 – Branco | sae pola dereita | avanza e xira á esquerda |
1 – Branco | 0 – Negro | sae pola esquerda | avanza e xira á dereita |
1 – Branco | 1 – Branco | está fóra da liña | retroceder |
Estas son as instrucións máis básicas e debemos mellorar este programa máis adiante.
O programa
Empezamos introducindo os parámetros e funcións dos sensores e movemento do robot, como na práctica de moverse dentro dun recinto. Isto faino ti.
Despois, no loop, dámoslle as instrucións da táboa anterior:
void loop() { // negro-negro -> O robot avanza if (digitalRead(IR_esq)==0 && digitalRead(IR_der)==0){ m1(1, 125); m2(1, 125); } // negro-branco -> xira cara á esquerda else if (digitalRead(IR_esq)==0 && digitalRead(IR_der)==1){ m1(1, 100); m2(1, 180); } // branco-negro -> xira cara á dereita else if (digitalRead(IR_esq)==1 && digitalRead(IR_der)==0){ m1(1, 180); m2(1, 100); } // branco-branco -> retrocede else{ m1(-1, 100); m2(-1, 100); } }
Prácticas:
En primeiro lugar elaboraremos o programa básico do segue-liñas, probarémolo e despois introduciremos algunhas melloras:
- Que non retroceda nunca! Cando o mClon sae fóra da liña, no canto de retroceder habería que indicarlle que xire no sentido axeitado para atopala. Engade unha variable que valla 1 se o robot sae da liña pola dereita e valla 0 cando sae pola esquerda. Cada vez que o robot detecte que saíu da liña cos dous sensores deberá xirar cara a ela.
- Axustar velocidades: Imos intentar que o mClon se mova o máis rápido posible pola liña sen balancearse. Se a diferencia entre velocidades é pequena avanzará moito e xirará pouco, e se é moi acusada, avanzará pouco e xirará moito. O primeiro caso interésanos para cando o robot sae por un lado pero aínda ten un sensor dentro da liña, e o segundo caso interésanos cando o robot se perdeu e ten que atopar a liña de novo. Se o robot se atopa nunha recta deberá ir o máis rápido posible. Axusta as velocidades e intenta facer o circuíto no menor tempo posible.
Sensor esquerdo | Sensor dereito | 000000 | Que sucede | Instrucións |
0 – Negro | 0 – Negro | 000000 | está dentro da liña | avanzar rápido |
0 – Negro | 1 – Branco | 000000 | sae pola dereita | avance con xiro suave á esquerda |
1 – Branco | 0 – Negro | 000000 | sae pola esquerda | avance con xiro suave á dereita |
1 – Branco | 1 – Branco | 000000 | está fóra da liña | avance con xiro acusado no sentido da liña |