Basic robot - Line-follower: Rozdiel medzi revíziami
Vytvorená stránka „Ďalší robot, ktorého sme pre vás pripravili je Line follower. Robot, ktorý prenasleduje čiaru. Na to aby vedel kde je čiara tak použícame číarový senzor QRT-8A, z ktorého vychádza 8 analogových výstupov. Na našom RP2350 máme iba 4 analogove vstupy, ciže využijeme eŠte jeden komponent a to je 8 kanálový multiplexor, ktorý prepína kanály, ktoré chceme čítať a prevádza ich na jeden výstup. Pri tomto robotovy sa naučíme ako sa cita…“ |
dBez shrnutí editace |
||
| (Jedna medziľahlá úprava od jedného ďalšieho používateľa nie je zobrazená) | |||
| Riadok 1: | Riadok 1: | ||
Ďalší robot, ktorého sme pre vás pripravili je Line follower. | Ďalší robot, ktorého sme pre vás pripravili, je Line follower. | ||
Robot, ktorý prenasleduje čiaru. Na to aby vedel kde je čiara | |||
Na našom RP2350 máme iba 4 | Robot, ktorý prenasleduje čiaru. Na to, aby vedel, kde je čiara, používame čiarový senzor QRT-8A, z ktorého vychádza 8 analógových výstupov. | ||
Pri tomto | |||
Bude to | Na našom RP2350 máme iba 4 analógové vstupy, čiže využijeme ešte jeden komponent, a to 8-kanálový multiplexor, ktorý prepína kanály, ktoré chceme čítať, a prevádza ich na jeden výstup. | ||
Pri tomto robote sa naučíme, ako sa číta z analógového výstupu, ako prepínať kanály a taktiež jeden algoritmus, ako vyhodnotiť pozíciu čiary. | |||
Bude to náročnejšie na programovanie, ale zato sa naučíte viac nielen o stavebnici, ale aj o tom, čo sú algoritmy. | |||
Samotný algoritmus bude vysvetlený v sekcii [[SW Setup]], ale najprv sa pustime do stavania. | |||
* [[Návod na poskladanie sledovača čiary | Návod na skladanie sledovača čiary]] | * [[Návod na poskladanie sledovača čiary | Návod na skladanie sledovača čiary]] | ||
Ak nájdete chyby v návode, prosíme napíšte nám. | Ak nájdete chyby v návode, prosíme napíšte nám. | ||
Bližšie informácie a nastavenia elektroniky nájdete v [[Electronics|manuáloch jednotlivých súčiastok]]. | |||
Na videu vidieť činnosť testovacieho programu - otočí oboma servami a potom neustále sníma všetkých 8 senzorov a zobrazuje ich do Serial Monitora. | |||
Najskôr je zobrazený pohyb krížom cez čiernu čiaru, ktorý potom vykonáme aj pri sledovaní výstupu - na ktorom vidieť postupne od posledného senzora - ako senzor prechádza ponad čiaru hodnota je viac ako 900, zatiaľ čo inak je menej ako 400. | |||
<youtube>cP4vufLOp5o</youtube> | |||
=== Jednoduchý testovací program === | === Jednoduchý testovací program === | ||
Jednoduchý test na overenie, že | Jednoduchý test na overenie, že obe servá, čiarový senzor a multiplexor fungujú tak, ako majú. | ||
<syntaxhighlight lang="C++"> | |||
#include <Servo.h> | |||
const int PIN_SERVO_LAVE = 10; | |||
const int PIN_SERVO_PRAVE = 11; | |||
const int SERVO_STOP = 90; // "stop" poloha pre 360° servá | |||
Servo servoLave; | |||
Servo servoPrave; | |||
void setup() { | |||
pinMode(13, OUTPUT); // S0 | |||
pinMode(14, OUTPUT); // S1 | |||
pinMode(15, OUTPUT); // S2 | |||
servoLave.attach(PIN_SERVO_LAVE, 540, 2400); | |||
servoPrave.attach(PIN_SERVO_PRAVE, 540, 2400); | |||
servoLave.write(SERVO_STOP); | |||
servoPrave.write(SERVO_STOP); | |||
Serial.begin(115200); | |||
delay(3000); | |||
Serial.println("are you there?"); | |||
mux_select(0); | |||
// Test laveho serva - kratke otocenie jednym a druhym smerom | |||
Serial.println("Test laveho serva..."); | |||
servoLave.write(SERVO_STOP + 30); | |||
delay(500); | |||
servoLave.write(SERVO_STOP - 30); | |||
delay(500); | |||
servoLave.write(SERVO_STOP); | |||
delay(500); | |||
// Test praveho serva | |||
Serial.println("Test praveho serva..."); | |||
servoPrave.write(SERVO_STOP + 30); | |||
delay(500); | |||
servoPrave.write(SERVO_STOP - 30); | |||
delay(500); | |||
servoPrave.write(SERVO_STOP); | |||
delay(500); | |||
} | |||
// vyber vstupný kanál 0-7 | |||
void mux_select(int i) | |||
{ | |||
digitalWrite(13, i & 1); | |||
digitalWrite(14, (i & 2) >> 1); | |||
digitalWrite(15, (i & 4) >> 2); | |||
} | |||
int x = 0; | |||
void loop() { | |||
Serial.print(x / 100); | |||
Serial.print((x % 100) / 10); | |||
Serial.print(x % 10); | |||
Serial.print(":"); | |||
for (int i = 0; i < 8; i++) | |||
{ | |||
mux_select(i); // vyber kanál | |||
int y = analogRead(26); // prečítaj hodnotu | |||
Serial.print(" "); // zobraz ju | |||
Serial.print(y /100); | |||
Serial.print((y % 100) / 10); | |||
Serial.print(y % 10); | |||
delay(10); | |||
} | |||
Serial.println(); | |||
x++; | |||
if (x == 999) x = 0; | |||
delay(300); | |||
} | |||
</syntaxhighlight> | |||
Aktuálna revízia z 00:07, 22. august 2026
Ďalší robot, ktorého sme pre vás pripravili, je Line follower.
Robot, ktorý prenasleduje čiaru. Na to, aby vedel, kde je čiara, používame čiarový senzor QRT-8A, z ktorého vychádza 8 analógových výstupov.
Na našom RP2350 máme iba 4 analógové vstupy, čiže využijeme ešte jeden komponent, a to 8-kanálový multiplexor, ktorý prepína kanály, ktoré chceme čítať, a prevádza ich na jeden výstup.
Pri tomto robote sa naučíme, ako sa číta z analógového výstupu, ako prepínať kanály a taktiež jeden algoritmus, ako vyhodnotiť pozíciu čiary.
Bude to náročnejšie na programovanie, ale zato sa naučíte viac nielen o stavebnici, ale aj o tom, čo sú algoritmy.
Samotný algoritmus bude vysvetlený v sekcii SW Setup, ale najprv sa pustime do stavania.
Ak nájdete chyby v návode, prosíme napíšte nám. Bližšie informácie a nastavenia elektroniky nájdete v manuáloch jednotlivých súčiastok.
Na videu vidieť činnosť testovacieho programu - otočí oboma servami a potom neustále sníma všetkých 8 senzorov a zobrazuje ich do Serial Monitora. Najskôr je zobrazený pohyb krížom cez čiernu čiaru, ktorý potom vykonáme aj pri sledovaní výstupu - na ktorom vidieť postupne od posledného senzora - ako senzor prechádza ponad čiaru hodnota je viac ako 900, zatiaľ čo inak je menej ako 400.
Jednoduchý testovací program
Jednoduchý test na overenie, že obe servá, čiarový senzor a multiplexor fungujú tak, ako majú.
#include <Servo.h>
const int PIN_SERVO_LAVE = 10;
const int PIN_SERVO_PRAVE = 11;
const int SERVO_STOP = 90; // "stop" poloha pre 360° servá
Servo servoLave;
Servo servoPrave;
void setup() {
pinMode(13, OUTPUT); // S0
pinMode(14, OUTPUT); // S1
pinMode(15, OUTPUT); // S2
servoLave.attach(PIN_SERVO_LAVE, 540, 2400);
servoPrave.attach(PIN_SERVO_PRAVE, 540, 2400);
servoLave.write(SERVO_STOP);
servoPrave.write(SERVO_STOP);
Serial.begin(115200);
delay(3000);
Serial.println("are you there?");
mux_select(0);
// Test laveho serva - kratke otocenie jednym a druhym smerom
Serial.println("Test laveho serva...");
servoLave.write(SERVO_STOP + 30);
delay(500);
servoLave.write(SERVO_STOP - 30);
delay(500);
servoLave.write(SERVO_STOP);
delay(500);
// Test praveho serva
Serial.println("Test praveho serva...");
servoPrave.write(SERVO_STOP + 30);
delay(500);
servoPrave.write(SERVO_STOP - 30);
delay(500);
servoPrave.write(SERVO_STOP);
delay(500);
}
// vyber vstupný kanál 0-7
void mux_select(int i)
{
digitalWrite(13, i & 1);
digitalWrite(14, (i & 2) >> 1);
digitalWrite(15, (i & 4) >> 2);
}
int x = 0;
void loop() {
Serial.print(x / 100);
Serial.print((x % 100) / 10);
Serial.print(x % 10);
Serial.print(":");
for (int i = 0; i < 8; i++)
{
mux_select(i); // vyber kanál
int y = analogRead(26); // prečítaj hodnotu
Serial.print(" "); // zobraz ju
Serial.print(y /100);
Serial.print((y % 100) / 10);
Serial.print(y % 10);
delay(10);
}
Serial.println();
x++;
if (x == 999) x = 0;
delay(300);
}