Добавляйте самоделоки - получайте оплату

*кликни за подробностями

» » » Дальномер на платформе Arduino!

Дальномер на платформе Arduino!

Дальномер на платформе Arduino!

Всем Доброго Времени Суток! В этой статье я хотел бы рассказать, как с помощью Arduino, набора светодиодов и ультразвукового датчика можно собрать устройство, определяющее расстояние от наблюдателя до объекта, иными словами, дальномер. И так поехали!
Что нам необходимо:
Обычная коробка. Желательно небольших размеров, так как в ней будет находится всего лишь один микроконтроллер.
Дальномер на платформе Arduino!

С помощью ультразвукового датчика HC-SR04 мы сможем определять расстояние.
Дальномер на платформе Arduino!

Четырехразрядный индикатор нам нужен для вывода полученных значений.
Дальномер на платформе Arduino!

Набор светодиодов любых цветов (я использовал зеленый, так как они ярче), резисторов на 220 Ом, проводов или же перемычек, а также макетную плату.

Дальномер на платформе Arduino!
Дальномер на платформе Arduino!
Дальномер на платформе Arduino!
Дальномер на платформе Arduino!

Чтобы компоненты нашего устройства надежно крепились, я буду их спаивать.
Для этого нам нужен паяльник, флюс, припой, а также макетная плата под пайку.
Дальномер на платформе Arduino!
Дальномер на платформе Arduino!

Ну и конечно же, без Arduino нам не обойтись! (Можно выбрать любой микроконтроллер, я предпочел Arduino Leonardo или же ее эквивалент Iskra Neo)
Дальномер на платформе Arduino!

Из инструментов нам нужен паяльник, как я говорил выше, ножик и кусачки.
Дальномер на платформе Arduino!

Теперь приступим к сборке устройства.
Шаг№1
Для начало, используя breadboard, соберем прототип нашего будущего устройства. Выглядеть это будет примерно так..
Дальномер на платформе Arduino!

Не беспокойтесь! Страшного в этой путанице проводов ничего нет!
У датчика HC-SR04 четыре контакта: плюс, минус (которые мы втыкаем в 5V и GND контроллера), Trig и Echo (вставляем в 12 и 11 пины ардуино соответственно)
У четырехразрядного индикатора 3 провода: питание, земля и сигнальный. Последний соединяем с 9 пином Arduino.
Три светодиода подсоединяем к 6, 5 и 4 контактам контроллера последовательно с резисторами. Не забываем про полярность. Ток течет от более длинной ножке к короткой.
Все, когда мы собрали наш прибор на макетке, загрузили скетч (будет в конце статьи) и удостоверились, что все работает, смело приступаем к пайке.
Шаг№2
Для начала припаяем ультразвуковой датчик к макетной плате. Я использовал небольшую по своим размерам макетку, так как количество элементов не превышает 7.
Дальномер на платформе Arduino!

После этого при помощи кусачек откусим ножки (извиняюсь за тавтологию), сделав их короче, чтобы не мешались и на вид были красивее!
Дальномер на платформе Arduino!

После этого припаяем четыре провода на против контактов датчика.
Дальномер на платформе Arduino!
Дальномер на платформе Arduino!

Также не забываем про кусачки!
Дальномер на платформе Arduino!
Дальномер на платформе Arduino!

Шаг№3
Датчик на месте, осталось припаять три светодиода вместе с резисторами.
Дальномер на платформе Arduino!
Дальномер на платформе Arduino!

С обратной стороны это выглядит вот так:
Дальномер на платформе Arduino!

Шаг№4
На боковой части коробки вырежем круглое отверстие для питания.
Дальномер на платформе Arduino!

На крышке необходимо вырезать полость под размер (чуть меньше по длине) вашей макетки, а также просверлить отверстия для саморезов.
Дальномер на платформе Arduino!
Дальномер на платформе Arduino!

Теперь если мы прикрутим пустую макетку без элементов на ней (я это сделал просто для демонстрации..) получится примерно следующее:
Дальномер на платформе Arduino!

Шаг№5
Так, чтобы было удобнее я предлагаю сначала соединить провода с ардуинкой, а уже потом прикручивать макетку к крышке коробки. Также не забудем про наш индикатор, который я расположил выше макетки.
Дальномер на платформе Arduino!
Дальномер на платформе Arduino!
Дальномер на платформе Arduino!
Дальномер на платформе Arduino!

Все на этом сборка устройства закончена!
Осталось лишь загрузить следующий скетч и наслаждать игрушкой!
#include 
#include 
NewPing sonar(12,11, 400);
int a,j,b;
unsigned long t = 0;
int masiv[]={1,0,0,0,1,0,0,0,1};
void setup() 
{
 for(int i=4; i<7;i++)
 {
   pinMode(i,OUTPUT);
 }
 displayClear(9);
 for(int i=4; i<7;i++)
 {
   digitalWrite(i,0);
 } 
  }
void loop() 
{
  j=7;  
  for(int i=0; i100) tone(2,70);
    digitalWrite(j,masiv[i]);
    while(millis() <= t + b )
    {
    delay(50);
    a = sonar.ping_cm();
    displayInt(9, a);
    b=a;    
    }
    t = millis();
    if(j==4) j=7;
    if (i==8)
    {
     digitalWrite(4,1);
     while(millis() <= (t + b)+(b*2)  )  
     {
    delay(50);
    a = sonar.ping_cm();
    displayInt(9, a);
    b=a;
     }     
     digitalWrite(4,0);
     t = millis();
    }
  }

Дальномер на платформе Arduino!
Дальномер на платформе Arduino!

Пару слов у программном коде. Благодаря ему, наши три светодиода станут мигать поочередно друг за другом, а скорость их мигания будет зависеть от расстояния до объекта, которое вычисляет ультразвуковой датчик. Но чтобы осуществить мигание светодиодов не совсем логично использовать функцию delay(), поскольку при ее применении контроллер замирает и никакие вычисления не производятся. Есть несколько способов для решения этой проблемы. В частности одни из них - использование функции millis(), которая возвращает число в миллисекундах с момента работы контроллера. И как же нам осуществить задержку на условные 100 миллисекунд? Для этого я создал по сути пустой цикл, выход из которого будет только после этих 100 миллисекунд, а затем программа переходит к включению/выключению светодиодов.

Ну на этом все! Спасибо, что прочитали эту статью до конца. Надеюсь вам она не только понравилась, но и вдохновила на море новых поделок и изобретений!
Чтобы написать комментарий необходимо войти на сайт через соц. сети (или зарегистрироваться):
Обычная регистрация
7 комментариев
  1. Иван_Похмельев
    Объясните, пожалуйста, почему такие странные показания на двух последних фотографиях.
  2. ЮрИк_ Автор
    Иван, показания 6см и 11см это расстония от датчика до ладони)
    1. Иван_Похмельев
      То есть, предпоследняя фотография (на которой 77) просто неудачная из-за какой-то паразитной подсветки верхних сегментов в результате некорректной работы динамической индикации? На шестёрке тоже паразитная подсветка, хотя и не столь явная.
  3. ЮрИк_ Автор
    Да,возможно)
    1. fordragon
      Может быть, у вас остался скетч рабочий? В этом, оказывается, даже знак "<" заменился на "& lt;")
  4. fordragon
    Здравствуйте! Когда загружаю ваш скетч, выдает кучу синтаксических ошибок почему-то. Я конечно в синтаксисе не очень шарю, но в некоторых местах совсем не могу разобраться, что нужно исправить. Например, в куске:
    for(int i=0; i100) tone(2,70);
    digitalWrite(j,masiv[i]);
    , что значит слитное i100? почему не ставится инкремент? не нужны ли фигурные скобки, чтобы последующие две функции после for относились к одному циклу, или же я неправа? И так по всему коду ругается компилятор. Можно ли как-то с Вами связаться, уточнить код? Пытаюсь сделать курсовой проект на основе ваше статьи.

    Также в коде в месте, где подключаются библиотеки, не указаны их названия. Догадаться, конечно, можно, но все-таки скетч этот не совсем подходит для мгновенной проверки работоспособности, приходится додумываться)
    1. ЮрИк_ Автор
      Привет) Напиши мне сюда https://vk.com/id166956339
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Онлайн чат

Опрос
Сколько по времени, чаше всего, Вы делаете самоделку?

Последние комментарии

Все комментарии

Комментаторы месяца

Иван_Похмельев
Комментариев: 1173 Публикаций: 0
1
Валерий
Комментариев: 1307 Публикаций: 38
2
popvovka
Комментариев: 32 Публикаций: 4
3
axivovka
Комментариев: 13 Публикаций: 0
4
Кудеяр
Комментариев: 206 Публикаций: 55
5