ProjektX : Enostaven radar za robota

Share on facebook
Share on twitter
Ime projekta Enostaven radar za robota
Ideja ali problem senzor Vodenje robota po prostoru potrebujemo ‘radar’. Ali kako upravljati UV senzor na robotu in meriti razdaljo na večih straneh?
Rešitev Na servo motor postavimo UV senzor. Pri vsakem željenem kotu izmerimo razdalj.
UV senzor na servomotorju
Spisek potrebščin (BOM – Bill of Material) Za izvedbo potrebujemo:

  • Arduino,
  • Uv senzor – SRF04
  • nosilec za UV senzor, vijaki
  • končni analogni servomotor
  • LCD prikazovalnik
  • ostalo povezovalne žičke za UV senzor, vijake za namestitev UV senzorja na nosilec, vijake za namestitev nosilca na servomotor, protoboard oz testna ploščica, povezovalne žičke za protoboard oz. testno ploščico, napajanje

in primerna orodja: spajkalo, izvijači, pinceto

Izvedba Priključite servomotor:

  • črna/rjava žička na servomotorju se priključi na maso (GND) na Arduinu
  • rdeča žička na servomotorju se priključi na 5V na Arduinu
  • oranžna žička na servomotorju se priključi na pin 6 na Arduinu

 

Priključite sledeče pine LCD prikazovalnika 16×2 (ali drugega z Hitachi HD44780 procesorjem):

LCD pini Arduino pini
11 (D4) 05
10 (D3) 04
09 (D2) 03
08 (D1) 02
06 (Enable) 11
05 (R/W) Gnd
04 (Rs) 12
03 (V0) GND
02 (Vcc) +5V
01 (GND) GND

 

Priključite ultrazvočni senzor SRF04:

SRF04 pini Arduino pini
1 (GND) GND
3 (trigger) 8
4 (Echo) 7
5 (5v Suppy) +5v

in uporabite izdelano knjižnico ukazov http://www.arduino.cc/en/Reference/Servo

Primer kode:

#include <Servo.h>
#include <LiquidCrystal.h>
#define echoPin 7 // Pin za sprejem echo impulza
#define trigPin 8 // Pin za oddajo trigger impulza

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Servo MojServo;

void setup()
{
lcd.begin(16, 2); // Pozicija (kolumna in vrstica) prikazovanja naslednjega teksta.
lcd.print(“Razdalja je:”); // izpis teksta
Serial.begin(9600); // nastavitev komunikacije s SRF04
pinMode(echoPin, INPUT); // določitev pina za odčitek SRF04
pinMode(trigPin, OUTPUT); // določitev pina za proženje SRF04
MojServo.attach(6); //analog pin
}

void loop()
{
// obrni na desno
val = 1000;
val1 = map(val, 0, 1000, 179, 0); //pretvori v servo korak
MojServo.write(val1); // ukaz za servo
delay(150); // zakasnitev za premik servomotorja
digitalWrite(trigPin, LOW); // postavi Trigger pin na Low za 2 mikrosekundi
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // postavi Trigger pin na HIGH za 10 mikrosekundi delayMicroseconds(10);
digitalWrite(trigPin, LOW); // postavi Trigger pin na LOW za začetek merjenja
int distance = pulseIn(echoPin, HIGH); // odčitaj
distance= distance/58; // Izračunaj odčitek v cm
lcd.setCursor(0, 1); // pozicioniraj naslednji izpis
lcd.print(”Desno :“); // dodaj še napis cm
lcd.print(distance); // izpiši razdaljo
lcd.print(” cm “); // dodaj še napis cm
delay(50); // zakasnitev do naslednjega merjenja

// obrni do sredino
val = 500;
val1 = map(val, 0, 1000, 179, 0); //pretvori v servo korak
MojServo.write(val1); // ukaz za servo
delay(150); // zakasnitev za premik servomotorja
digitalWrite(trigPin, LOW); // postavi Trigger pin na Low za 2 mikrosekundi
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // postavi Trigger pin na HIGH za 10 mikrosekundi delayMicroseconds(10);
digitalWrite(trigPin, LOW); // postavi Trigger pin na LOW za začetek merjenja
int distance = pulseIn(echoPin, HIGH); // odčitaj
distance= distance/58; // Izračunaj odčitek v cm
lcd.setCursor(0, 1); // pozicioniraj naslednji izpis
lcd.print(”sredina :“); // dodaj še napis cm
lcd.print(distance); // izpiši razdaljo
lcd.print(” cm “); // dodaj še napis cm
delay(50); // zakasnitev do naslednjega merjenja

// obrni na levo
val = 0;
val1 = map(val, 0, 1000, 179, 0); //pretvori v servo korak
MojServo.write(val1); // ukaz za servo
delay(150); // zakasnitev za premik servomotorja
digitalWrite(trigPin, LOW); // postavi Trigger pin na Low za 2 mikrosekundi
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // postavi Trigger pin na HIGH za 10 mikrosekundi delayMicroseconds(10);
digitalWrite(trigPin, LOW); // postavi Trigger pin na LOW za začetek merjenja
int distance = pulseIn(echoPin, HIGH); // odčitaj
distance= distance/58; // Izračunaj odčitek v cm
lcd.setCursor(0, 1); // pozicioniraj naslednji izpis
lcd.print(”Levo :“); // dodaj še napis cm
lcd.print(distance); // izpiši razdaljo
lcd.print(” cm “); // dodaj še napis cm
delay(50); // zakasnitev do naslednjega merjenja

//nazaj
val = 500; // obrni nazaj do sredine
val1 = map(val, 0, 1000, 179, 0); //pretvori v servo korak
MojServo.write(val1); // ukaz za servo
delay(150); /malo zakasnitve, da lahko zaključi ukaz
}

admin

admin

Leave a Replay