Совет 1: Как подключить пьезоизлучатель (пьезопищалку) к Arduino

Генерировать звуки с помощью Ардуино можно разными способами. Самый простой из них - подключить к плате пьезоизлучатель (или пьезопищалку). Но как всегда, есть тут и свои нюансы. В общем, давайте разбираться.
Вам понадобится
  • - Компьютер;
  • - Arduino;
  • - пьезоизлучатель (пьезопищалка).
Инструкция
1
Пьезоизлучатель, или пьезоэлектрический излучатель, или пьезопищалка - это электроакустическое устройство воспроизведения звука, использующее обратный пьезоэлектрический эффект. Если объяснять по-простому - под действием электрического поля возникает механическое движение мембраны, которое и вызывает слышимые нами звуковые волны. Обычно такие излучатели звука устанавливают в бытовую электронную аппаратуру в качестве звуковых сигнализаторов, в корпуса настольных персональных компьютеров, в телефоны, в игрушки, в громкоговорители и много куда ещё.
Пьезоизлучатель имеет 2 вывода, причём полярность имеет значение. Поэтому чёрный вывод подключаем к земле (GND), а красный - к любому цифровому пину с функцией ШИМ (PWM). В данном примере положительный вывод излучателя подключён к выводу "D3".
Подключение пьезопищалки к Arduino
2
Пьезопищалку можно задействовать разными способами. Самый простой из них - это использовать функцию analogWrite. Пример скетча - на иллюстрации. Данный скетч попеременно включает и выключает звук с частотой 1 раз в секунду.
Задаём номер пина, определяем его как выход. Функция analogWrite() принимает в качестве аргументов номер вывода и уровень, который может быть от 0 до 255. Это значение будет изменять громкость пьезопищалки в небольших пределах. Посылая в порт значение "0", выключаем пьезопищалку.
К сожалению, изменять тональность звука, используя функцию analogWrite(), нельзя. Пьезоизлучатель всегда будет звучать на частоте примерно 980 Гц, что соответствует частоте работы выводов с широтно-импульсной модуляцией сигнала (ШИМ) на платах Arduino UNO и подобных.
Используем встроенную функцию "analogWrite()"
3
Теперь извлечём звук из пьезоизлучателя посредством встроенной функции tone(). Пример простейшего скетча приведён на иллюстрации.
Функция tone принимает в качестве аргументов номер пина и звуковую частоту. Нижний предел частоты - 31 Гц, верхний предел ограничен параметрами пьезоизлучателя и человеческого слуха. Чтобы выключить звук, посылаем в порт команду noTone().
Обратите внимание, что если к Ардуино подключены несколько пьезоизлучателей, единовременно будет работать только один. Чтобы включить излучатель на другом выводе, нужно прервать звук на текущем, вызвав функцию noTone().
Важный момент: функция tone() накладывается на ШИМ сигнал на "3" и "11" выводах Arduino. Имейте это в виду, когда будете проектировать свои устройства, т.к. функция tone(), вызванная, например, для пина "5", может мешать работе выводов "3" и "11".
Используем встроенную функцию "tone()"

Совет 2: Как подключить ультразвуковой дальномер HC-SR04 к Arduino

Подключим в этой статье ультразвуковой дальномер-эхолокатор HC-SR04 к Arduino.
Вам понадобится
  • - Arduino;
  • - ультразвуковой датчик HC-SR04;
  • - соединительные провода.
Инструкция
1
Действие ультразвукового дальномера HC-SR04 основано на принципе эхолокации. Он излучает звуковые импульсы в пространство и принимает отражённый от препятствия сигнал. По времени распространения звуковой волны к препятствию и обратно определяется расстояние до объекта.
Запуск звуковой волны начинается с подачи положительного импульса длительностью не менее 10 микросекунд на ножку TRIG дальномера. Как только импульс заканчивается, дальномер излучает в пространство перед собой пачку звуковых импульсов частотой 40 кГц. В это же время запускается алгоритм определения времени задержки отражённого сигнала, а на ножке ECHO дальномера появляется логическая единица. Как только датчик улавливает отражённый сигнал, на выводе ECHO появляется логический ноль. По длительности этого сигнала ("Задержка эхо" на рисунке) определяется расстояние до объекта.
Диапазон измерения расстояния дальномера HC-SR04 - до 4 метров с разрешением 0,3 см. Угол наблюдения - 30 градусов, эффективный угол - 15 градусов. Ток потребления в режиме ожидания 2 мА, при работе - 15 мА.
Принцип действия ультразвукового дальномера HC-SR04
2
Питание ультразвукового дальномера осуществляется напряжением +5 В. Два других вывода подключаются к любым цифровым портам Arduino, мы подключим к 11 и 12.
Подключение ультразвукового дальномера HC-SR04 к Arduino
3
Теперь напишем скетч, определяющий расстояние до препятствия и выводящий его в последовательный порт. Сначала задаём номера выводов TRIG и ECHO - это 12 и 11 пины. Затем объявляем триггер как выход, а эхо - как вход. Инициализируем последовательный порт на скорости 9600 бод. В каждом повторении цикла loop() считываем дистанцию и выводим в порт.
Функция getEchoTiming() генерирует импульс запуска. Она как раз создаёт ток 10 мксек импульс, который является триггером для начала излучения дальномером звукового пакета в пространство. Далее она запоминает время от начала передачи звуковой волны до прихода эха.
Функция getDistance() рассчитывает дистанцию до объекта. Из школьного курса физики мы помним, что расстояние равно скорость умножить на время: S = V*t. Скорость звука в воздухе 340 м/сек, время в микросекундах мы знаем, это "duratuion". Чтобы получить время в секундах, нужно разделить на 1.000.000. Так как звук проходит двойное расстояние - до объекта и обратно - нужно разделить расстояние пополам. Вот и получается, что расстояние до объекта S = 34000 см/сек * duration / 1.000.000 сек / 2 = 1,7 см/сек / 100, что мы и написали в скетче. Операцию умножения микроконтроллер выполняет быстрее, чем деления, поэтому "/ 100" я заменил на эквивалентное "* 0,01".
Скетч для работы с ультразвуковым эхолокатором HC-SR04
4
Также для работы с ультразвуковым дальномером написано множество библиотек. Например, вот эта: http://robocraft.ru/files/sensors/Ultrasonic/HC-SR04/ultrasonic-HC-SR04.zip. Установка библиотеки происходит стандартно: скачать, разархивировать в директорию libraries, которая находится в папке с Arduino IDE. После этого библиотекой можно пользоваться.
Установив библиотеку, напишем новый скетч. Результат его работы тот же - в мониторе последовательного порта выводится дистанция до объекта в сантиметрах. Если в скетче написать float dist_cm = ultrasonic.Ranging(INC);, то дистанция будет отображаться в дюймах.
Скетч для работы с ультразвуковым эхолокатором, использующий библиотеку
5
Итак, мы с вами подключили к Arduino ультразвуковой дальномер HC-SR04 и получили с него данные двумя разными способами: с использованием специальной библиотеки и без.
Преимущество использования библиотеки в том, что количество кода значительно сокращается и улучшается читаемость программы, вам не приходится вникать в тонкости работы устройства и вы сразу же можете его использовать. Но в этом же кроется и недостаток: вы хуже понимаете, как работает устройство и какие в нём происходят процессы. В любом случае, каким способом пользоваться - решать только вам.
Arduino с подключённым ультразвуковым дальномером HC-SR04
Видео по теме

Совет 3: Как подключить LCD дисплей для Nokia 5110 к Arduino

Разбираемся с подключением жидкокристаллического монохромного дисплея с разрешением 84х48 точек от Nokia 5110 к Arduino.
Вам понадобится
  • - Arduino;
  • - ЖК дисплей для Nokia 5110/3310;
  • - соединительные провода.
Инструкция
1
Подключим ЖК экран от Nokia 5110 к Arduino по приведённой схеме.
Схема подключения ЖК экрана Nokia 5110 к Arduino
2
Для работы с этим LCD экраном написано много библиотек. Предлагаю воспользоваться этой: http://www.rinkydinkelectronics.com/library.php?id=44 (скачивание файла LCD5110_Basic.zip).
Для установки разархивируем файл в директорию Arduino IDE/libraries/.
Библиотека поддерживает следующие возможности.
LCD5110(SCK, MOSI, DC, RST, CS); - объявление ЖК экрана с указанием соответствия пинам Arduino;
InitLCD([contrast]); - инициализация дисплея 5110 с опциональным указанием контрастности (0-127), по умолчанию используется значение 70;
setContrast(contrast); - задаёт контрастность (0-127);
enableSleep(); - переводит экран в спящий режим;
disableSleep(); - выводит экран из спящего режима;
clrScr(); - очищает экран;
clrRow(row, [start], [end]); - очистка выбранной строки номер row, от позиции start до end;
invert(true); и invert(false); - включение и выключение инверсии содержимого LCD экрана;
print(string, x, y); - выводит строку символов с заданными координатами; вместо x-координаты можно использовать LEFT, CENTER и RIGHT; высота стандартного шрифта 8 точек, поэтому строки должны идти с интервалами через 8;
printNumI(num, x, y, [length], [filler]); - вывести целое число на экран на заданной позиции (x, y); length - желаемая длина числа; filler - символ для заполнения "пустот", если число меньше желаемой длины; по умолчанию это пустой пробел " ";
printNumF(num, dec, x, y, [divider], [length], [filler]); - вывести число с плавающей запятой; dec - число знаков после запятой; divider - знак десятичного разделителя, по умолчанию точка ".";
setFont(name); - выбрать шрифт; встроенные шрифты называются SmallFont и TinyFont; вы можете определить свои шрифты в скетче;
invertText(true); и invertText(false); - инверсия текста вкл./выкл.;
drawBitmap(x, y, data, sx, sy); - вывести картинку на экран по координатам x и y; data - массив, содержащий картинку; sx и sy - ширина и высота рисунка.
3
Напишем такой скетч. Сначала подключаем библиотеку, затем объявляем экземпляр класса LCD5110 с назначением выводов.
В процедуре setup() инициализируем ЖК экран.
В процедуре loop() очищаем экран и пишем маленьким шрифтом произвольный текст, под ним - средним шрифтом выводим счётчик секунд.
Скетч для вывода текста на ЖК экран Nokia 5110
4
Давайте выведем на экран картинку. Для этого подготовим монохромное изображение, которое хотим вывести на экран Nokia 5110. Помните, что разрешение экрана 48 на 84 точки, и картинка должна быть не больше. На странице http://www.rinkydinkelectronics.com/t_imageconverter_mono.php преобразуем изображение в массив битов. Скачаем полученный файл с расширением "*.c" и добавим его к проекту через меню: Эскиз -> Добавить файл... или просто поместим файл в директорию скетча, а затем перезагрузим среду разработки Arduino IDE.
Добавляем файл изображения к проекту Arduino
5
Теперь нужно в коде программы объявить массив с данными изображения (у меня в коде это строка extern uint8_t mysymb[];), а затем используем функцию drawBitmap() для вывода изображения в нужном месте экрана.
Вывод изображения на LCD экран Nokia 5110
6
Загрузим скетч в Arduino. Теперь текст сменяется картинкой, и счётчик каждый раз увеличивает своё значение.
Текст и изображение на ЖК экране Nokia 5110
Видео по теме
Источники:
  • Спецификация на LCD дисплей для Nokia 5110
  • Подготовка массива бит из файла изображения

Совет 4: Как подключить цифровой компас HMC5883 к Arduino

Рассмотрим подключение модуля GY-273 с трёхосевым цифровым компасом HMC5883L фирмы Honeywell. Эта микросхема может использоваться для магнитометрических измерений, в навигации, если не требуется большая точность измерений (с погрешностью 1…2 градуса и возможностью калибровки). Устройство подключается по интерфейсу I2C.
Вам понадобится
  • - Цифровой компас HMC5883;
  • - Arduino;
  • - макетная плата и соединительные провода;
  • - компьютер.
Инструкция
1
Вот основные характеристики магнитного компаса:
- 3-осевой магниточувствительный датчик;
- 12-разрядный АЦП с разрешением 2 мГс (миллигаусс);
- встроенная самопроверка;
- низкое рабочее напряжение и малое потребление;
- цифровой интерфейс I2C;
- высокая скорость опроса – до 160 раз в секунду (время одного измерения примерно 6 мс);
- точность определения направления 1°…2°;
- может применяться в сильных магнитных полях (до ±8 Гаусс).
Схема подключения магнитного датчика HMC5883L к Arduino приведена на рисунке. Она очень компактная и простая, т.к. двухпроводной интерфейс I2C тем и хорош, что требует малого количества соединений. Можно воспользоваться макетной платой.
Подключение цифрового компаса HMC5883 к Arduino
2
Должно получиться примерно так, как на фотографии. Я ещё подключу к шинам SCL и SDA логический анализатор, чтобы контролировать информационный обмен между Arduino и модулем HMC5883. Это не обязательно.
Цифровой компас HMC5883 подключён к Arduino на макетной плате
3
Давайте в качестве первого знакомства попробуем прочитать идентификационный регистры 10 (0xA), 11 (0xB) и 12 (0xC) цифрового компаса HMC5883 и напишем вот такой скетч, как на рисунке. Он снабжён подробными комментариями.
Скетч, считывающий идентификационные регистры HMC5883
4
Сигнал, полученный с помощью логического анализатора, будет таким, как на иллюстрации.
Что это значит? Первый байт – I2C адрес, с которым мы (ведущее устройство, Arduino) устанавливаем связь (старшие 7 бит 0x1E), и режим записи (младший бит – 0x0); получается число 0x3C. Второй байт – число 0xA, которое мы записали по адресу 0x1E и бит подтверждения от датчика HMC5883L, которое является ведомым. Это номер регистра, с которого мы начнём считывать данные. На этом первая транзакция закончилась. Начинается следующая. Третий байт – это запрос чтения у ведомого (старшие 7 бит – адрес 0x1E, 8-ой бит – операция чтения 0x1; получается число 0x3D). Последние 3 три байта – это ответ ведомого устройства HMC5883L из регистров 0xA, 0xB и 0xC, соответственно.
Цифровой компас HMC5883L при непрерывном считывании перемещается по регистрам самостоятельно. Т.е. каждый раз указывать регистр не обязательно (но и не запрещено). Например, если мы вместо 0xA записали бы 0x3 и 10 раз считали, то получили бы значения в 10-ти регистрах, начиная с 3-го по 12-ый.
А что это за три числа – 0x48, 0x34, 0x33? Снова воспользовавшись паспортом на цифровой компас HMC5883L, мы увидим, что это значения по умолчанию для трёх идентификационных регистров.
Временная диаграмма обмена по I2C с цифровым компасом HMC5883
5
Чтобы получить данные цифрового компаса по магнитному полю, нужно прочитать регистры с 3-го по 8-ой подобно тому, как мы прочитали идентификационные регистры. С той лишь разницей, что данные по каждой из трёх осей X, Y и Z представлены в виде двухбайтовых чисел. Переведя их в десятичные числа, мы получим направления по каждой из трёх осей.
Регистры данных цифрового компаса HMC5883

Совет 5: Как подключить сдвиговый регистр к Arduino

В одной из предыдущих статей мы уже бегло касались применения сдвигового регистра, в частности, 74HC595. Давайте более детально рассмотрим возможности и порядок работы с данной микросхемой.
Вам понадобится
  • - Arduino;
  • - сдвиговый регистр 74HC595;
  • - соединительные провода.
Инструкция
1
Сдвиговый регистр 74HC595 и ему подобные используются в качестве устройств преобразования последовательных данных в параллельные, а также может использоваться как "защёлка" для данных, удерживая переданное на него состояние.
Схема выводов ("распиновка") приведена на рисунке слева. Их назначение такое.
Q0...Q7 - выходы параллельных данных;
GND - земля (0 В);
Q7' - выход последовательных данных;
^MR - сброс ведущего устройства (активный низкий);
SHcp - вход тактовых импульсов сдвигового регистра;
STcp - вход тактовых импульсов "защёлки";
^OE - разрешение вывода (активный низкий);
Ds - вход последовательных данных;
Vcc - питание +5 В.
Конструктивно микросхема выполняется в нескольких типах корпусов; я буду использовать тот, что приведён на рисунке справа - выводной - т.к. его проще использовать с макетной платой (бредбордом).
Внешний вид сдвигового регистра и схема выводов
2
Коротко напомню о последовательном интерфейсе SPI, который мы будем использовать для передачи данных в сдвиговый регистр.
SPI - это четырёхпроводный двунаправленный последовательный интерфейс, в котором принимают участие ведущее и ведомое устройства. Ведущим в нашем случае будет являться Arduino, ведомым - регистр 74HC595.
Среда разработки для Arduino имеет встроенную библиотеку работы по интерфейсу SPI. При её применении используются выводы, которые отмечены на рисунке:
SCLK - вывод тактовых импульсов SPI;
MOSI - данные из ведущего - к ведомому;
MISO - данные от ведомого к ведущему;
SS - выбор ведомого.
Стандартные выводы SPI платы Arduino
3
Давайте соберём схему, как на рисунке.
Я также подключу ко всем ножкам микросхемы регистра сдвига логический анализатор. С помощью него мы увидим, что же происходит на физическом уровне, какие сигналы куда идут, и разберёмся, что они означают. Должно получиться примерно как на фотографии.
Схема подключения сдвигового регистра 74HC595 к Arduino
4
Напишем вот такой скетч и загрузим в память Arduino.
Переменная PIN_SPI_SS - это внутренняя стандартная константа, которая соответствует выводу "10" Ардуино при использовании его в качестве ведущего устройства интерфейса SPI, который мы тут используем. В принципе, мы могли бы с таким же успехом использовать любой другой цифровой вывод Arduino; тогда нам бы пришлось его объявить и задать его режим работы.
Подавая на этот вывод LOW, мы активизируем наш сдвиговый регистр на приём/передачу. После передачи мы снова поднимаем напряжение в HIGH, и обмен заканчивается.
Скетч для демонстрации работы сдвигового регистра
5
Включим нашу схему в работу и посмотрим, что покажет нам логический анализатор. Общий вид временной диаграммы - на рисунке.
Голубой пунктирной линией показаны 4 линии SPI, красной пунктирной - 8 каналов параллельных данных регистра сдвига.
Точка A на шкале времени - это момент передачи в регистр сдвига числа "210", B - момент записи числа "0", C - повторение цикла с начала.
Как видно, от А до B - 10,03 миллисекунд, а от B до С - 90,12 миллисекунд, почти как мы и задали в скетче. Небольшая добавка в 0,03 и 0,12 мс - это время передачи последовательных данных от Arduino, поэтому мы тут имеем не ровно 10 и 90 мс.
Временная диаграмма обмена Arduino и сдвигового регистра 74HC595
6
Рассмотрим подробнее участок A.
В самом верху - длинный импульс, которым Arduino инициализирует передачу по линии SPI-ENABLE - выбор ведомого. В это время начинают генерироваться тактовые импульсы SPI-CLOCK (вторая строка сверху), 8 штук (для передачи 1 байта).
Следующая строка сверху - SPI-MOSI - данные, которые мы передаём от Arduino к сдвиговому регистру. Это наше число "210" в двоичном виде - "11010010".
После завершения передачи, в момент завершения импульса SPI-ENABLE, мы видим, что сдвиговый регистр выставил на своих 8-ми ножках такое же значение. Я выделил это в голубой пунктирной линией и подписал значения для наглядности.
Выставление числа 210 на параллельной шине по SPI
7
Теперь обратим внимание на участок B.
Опять всё начинается с выбора ведомого и генерирования 8-ми тактовых импульсов.
Данные на линии SPI-MOSI теперь - "0". То есть мы записываем в этот момент в регистр число "0".
Но пока передача не закончена, в регистре хранится значение "11010010". Оно выводится на параллельные выводы Q0..Q7, и выдаётся при наличии тактовых импульсов в линии c параллельного выхода Q7' в линию SPI-MISO, что мы тут и видим.
Выставление числа 0 на параллельной шине по SPI
8
Таким образом, мы детально изучили вопрос информационного обмена между ведущим устройством, в роли которого выступил Arduino, и сдвиговым регистром 74HC595. Научились подключать сдвиговый регистр, записывать в него данные и считывать из него данные.
Поиск
Совет полезен?
Добавить комментарий к статье
Осталось символов: 500