Ничего не найдено :(
    В гостях у Самоделкина! » Электроника » Arduino » Дальномер на платформе Arduino!

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


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

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

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

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





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

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

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

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

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

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

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


    Также не забываем про кусачки!


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


    С обратной стороны это выглядит вот так:

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

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


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

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

    Все на этом сборка устройства закончена!
    Осталось лишь загрузить следующий скетч и наслаждать игрушкой!
    #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();
        }
      }



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

    Ну на этом все! Спасибо, что прочитали эту статью до конца. Надеюсь вам она не только понравилась, но и вдохновила на море новых поделок и изобретений!
    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

    Термостат на arduino и DS1820

    Интерактивные тумбы для мероприятий (BrainSystem)

    6.5
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    4.5
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    4
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 5.0 из 10 (голосов: 2 / История оценок)

    Добавить комментарий

    7 комментариев
    ЮрИк_ #12590 Автор
    Привет) Напиши мне сюда https://vk.com/id166956339
    fordragon #12578
    Может быть, у вас остался скетч рабочий? В этом, оказывается, даже знак "<" заменился на "& lt;")
    fordragon #12577
    Здравствуйте! Когда загружаю ваш скетч, выдает кучу синтаксических ошибок почему-то. Я конечно в синтаксисе не очень шарю, но в некоторых местах совсем не могу разобраться, что нужно исправить. Например, в куске:
    for(int i=0; i100) tone(2,70);
    digitalWrite(j,masiv[i]);
    , что значит слитное i100? почему не ставится инкремент? не нужны ли фигурные скобки, чтобы последующие две функции после for относились к одному циклу, или же я неправа? И так по всему коду ругается компилятор. Можно ли как-то с Вами связаться, уточнить код? Пытаюсь сделать курсовой проект на основе ваше статьи.

    Также в коде в месте, где подключаются библиотеки, не указаны их названия. Догадаться, конечно, можно, но все-таки скетч этот не совсем подходит для мгновенной проверки работоспособности, приходится додумываться)
    ЮрИк_ #11583 Автор
    Да,возможно)
    Иван_Похмельев #11582
    То есть, предпоследняя фотография (на которой 77) просто неудачная из-за какой-то паразитной подсветки верхних сегментов в результате некорректной работы динамической индикации? На шестёрке тоже паразитная подсветка, хотя и не столь явная.
    ЮрИк_ #11579 Автор
    Иван, показания 6см и 11см это расстония от датчика до ладони)
    Иван_Похмельев #11578
    Объясните, пожалуйста, почему такие странные показания на двух последних фотографиях.

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

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

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