Урок 4. Создание прототипа охранной системы

Урок 4. Создание прототипа охранной системы

План:

1. Дальномер
2. Библиотека NewPing

 

Хочешь освоить программирование Arduino в аудитории и с преподавателем- записывайся на блиц-курс по робототехнике.

Теоретическая часть

1 Дальномер

Дальномер – это устройство, с помощью которого измеряют расстояние до препятствия. Существуют инфракрасные, ультразвуковые, лазерные дальномеры. Далее рассмотрим ультразвуковой дальномер HC-SR04. Его внешний вид изображен на рисунке 1.

Рисунок 1 – Ультразвуковой дальномер HC-SR04

Как видно из рисунка, у данного дальномера четыре вывода (2.54мм):
VCC: плюс, питание 5В.
GND: минус, питание.
TRIG (T): вывод на излучатель.
ECHO (R): вывод на приемник.

Принцип работы дальномера следующий: Сначала на вывод trig подается импульс, продолжительностью 10мкс. Физически через излучатель в виде ультразвуковой волны посылается 8 импульсов с частотой 40КГц. Волна отражается от ближайшего препятствия и доходит до приемника. На выводе принимающей части возникает импульс, длина которого, пропорциональна времени, за которое волна вернулась к датчику, т.е. пропорциональна расстоянию до препятствия.
В сантиметрах расстрояние до препятствия можно получить по следующей формуле:
Расстояние до препятствия (см) = длина импульса (мкс) / 58.

 

2. Библиотека NewPing

Библиотека NewPing предназначена для удобной работы с дальномером. Она не входит в число стандартных библиотек, ее можно скачать по ссылке 
После загрузки, папку NewPing необходимо поместить в папку libraries в рабочем каталоге arduino. Для того, чтобы добавить библиотеку к проекту нужно прописать строку: #include .
В библиотеке NewPing описан реализован класс. Соответственно, для работы с дальномером, нужно создать объект. При создании объекта, в списке атрибутов указываются номер пина для излучателя, номер пина для приемника и, необязательно, максимальное расстояние. По умолчанию максимальное расстояние равно 500см.

Прототип объявления:
NewPing sonar(trig_pin, echo_pin [, max_distance_sm]);

Пример:
NewPing sonar(9, 10, 100);

Библиотека предоставляет следующие методы класса, для работы с дальномером:
sonar.ping(); — отправляет ультразвуковую волну, возвращает время, за которое она возвращается на приемник. Если за максимально допустимое время волна не вернулась на приемник, метод возвращает 0.
sonar.ping_in(); — отправляет ультразвуковую волну, возвращает расстояние до препятствия в дюймах. Если препятствие находится на расстоянии, превышающем допустимое, возвращается 0.
sonar.ping_cm(); — отправляет ультразвуковую волну, возвращает расстояние до препятствия в сантиметрах. Если препятствие находится на расстоянии, превышающем допустимое, возвращается 0.
sonar.ping_median(ping_number); — посылает несколько импульсов (по умолчанию 5 ), возвращает медианное значение времени их возврата в микросекундах.
sonar.convert_in(echoTime); — преобразует длительность импульса(микросекунды) в расстояние (дюймы).
sonar.convert_cm(echoTime); — преобразует длительность импульса(микросекунды) в расстояние (сантиметры).
sonar.ping_timer(function); — отправляет импульс и вызывает функцию для проверки, был ли завершен передача-прием волны.
sonar.check_timer(); — возвращает значение ИСТИНА, если волна вернулась в допустимое время.
timer_us(frequency, function); — вызывает функцию с определенной частотой в микросекундах.
timer_ms(frequency, function); — вызывает функцию с определенной частотой в миллисекундах.
timer_stop(); — останавливает таймер.

Практическая часть

К набору элементов прошлого урока добавляем дальномер и создаем прототип охранной системы: пока в зоне видимости дальномера нет препятствия, серводвигатель вращается по- и против часовой стрелки на 180 градусов, горит зеленый светодиод. Как только появляется препятствие серводвигатель останавливается, загорается красный светодиод, в порт шлется сигнал ALARM. Расстояние до препятствия регулируется потенциометром и отправляется в порт.
Схема подключения элементов изображена на рисунке 2.

Рисунок 2 – Схема подключения элементов

Листинг программы представлен ниже 

#include
#include <NеwPing.h>
#define red 12
#define green 13
#define res A0
#define pinmotor 11
#define echo 8
#define trig 9

Servo motor;
int incpecting_distance=100; //расстояние, на котором будет совершаться поиск объекта.
int previous_incpecting_distance=100;
int red_state=LOW;
int green_state=HIGH;
int motor_state=HIGH;
bool scan_begin=true;
bool alarm_begin=true;
double distance=0;
NewPing sonar(trig, echo, 300);

void setup()
{
  Serial.begin(9600);
  pinMode(12,OUTPUT);
  pinMode(13,OUTPUT);
  pinMode(2,OUTPUT);
  motor.attach(pinmotor);
}
void loop()
{

for (int i=0;i<180;i++)
 {
   set_actuators(i);
   get_sensors();
   if ((distance<incpecting_distance)&&(distance!=0))
     alarm();
   else scan();
 }
for (int i=180;i>0;i—)
 {
   set_actuators(i);
   get_sensors();
   if ((distance<incpecting_distance)&&(distance!=0))
    alarm();
   else scan();
 }
delay(100);
}

void alarm()
{
red_state=HIGH;
green_state=LOW;
motor_state=LOW;
if (alarm_begin)
 {
   Serial.println(«ALARM!»);
   alarm_begin=false; 
   scan_begin=true;
 }

}
void scan()
{
red_state=LOW;
green_state=HIGH;
motor_state=HIGH;
if (scan_begin)
 {
   Serial.println(«SCANING…»);
   scan_begin=false;
   alarm_begin=true;

 }

}
void set_actuators(int i)
{
digitalWrite(green,green_state);
digitalWrite(red,red_state);
if (motor_state)
 motor.write(i);
}
void get_sensors()
{
previous_incpecting_distance=incpecting_distance;
distance=sonar.convert_cm(sonar.ping_median(5));
incpecting_distance=analogRead(res)/10+10;
if (abs(previous_incpecting_distance-incpecting_distance)>10)
 {
   Serial.print(«New inspecting distance «);
   Serial.print(incpecting_distance);
   Serial.println(» cm»);
 }
}

 


Урок 3


Учебная программа курса


Урок 5

Центр робототехники "BOTEON".
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: