Оглавление:

Ровер, управляемый жестами, с использованием акселерометра и пары РЧ-передатчик-приемник: 4 шага
Ровер, управляемый жестами, с использованием акселерометра и пары РЧ-передатчик-приемник: 4 шага

Видео: Ровер, управляемый жестами, с использованием акселерометра и пары РЧ-передатчик-приемник: 4 шага

Видео: Ровер, управляемый жестами, с использованием акселерометра и пары РЧ-передатчик-приемник: 4 шага
Видео: Ольга Прудковская — Авторская электроника 2024, Июль
Anonim
Ровер, управляемый жестами, с использованием акселерометра и пары РЧ-передатчик-приемник
Ровер, управляемый жестами, с использованием акселерометра и пары РЧ-передатчик-приемник

Привет, Вы когда-нибудь мечтали построить вездеход, которым можно было управлять простыми жестами руки, но никогда не набраться смелости, чтобы отважиться погрузиться в тонкости обработки изображений и взаимодействия веб-камеры с микроконтроллером, не говоря уже о тяжелой битве за преодоление ограниченного радиуса действия и ограниченного расстояния. проблемы со зрением? Что ж, не бойтесь… ведь есть легкий выход! Вот, как я представляю вам могучий АКСЕЛЕРОМЕТР! * ба дум тссс *

Акселерометр - это действительно крутое устройство, которое измеряет ускорение свободного падения вдоль линейной оси. Он представляет собой колебание уровня напряжения между землей и напряжением питания, которое наш микроконтроллер считывает как аналоговое значение. Если мы немного применим наш мозг (немного математики и немного ньютоновской физики), мы сможем не только использовать его для измерения линейного движения вдоль оси, но мы также сможем использовать его для определения угла наклона и ощущения вибраций. Не волнуйся! Нам не понадобятся математика или физика; мы просто будем иметь дело с необработанными значениями, которые выдаёт акселерометр. Фактически, вам не нужно сильно беспокоиться о технических деталях акселерометра для этого проекта. Я просто коснусь некоторых деталей и уточню ровно столько, сколько вам нужно, чтобы понять общую картину. Хотя, если вам интересно изучить его внутреннюю механику, загляните сюда.

Вам просто нужно пока помнить об этом: акселерометр - это штуковина (часто в сочетании с гироскопом), которая открывает двери для всех тех игр с датчиками движения, в которые мы играем на наших смартфонах; например, гоночная игра, в которой мы управляем автомобилем, просто наклоняя наши устройства в любом направлении. И мы можем имитировать этот самый эффект, прикрепив акселерометр (конечно, с несколькими вспомогательными устройствами) на перчатку. Мы просто надеваем волшебные перчатки, наклоняем руки влево или вправо, вперед или назад и видим, как наши вездеходы танцуют под наши мелодии. Все, что нам здесь требуется, - это преобразовать показания акселерометра в цифровые сигналы, которые двигатели марсохода могут интерпретировать, и разработать механизм для передачи этих сигналов марсоходу. Для этого мы используем старый добрый Arduino и его помощников для сегодняшнего эксперимента, пару ВЧ передатчик-приемник, работающую на частоте 434 МГц, что дает диапазон около 100-150 м в открытом космосе, что также избавляет нас от прямой связи. проблемы со зрением.

Отличный хак, а? Давайте погрузимся в…

Шаг 1. Соберите припасы

Собери свои припасы
Собери свои припасы
Собери свои припасы
Собери свои припасы
Собери свои припасы
Собери свои припасы
Собери свои припасы
Собери свои припасы
• Arduino Nano x1
• Акселерометр (ADXL335) x1
• Двигатель 5 В постоянного тока + колеса x2 каждый
• Колесо крупного рогатого скота * x1
• Драйвер двигателя L293D + 16-контактный разъем IC x1 каждый
• РЧ-передатчик 434 МГц x1
• РЧ-приемник 434 МГц x1
• HT-12E Encoder IC + 18-контактный разъем IC x1 каждый
• Декодер HT-12D IC + 18-контактный разъем IC x1 каждый
• Регулятор напряжения LM7805 x1
• Кнопочный переключатель x2
• Красный светодиод + резистор 330 Ом x2 каждый
• Желтый светодиод + резистор 330 Ом x1 каждый
• Зеленый светодиод + резистор 330 Ом (опционально) x4 каждый
• Резисторы 51кОм и 1МО x1 каждый
• Радиальные конденсаторы 10 мкФ x2
Батареи, разъемы для батарей, USB-кабель, перемычки, гнездовые разъемы, 2-контактные винтовые клеммы, печатная плата, шасси и обычные аксессуары для пайки

Если вам интересно, почему мы используем бычье колесо, дело в том, что модули РЧ-передатчика и приемника имеют только 4 вывода данных, что означает, что мы можем управлять только двумя двигателями и, следовательно, использовать бычье колесо для поддерживайте структуру. Однако, если вы чувствуете, что ваш ровер с четырьмя колесами выглядел бы немного круче, не волнуйтесь, есть обходной путь! В этом случае просто вычеркните бычье колесо из списка и добавьте еще одну пару двигателей постоянного тока 5 В, каждый с колесом, и обратите внимание на простой прием, описанный в конце шага 3.

Наконец, для храбрых есть простор для еще одного небольшого изменения в дизайне, которое вроде как связано с разработкой вашего собственного Arduino. Перейдите в раздел бонусов на следующем шаге и убедитесь в этом сами. Вам также понадобится несколько дополнительных источников питания: ATmega328P, 28-контактный разъем IC, кварцевый генератор 16 МГц, две керамические крышки 22 пФ, еще один регулятор напряжения 7805, еще две радиальные крышки 10 мкФ и резисторы 10 кОм, 680 Ом, 330 Ом и да, минус. Ардуино!

Шаг 2: Подключите передатчик

Подключите передатчик
Подключите передатчик
Подключите передатчик
Подключите передатчик
Подключите передатчик
Подключите передатчик
Подключите передатчик
Подключите передатчик

Мы разделим проект на две составляющие: схемы передатчика и приемника. Передатчик состоит из акселерометра, Arduino и модуля РЧ-передатчика, соединенного с ИС кодировщика HT-12E, все они подключены в соответствии с прилагаемой схемой.

Акселерометр, представленный ранее, служит для распознавания жестов наших рук. Мы собираемся использовать трехосевой акселерометр (по сути, три одноосных акселерометра в одном), чтобы удовлетворить наши потребности. Его можно использовать для измерения ускорения во всех трех измерениях, и, как вы могли догадаться, он дает не одно, а набор из трех аналоговых значений относительно трех его осей (x, y и z). Фактически, нам нужно только ускорение по осям x и y, поскольку мы можем вести марсоход только в четырех направлениях: вперед или назад (т. Е. По оси y) и влево или вправо (т. Е. По оси x). Если бы мы строили дрон, нам понадобилась бы ось Z, чтобы мы могли управлять его подъемом и спуском с помощью жестов. В любом случае эти аналоговые значения, которые выдает акселерометр, должны быть преобразованы в цифровые сигналы, чтобы можно было управлять двигателями. Об этом позаботится Arduino, который также передает эти сигналы после преобразования на ровер через модуль РЧ-передатчика.

Передатчик RF имеет только одну задачу: передавать «последовательные» данные, доступные на выводе 3, из антенны на выводе 1. Это поддерживает использование HT-12E, 12-битного кодировщика данных параллельно-последовательному соединению, который собирает до 4 бит параллельных данных от Arduino на линиях от AD8 до AD11, что позволяет нам освободить место для до 24 = 16 различных комбинаций ввода / вывода вместо одного вывода данных на РЧ-передатчике. Оставшиеся 8 битов, взятые из линий с A0 по A7 на кодировщике, составляют байт адреса, который упрощает создание пары между РЧ-передатчиком и соответствующим РЧ-приемником. Затем 12 битов объединяются, сериализуются и передаются на вывод данных РЧ-передатчика, который, в свою очередь, модулирует ASK-данные на несущую волну 434 МГц и выбрасывает их через антенну на выводе 1.

По идее, любой радиоприемник, слушающий на частоте 434 МГц, должен иметь возможность перехватывать, демодулировать и декодировать эти данные. Однако адресные строки на HT-12E и аналоге HT-12D (12-битный последовательно-параллельный декодер данных) позволяют нам сделать пару РЧ-передатчик-приемник уникальной, перенаправляя данные только на предполагаемый получатель, тем самым ограничивая общение со всеми остальными. Все, что от нас требуется, - это одинаково настроить адресные линии на обоих фронтах. Например, поскольку мы заземлили все адресные линии для нашего HT-12E, мы должны сделать то же самое для HT-12D на принимающей стороне, иначе марсоход не сможет принимать сигналы. Таким образом, мы также можем управлять несколькими роверами с помощью одной цепи передатчика, идентично настроив адресные линии на HT-12D на каждом из приемников. Или мы могли бы надеть две перчатки, каждая из которых связана со схемой передатчика, содержащей определенную конфигурацию адресной линии (скажем, одна со всеми заземленными адресными линиями, а другая - с высоким уровнем, или одна с одной заземленной линией, в то время как остальные семь удерживаются. высокий, а другой - с двумя заземленными линиями, в то время как остальные шесть удерживаются высоко, или любая другая их комбинация), и каждый управляет несколькими марсоходами идентичной конфигурации. Сыграйте маэстро в симфонии андроидов!

Одна важная вещь, которую следует отметить при сборке схемы, - это ценность Rosc. HT-12E имеет схему внутреннего генератора между контактами 15 и 16, которая активируется путем подключения резистора, называемого Rosc, между этими контактами. Значение, выбранное для Rosc, фактически определяет частоту генератора, которая может изменяться в зависимости от напряжения питания. Выбор подходящего значения для Rosc имеет решающее значение для функционирования HT-12E! В идеале частота генератора HT-12E должна быть в 50 раз больше, чем у аналога HT-12D. Поэтому, поскольку мы работаем от 5 В, мы выбрали резисторы 1 МОм и 51 кОм в качестве Rosc для схем HT-12E и HT-12D соответственно. Если вы планируете использовать схемы с другим напряжением питания, обратитесь к графику «Частота генератора в зависимости от напряжения питания» на странице 11 прилагаемого технического описания HT-12E, чтобы определить точную частоту генератора и резистор, который будет использоваться.

Кроме того, в качестве примечания, мы будем использовать здесь женские разъемы (служащие той же цели, что и разъемы IC) для подключения акселерометра, ВЧ-передатчика и Arduino в цепи, вместо того, чтобы напрямую паять их на печатную плату. Намерение состоит в том, чтобы приспособить небольшую возможность многократного использования компонентов. Скажем, прошло много времени с тех пор, как вы сконструировали свой марсоход, управляемый жестами, и он просто сидит, наполовину покрытый пылью, на вашей полке с трофеями, и вы натыкаетесь на еще одну замечательную инструкцию, которая использует эффективность акселерометра. Ну так что ты делаешь? Вы просто выдергиваете его из марсохода и вставляете в новую схему. Не нужно вызывать «амазонок», чтобы получить новую:-p

Бонус: покончите с Arduino, но не делайте этого

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

Наша цель здесь - сделать Arduino (фактически мозг Arduino; да, я говорю об ATmega IC!) Постоянным членом команды. ATmega будет запрограммирован на запуск одного эскиза снова и снова, чтобы он мог служить постоянной частью схемы, точно так же, как HT-12E - простая микросхема, просто сидящая там и выполняющая то, что должна. Разве не такой должна быть настоящая встроенная система?

В любом случае, чтобы продолжить это обновление, просто измените схему в соответствии со второй прилагаемой схемой. Здесь мы просто заменяем женские разъемы для Arduino разъемом IC для ATmega, добавляем подтягивающий резистор 10 кОм на вывод сброса (вывод 1) IC и накачиваем его внешними часами между выводами 9 и 10. К сожалению, если мы откажемся от Arduino, мы также откажемся от встроенных регуляторов напряжения; Следовательно, мы должны воспроизвести схему LM7805, которую мы использовали для приемника и здесь. Кроме того, мы также используем делитель напряжения для подачи напряжения 3,3 В, необходимого для питания акселерометра.

Единственная другая проблема - это программирование ATmega для выполнения своей работы. Однако вам придется подождать до шага 4. Итак, следите за обновлениями…

Шаг 3: И получатель

И получатель
И получатель
И получатель
И получатель
И получатель
И получатель
И получатель
И получатель

Приемник состоит из модуля РЧ-приемника, соединенного с ИС декодера HT-12D, и пары двигателей постоянного тока, работающих с помощью драйвера двигателя L293D, все они подключены согласно прилагаемой схеме.

Единственная задача РЧ-приемника - демодулировать несущую волну (полученную через его антенну на выводе 1) и визуализировать полученные «последовательные» данные на выводе 7, откуда они принимаются HT-12D для десериализации. Теперь, если предположить, что адресные линии (от A0 до A7) на HT-12D настроены идентично его аналогу HT-12E, 4 параллельных бита данных извлекаются и передаются по линиям данных (с D8 по D11) на HT-12D - драйверу двигателя, который, в свою очередь, интерпретирует эти сигналы для управления двигателями.

Опять же, обратите внимание на значение Rosc. HT-12D также имеет схему внутреннего генератора между контактами 15 и 16, которая активируется подключением резистора, называемого Rosc, между этими контактами. Значение, выбранное для Rosc, фактически определяет частоту генератора, которая может изменяться в зависимости от напряжения питания. Выбор подходящего значения для Rosc имеет решающее значение для функционирования HT-12D! В идеале частота генератора HT-12D должна быть в 50 раз больше, чем у аналога HT-12E. Поэтому, поскольку мы работаем от 5 В, мы выбрали резисторы 1 МОм и 51 кОм в качестве Rosc для схем HT-12E и HT-12D соответственно. Если вы планируете использовать схемы при другом напряжении питания, обратитесь к графику «Частота генератора в зависимости от напряжения питания» на странице 5 прилагаемого технического описания HT-12D, чтобы определить точную частоту генератора и резистор, который будет использоваться.

Также не забывайте о женских разъемах для РЧ-приемника.

По желанию, светодиод может быть подключен через токоограничивающий резистор 330 Ом к каждому из 4 выводов данных HT-12D, чтобы помочь определить бит, полученный на этом выводе. Светодиод загорится, если получен бит HIGH (1), и гаснет, если полученный бит LOW (0). В качестве альтернативы, один светодиод может быть подключен к выводу VT HT-12D (опять же, через токоограничивающий резистор 330 Ом), который загорится в случае правильной передачи.

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

Шаг 4: переходим к коду

К коду
К коду

Осталось сделать только одно, чтобы марсоход начал работать. Да, вы угадали! (Надеюсь, вы это сделали). Нам все еще нужно преобразовать показания акселерометра в форму, которую водитель двигателя может интерпретировать, чтобы иметь возможность управлять двигателями. Если вы думаете, что, поскольку показания акселерометра аналоговые, а драйвер двигателя ожидает цифровых сигналов, нам придется реализовать какой-то АЦП, ну, не технически, но это то, что нам нужно сделать. И это довольно просто.

Мы знаем, что акселерометр измеряет ускорение свободного падения вдоль линейной оси и что это ускорение представлено как уровень напряжения, колеблющийся между землей и напряжением питания, который наш микроконтроллер считывает как аналоговое значение, изменяющееся от 0 до 1023. Но, поскольку мы Если акселерометр работает на 3,3 В, рекомендуется установить аналоговый эталон для 10-битного АЦП (который встроен в ATmeaga на борту Arduino) на 3,3 В. Это просто упростит понимание; хотя для нашего небольшого эксперимента это не будет иметь большого значения, даже если мы этого не сделаем (нам просто нужно немного подправить код). Однако для этого мы просто подключаем вывод AREF на Arduino (вывод 21 на ATmega) к 3,3 В и обозначаем это изменение в коде, вызывая analogReference (EXTERNAL).

Теперь, когда мы кладем акселерометр горизонтально и аналогово. Считываем ускорение по осям x и y (помните, нам нужны только эти две оси), мы получаем значение около 511 (то есть на полпути между 0 и 1023), что просто так сказать, что по этим осям нет ускорения. Вместо того, чтобы копаться в деталях факта, просто представьте это как оси x и y на графике со значением 511, обозначающим начало координат, а 0 и 1023 - конечными точками, как показано на рисунке; сориентируйте акселерометр таким образом, чтобы его штифты указывали вниз и держали ближе к вам, иначе вы можете перевернуть / поменять местами оси. Это означает, что если мы наклоним акселерометр вправо, мы должны прочитать значение больше 511 по оси x, а если мы наклоним акселерометр влево, мы должны получить значение меньше 511 по оси x.. Точно так же, если мы наклоним акселерометр вперед, мы должны прочитать значение больше 511 по оси Y, а если мы наклоним акселерометр назад, мы должны прочитать значение ниже 511 по оси Y. И вот как мы в коде выводим направление, в котором должен двигаться марсоход. Но это также означает, что мы должны держать акселерометр действительно устойчивым и выровненным параллельно плоской поверхности, чтобы иметь возможность считывать 511 по обеим осям. чтобы марсоход оставался на стоянке. Чтобы немного упростить эту задачу, мы определяем определенные пороговые значения, образующие границу, как показано на рисунке, чтобы марсоход оставался неподвижным, пока показания x и y лежат в определенных пределах, и мы точно знаем, что марсоход должен быть установлен в движение после превышения порога.

Например, если по оси Y отображается 543, мы знаем, что акселерометр наклонен вперед, поэтому мы должны направить марсоход вперед. Мы делаем это, устанавливая контакты D2 и D4 в высокий уровень, а контакты D3 и D5 в низкий уровень. Теперь, поскольку эти контакты подключены напрямую к HT-12E, сигналы сериализуются и отправляются в РЧ-передатчик только для того, чтобы быть пойманным РЧ-приемником, сидящим на ровере, который с помощью HT-12D десериализует сигналы и передает их на L293D, который, в свою очередь, интерпретирует эти сигналы и запускает двигатели вперед.

Однако вы можете изменить эти пороги, чтобы откалибровать чувствительность. Самый простой способ сделать это - просто подключить акселерометр к Arduino и запустить скетч, который выводит значения x и y на монитор последовательного порта. Теперь просто немного поверните акселерометр, просмотрите показания и определитесь с порогами.

Вот и все! Загрузите код в свой Arduino и наслаждайтесь !! Или, может быть, не так скоро:-(Если бы вы не пропустили раздел бонусов, загрузка кода на ATmega потребовала бы немного больше работы. У вас есть два варианта:

Вариант A: используйте USB-последовательный порт, например, базовую коммутационную плату FTDI FT232. Просто проложите провода от заголовка TTL к соответствующим контактам ATmega в соответствии с отображением ниже:

Контакты на коммутационной плате Контакты на микроконтроллере
DTR / GRN RST / сброс (контакт 1) через конденсатор 0,1 мкФ
Rx Tx (контакт 3)
Tx Rx (контакт 2)
Vcc + 5В выход
CTS (не используется)
Gnd Земля

Теперь подключите один конец USB-кабеля к коммутационной плате, а другой - к компьютеру и загрузите код, как обычно: запустите Arduino IDE, выберите соответствующий последовательный порт, установите тип платы, скомпилируйте эскиз и нажмите «Загрузить»..

Вариант Б. Используйте UNO, если он где-то валяется. Просто подключите ATmega к UNO, загрузите код, как обычно, вытащите микросхему и вставьте ее обратно в схему передатчика. Проще простого!

Любой из этих вариантов должен работать, если вы достаточно умен, чтобы записать загрузчик на свой ATmega, или, если вы были еще умнее, купили ATmega с уже установленным загрузчиком. Если нет, продолжайте и сделайте это, выполнив шаги, описанные здесь.

И ддд, мы официально закончили! Надеюсь, вам понравился этот странно длинный инструктаж. Теперь продолжайте, завершите сборку своего ровера, если вы еще не закончили, поиграйте с ним некоторое время и вернитесь, чтобы заполнить раздел комментариев ниже вопросами и / или конструктивной критикой.

Спасибо

P. S. Причина, по которой я не загрузил фотографии готового проекта, в том, что я не завершил его сам. На полпути к его созданию я подумал о некоторых дополнениях, таких как управление скоростью, предотвращение препятствий и, возможно, ЖК-дисплей на марсоходе, что на самом деле не так сложно, если мы используем микроконтроллер как на передающей, так и на принимающей стороне. Но почему бы не сделать это по-своему ?! Итак, в настоящее время я работаю в этом направлении и опубликую обновление, как только оно принесет какие-либо плоды. Однако я протестировал код и дизайн с помощью быстрого прототипа, который я построил с использованием модулей из одного из моих предыдущих проектов; Вы можете посмотреть видео здесь.

Рекомендуемые: