Basic robot - Explorer: Rozdiel medzi revíziami

Zo stránky 3D liga wiki
Prejsť na navigáciu Prejsť na vyhľadávanie
Sebastian (diskusia | príspevky)
d Sebastian premiestnil stránku Basic robot - Scavanger na Basic robot - Explorer
Sebastian (diskusia | príspevky)
dBez shrnutí editace
Riadok 7: Riadok 7:
=== Jednoduchý testovací program ===
=== Jednoduchý testovací program ===


Work in progress...
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 | Electronics]]
 
<syntaxhighlight lang="cpp">
#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);
  servoPrave.attach(PIN_SERVO_PRAVE);
  servoStredne.attach(PIN_SERVO_STREDNE);
 
  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);
}
</syntaxhighlight>

Verzia z 10:37, 14. 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 Electronics

#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);
  servoPrave.attach(PIN_SERVO_PRAVE);
  servoStredne.attach(PIN_SERVO_STREDNE);

  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);
}