В данной статье, являющейся логическим продолжением предыдущей, будет рассмотрен приемник радиоуправления.
Как и в случае с передатчиком, основой устройства выступает микроконтроллер ATmega8. Этот выбор не обусловлен ничем, кроме того, что у меня несколько таких микроконтроллеров валялось без дела. Кроме микроконтроллера в схеме фигурируют уже знакомые нам NRF24L01+ (или их модификации), линейные стабилизаторы L7805 и LM1117-3.3, а так же несколько разъемов, кварцевый резонатор и резисторы с конденсаторами.
Принципиальная схема приведена ниже:
Внимание! На схеме не указан стабилизатор LM1117-3, подключенный к выходу L7805, и питающий радиомодуль NRF24L01 (на схеме обозначено точкой "VCC_NRF24").
Разъем J2 предназначен для подключения дискретных (включено/выключено) нагрузок, но для управления чем-то, что требует тока >20 mA, необходимо установить транзисторные ключи. J3 служит для измерения напряжения батареи (делитель на R1 и R4 уже подключен к входу стабилизатора L7805). J4, а так же S1, S2, S3 - это исполнительные устройства (которым требуется пропорциональное управление). J5, J6 - шины питания, выведены для удобства подключения. К J7 подключаются два проводника, при замыкании которых микроконтроллер определяет, что в корпусе появилась вода (все-таки управление создавалось для водной модели). Но, если вам эта функция не нужна, просто можете не выводить этот разъем. J10 это разъем питания, к нему подключается аккумуляторная батарея.
С J11 и J12 несколько интереснее. Изначально планировалось подключать к управлению два датчика температуры DS18B20, так как на модель должно было быть установлено два двигателя. Но в ходе работ оказалось, что второй двигатель не нужен, и датчик к нему как следствие тоже. В прошивке, на момент написания статьи, возможно использование только одного датчика температуры, который подключен к разъему J11. J12 пока что не используется, но немного изменив прошивку, к нему можно будет подключить светодиод для индикации приема команд.
Программа для микроконтроллера, как и в случае с передатчиком, писалась на C под AVR-GCC (WinAVR). Все исходные файлы присутствуют в архиве, прикрепленном к статье.
Алгоритм работы программы можно описать так:
- Инициализация таймера, АЦП, прерываний и регистров ввода-вывода.
- Инициализация исполнительных устройств (сервомашинки и т.д.)
- Инициализация радиомодуля.
- Перевод радиомодуля в режим приема.
- Ожидание приема, а так же циклический опрос АЦП с целью мониторинга напряжения аккумуляторной батареи. Опрос датчика DS18B20, датчика воды.
- При приеме данных, корректируется положение исполнительных механизмов, состояние нагрузок. Если получен флаг запроса состояния, отправляются данные о температуре и напряжении.
- Работа с переменными-счетчиками, переход к пункту 5.
Есть момент, на котором, на мой взгляд, стоит остановиться подробнее.
Измерение напряжения (уровня заряда) аккумулятора несколько отличается от аналогичной процедуры в передатчике. Всему виной различное опорное напряжение АЦП микроконтроллера (3,3В в передатчике против 5В в приемнике).
unsigned char battery_level[2][3] = {{135, 147, 155}, {67, 73, 77}}; //Значения, характеризующие уровень заряда // unsigned char get_battery(unsigned char n) { volatile unsigned char a, i; battery = adc_read(n + 6, 0); // for (i = 0;i < 2;i++) { if (battery < battery_level[i][0]) a = 0; else if (battery < battery_level[i][1]) a = 1; else if (battery < battery_level[i][2]) a = 2; else a = 3; } // return a; }
Выше представлена упрощенная процедура для оценки уровня заряда. Принцип действия прост - если нужно узнать общий уровень заряда, вызываем:
x = get_battery(0);
Если же только "нижней" банки, то:
x = get_battery(1);
Для примерной оценки "верхней" банки можно сначала узнать общий уровень и сравнить его с уровнем "нижней". Если вам необходимо более точно контролировать уровень заряда, то можно сделать следующим образом: измерять напряжение на делителе R1-R4, далее измерить на R2-R3. Полученную разницу сохранить в отдельную переменную. После этого все три двухбайтовых переменных можно будет разбить на пары байт и отправить на передатчик, для последующего отображения.
При прошивке микроконтроллера Fuse-биты выставляются в соответствии с образцом (мной использовался Khazama AVR Programmer в связке с USBasp):
Печатная плата, как и в случае с приемником является односторонней. Что, однако, повлекло за собой использование перемычек. Размеры готовой платы составляют 70х40(мм).
Разъем для программирования не выведен, так что для заливки прошивки в микроконтроллер необходимо аккуратно припаяться тонкими проводками к печатным проводникам, либо использовать программатор со специальной панелькой для программирования МК еще до установки на плату.
Про возможную замену деталей в данном случае можно не упоминать. Единственное, L7805 заменить на L78L05 нельзя - от нее питаются и сервоприводы, а "облегченная" версия не потянет ток более 100мА.
Немного фотографий, а так же видео:
Так же, хочу напомнить, что для корректной работы модуля NRF24L01+ необходимо подпаять к его выводам питания два конденсатора: электролитический, емкостью ~47мкФ, и керамический ~100нФ (последнее фото). Либо, как вариант, предусмотреть посадочные места для них на плате, непосредственно возле разъема для подключения радио модуля.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
U0 | Линейный регулятор | LM1117-3.3 | 1 | Расположен вне платы | Поиск в магазине Отрон | |
U1 | МК AVR 8-бит | ATmega8 | 1 | TQFP-32 | Поиск в магазине Отрон | |
U4 | Линейный регулятор | L7805AB | 1 | TO220 | Поиск в магазине Отрон | |
U5 | Датчик температуры | DS18B20 | 1 | Опционально | Поиск в магазине Отрон | |
R1, R2 | Резистор | 10 кОм | 2 | 0805 | Поиск в магазине Отрон | |
R3, R4 | Резистор | 1 кОм | 2 | 0805 | Поиск в магазине Отрон | |
R9, R10 | Резистор | 4.7 кОм | 2 | 0805 | Поиск в магазине Отрон | |
C6, C7 | Конденсатор | 100 нФ | 2 | 0805 | Поиск в магазине Отрон | |
C8 | Электролитический конденсатор | 470мкФ | 1 | 16В | Поиск в магазине Отрон | |
C9, C10 | Конденсатор | 33 пФ | 2 | 0805 | Поиск в магазине Отрон | |
J1-J7, J10-J11 | Разъем | PLS-40 | 1 | Поиск в магазине Отрон | ||
X2 | Кварцевый резонатор | 8МГц | 1 | Низкопрофильный | Поиск в магазине Отрон | |
Скачать список элементов (PDF)
Прикрепленные файлы:
- Радиоуправление_ Приемник.rar (172 Кб)
Комментарии (7) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
[Автор]
[Автор]