Model lokátoru se skládá z echo senzoru umístěném na desce, která se za pomocí servomotorku. Pokud senzor zjistí předmět v definované vzdálenosti zastaví se na 1 sekundu a oznámí to zvukem z buzzeru a pak nadále pokračuje v pohybu. Pohyb je definován jako kyvadlový – o 180 doprava/doleva a zpět ve smyčce.
Lokátor je složen ze základních Arduino součástek umístěných na konstrukci sestavené ze stavebnice Merkur.
Jedná se o projekt pro začátečníky.
Arduino součástky:
- 1 x Infiduino Uno R3 Mainboard + 1 x USB cable(0.5m length)
- 1 x Mini Breadboard
- 1x HC-SR04 Ultrasonic Sensor
- 1 x Passive Buzzer 5V
- 1 x SG90 Servo motor
- Propojovací drátky
Kód:
#include <Servo.h> Servo myservo; // create servo object to control a servo int servoPin = 9; int trigPin = 11; //Trig - green Jumper int echoPin = 12; //Echo - yellow Jumper int speakerPin = 4; //setup: int alarmDistanceinCm = 30;//cm int pauseIfDistance = 2000; // ms void setup() { //Serial Port begin Serial.begin (9600); //Define inputs and outputs pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(speakerPin, OUTPUT); myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object } void loop() { int i=0; int servoPosition = 0; digitalWrite(speakerPin,LOW); //clock direction movements: for (i=0;i<180;i++) { ProcessEachServoStep(i); } //counter clock direction movements: for (i=180;i>=0;i--) { ProcessEachServoStep(i); } } void ProcessEachServoStep(int i) { int distance=0; distance= GetDistanceCm(); Serial.println(distance); if (distance<alarmDistanceinCm) { ProcessAlarm(); } myservo.write(i); delay(20); } void ProcessAlarm() { //Code for alarm, e.g. buzzer: tone(4,500); delay(pauseIfDistance); Serial.println("ALARM"); noTone(4); } int GetDistanceCm() { //method return distance from sensor in cm: digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); pinMode(echoPin, INPUT); long duration = pulseIn(echoPin, HIGH); // convert the time into a distance int cm = (duration/2) / 29.1; return cm; }