Basic robot - Explorer: Rozdiel medzi revíziami

Zo stránky 3D liga wiki
Prejsť na navigáciu Prejsť na vyhľadávanie
dBez shrnutí editace
dBez shrnutí editace
 
(Jedna medziľahlá úprava od rovnakého používateľa nie je zobrazená.)
Riadok 10: Riadok 10:


Bližšie informácie a nastavenia elektroniky nájdete v [[Electronics | manuále jednotlivej súčiastky ]]  
Bližšie informácie a nastavenia elektroniky nájdete v [[Electronics | manuále jednotlivej súčiastky ]]  
<youtube>n33QAzdACIY</youtube><br>
Okrem testu motorov robota pripojte cez USB kábel a pozorujte meranie ultrazvukom v serial monitore. <br>
Zmenou hodnoty SERVO_STOP (napr. na 93 alebo podobnú blízku hodnotu 90) môžete skúsiť dosiahnuť, aby robot jazdil rovnejšie.


<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">

Aktuálna revízia z 06:59, 20. august 2026

Jeden z jednoduchych robotov je prieskumník. Ma jednoduchu konštrukciu s dvomi zrkadlovo otočenými 360° servami a ultrazvukovým senzorom napojený na 180° servo pre skenovanie okolia. Je to príjemný základ do stavania a programovania svojich prvých robotov.

Ak nájdete chyby v návode, prosíme napíšte nám.

Jednoduchý testovací program

Jednoduchý test na overenie, že všetky tri servá a ultrazvukový senzor fungujú tak, ako majú.

Bližšie informácie a nastavenia elektroniky nájdete v manuále jednotlivej súčiastky


Okrem testu motorov robota pripojte cez USB kábel a pozorujte meranie ultrazvukom v serial monitore.
Zmenou hodnoty SERVO_STOP (napr. na 93 alebo podobnú blízku hodnotu 90) môžete skúsiť dosiahnuť, aby robot jazdil rovnejšie.

#include <Servo.h>

// GPIO piny podľa manuálu prieskumníka
const int PIN_SERVO_LAVE    = 4;
const int PIN_SERVO_PRAVE   = 5;
const int PIN_SERVO_STREDNE = 6;
const int PIN_TRIG          = 7;
const int PIN_ECHO          = 8;

const int SERVO_STOP = 90; // "stop" poloha pre 360° servá

Servo servoLave;
Servo servoPrave;
Servo servoStredne;

long nameraj_vzdialenost_cm() {
  digitalWrite(PIN_TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);

  long trvanie = pulseIn(PIN_ECHO, HIGH, 30000); // timeout 30ms (~5m)
  if (trvanie == 0) return -1; // nič nenamerané (mimo dosahu / timeout)

  return trvanie / 58; // prevod na cm
}

void setup() {
  Serial.begin(115200);

  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);

  servoLave.attach(PIN_SERVO_LAVE, 540, 2400);
  servoPrave.attach(PIN_SERVO_PRAVE, 540, 2400);
  servoStredne.attach(PIN_SERVO_STREDNE, 540, 2400);

  servoLave.write(SERVO_STOP);
  servoPrave.write(SERVO_STOP);
  servoStredne.write(90);

  delay(1000);
  Serial.println("Test motorckov a senzora spusteny.");
}

void loop() {
  // 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);

  // Test stredneho serva - vychylenie do oboch krajnych poloh
  Serial.println("Test stredneho serva...");
  servoStredne.write(0);
  delay(500);
  servoStredne.write(180);
  delay(500);
  servoStredne.write(90);
  delay(500);

  // Test ultrazvukoveho senzora
  long vzdialenost = nameraj_vzdialenost_cm();
  Serial.print("Namerana vzdialenost: ");
  if (vzdialenost < 0) {
    Serial.println("mimo dosahu");
  } else {
    Serial.print(vzdialenost);
    Serial.println(" cm");
  }

  delay(2000);
}