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

 Krátké video

FB gp tw

Další podobné články