Ардуино и ультразвуковой дальномер HC-SR04

MEGA_ARDUINHIK
Offline
Зарегистрирован: 11.06.2017

   Наверное все радиолюбители среди своих первых проектов делали простенького робота, который объезжал препятствия и при этом пользовался первой попавшейся библиотекой. На примере такой машинки было незаметно выполнение циклов и функций библиотеки, но при более сложных проектов это уже становится достаточно заметным. Например: делаете вы робота. который будет ездить по линии и искать предметы рядом чтобы потом их столкнуть или собрать и при этом при выполнении функций библиотеки высока вероятность съехать с тонкой линии даже на прямой, а если проедет поворот, то это воообще чудо. Я озадачился этим вопросом и написал свою библиотеку для датчика HC-SR04. Она отличается своей максимальной простотой и скоростью исполнения. В ней есть только одна команда для выполнения и нет отсылок к другим файлам, та как вся библиотека прописана в одном файле.

https://yadi.sk/d/MKzp2xKC3VAeaW

вот пример:

#include <Ultra.h>
ultrasonic ultra(6, 9);

void setup() {
Serial.begin(9600);
}

void loop() {
Serial.print(ultra.distance());
Serial.print("\n");
delay(100);
}

Удачи в освоении электроники.

 

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Спасибо! Спасибо ! Спасибо ! Спасибо !
Убедили ! Убедили ! Убедили ! Убедили !

kalapanga
Offline
Зарегистрирован: 23.10.2016

А мужики-то и не знают, что это у них роботы так плохо бегают! Оказывается библиотека к уз-датчику неправильная! Ну, теперь жизнь наладится!

MEGA_ARDUINHIK
Offline
Зарегистрирован: 11.06.2017

Я имею ввиду, что точность исполнения выше

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

MEGA_ARDUINHIK пишет:
https://yadi.sk/d/MKzp2xKC3VAeaW

Никогда больше не пиши никаких библотек, копипастя типовые примеры. Там есть одна крутейшая ошибка, как понимаю сделанная сознательно для начинающих. Вы её повторили на все 146%. С такой .distance() робот не то что "поворот проедет" он ваще поедет куда ему вздумается.. иди исправляй, двоечник.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Arhat109-2 пишет:

Там есть одна крутейшая ошибка...

Ошибок там явно больше одной.

Но самое интересное в другом.

MEGA_ARDUINHIK: вот Вы утверждаете, что "стандартные" библиотеки тормозят, а Ваша - нет. Как бы принято такие утверждения подкореплять конкретными цифрами, полученными в результате тестирования.

Вот нам и хотелось бы узнать:

1. Что Вы подразумеваете под стандартной библиотекой для УЗ-датчика?

2. Опишите, как именно Вы сравнивали работу стандартной и Вашей библиотек.

3. Опубликуйте цифры, которые подтверждали бы утверждение, приведенное Вами в начале темы.

4. Ну и заодно хотелось бы понять, какое отношение УЗ-датчик имеет к движению по линии.

5. И почему провода Вы подключаете на 12 и 13 пины, а сигнал даете на 6 и 9.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

А датчик - да, лучшее что мне довелось увидеть из "ардуиновского" шилдового барахла. Ещё датчик цвета понравился на TSC3200..

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

MEGA_ARDUINHIK пишет:
Я имею ввиду, что точность исполнения выше

В каком, интересно, месте точность копипасты оказалась выше?

Что там нет температурной компенсации, что у тебя. Что там делят нацело, забыв увеличить делимое на полделителя, что у тебя.

В каком месте точность выше?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

andriano пишет:

5. И почему провода Вы подключаете на 12 и 13 пины, а сигнал даете на 6 и 9.

От всегда так - нет, чтобы поблагодарить автора за суперскую бибилиотеку, так нет же - начинают придираться к мелочам, а сами, втихаря, во все свои роботы срочно супербиблиотеку вставляют, между прочим! :)))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Arhat109-2 пишет:

крутейшая ошибка

Да, колитесь уже, что имеете в виду-то :)))

sadman41
Offline
Зарегистрирован: 19.10.2016

Наверняка там не отрабатывается ситуация, когда сигнал не вернулся.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

sadman41 пишет:
Наверняка там не отрабатывается ситуация, когда сигнал не вернулся.

Верно, но не только. Сколько времени пульсаИн() ждет отклик "по умолчанию"? Сколько за это время проедет робот по сути "мертвым", какой нафиг "контроль линии"? Чтобы ЭТО можно было пользовать на практике, пульсуИн надо качественно переделывать, дабы в процессе измерения импульса не прошляпить линию. А это уже совсем иной код, иной подход и вообще не "ардуино" .. :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Arhat109-2 пишет:

...совсем иной код, иной подход и вообще не "ардуино" .. :)

Тогда какой резон писать об этом на форуме Ардуино?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Если мы с сыном слепили его на Ардублоке, то его вполне можно реализовать и на Ардуино библиотеках. :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Arhat109-2 пишет:

Если мы с сыном слепили его на Ардублоке, то его вполне можно реализовать и на Ардуино библиотеках. :)

а выложить ваш код можно? Для ардуины ес-но... а то к моей тележке объезд препятствий просится

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

ua6em пишет:

Arhat109-2 пишет:

Если мы с сыном слепили его на Ардублоке, то его вполне можно реализовать и на Ардуино библиотеках. :)

а выложить ваш код можно? Для ардуины ес-но... а то к моей тележке объезд препятствий просится

К сожалению, нет нельзя. Там используется знаменитый arhat.h :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Arhat109-2 пишет:

ua6em пишет:

Arhat109-2 пишет:

Если мы с сыном слепили его на Ардублоке, то его вполне можно реализовать и на Ардуино библиотеках. :)

а выложить ваш код можно? Для ардуины ес-но... а то к моей тележке объезд препятствий просится

К сожалению, нет нельзя. Там используется знаменитый arhat.h :)

Это? А то на Гитхабе ничего нет, осталось в скачанных, правда по версии не скажу )))
 

// sound speed as 33500 sm./sec., 2-way: microsecs. to santimeters!
// пересчет звука в расстояние: можно делить, а можно умножить и поделить сдвигом
#define SND_DIV_SM   59.701492537       // t divide to this to sm
#define SND_MUL_MM   343                // (t*343)>>11! (/2048) from microseconds to mm!