В данной статье, являющейся логическим продолжением предыдущей, будет рассмотрен приемник радиоуправления.
Как и в случае с передатчиком, основой устройства выступает микроконтроллер 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). Все исходные файлы присутствуют в архиве, прикрепленном к статье.
Алгоритм работы программы можно описать так:
Есть момент, на котором, на мой взгляд, стоит остановиться подробнее.
Измерение напряжения (уровня заряда) аккумулятора несколько отличается от аналогичной процедуры в передатчике. Всему виной различное опорное напряжение АЦП микроконтроллера (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. Полученную разницу сохранить в отдельную переменную. После этого все три 2-хбайтовых переменных можно будет разбить на пары байт и отправить на передатчик, для последующего отображения.
При прошивке микроконтроллера Fuse-биты выставляются в соответствии с образцом (мной использовался Khazama AVR Programmer в связке с USBasp):
Печатная плата, как и в случае с приемником является односторонней. Что, однако, повлекло за собой использование перемычек. Размеры готовой платы составляют 70х40(мм).
Разъем для программирования не выведен, так что для заливки прошивки в микроконтроллер необходимо аккуратно припаяться тонкими проводками к печатным проводникам, либо использовать программатор со специальной панелькой для программирования МК ещё до установки на плату.
Про возможную замену деталей в данном случае можно не упоминать. Единственное, L7805 заменить на L78L05 нельзя — от нее питаются и сервоприводы, а «облегченная» версия не потянет ток более 100мА.
Немного фотографий, а так же видео:
Так же, хочу напомнить, что для корректной работы модуля NRF24L01+ необходимо подпаять к его выводам питания два конденсатора: электролитический, емкостью ~47мкФ, и керамический ~100нФ (последнее фото). Либо, как вариант, предусмотреть посадочные места для них на плате, непосредственно возле разъема для подключения радио модуля.
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
U0
Линейный регуляторLM1117-3.31
Расположен вне платыU1
МК AVR 8-битATmega81
TQFP-32U4
Линейный регуляторL7805AB1
TO220U5
Датчик температурыDS18B201
ОпциональноR1, R2
Резистор10 кОм2
0805R3, R4
Резистор1 кОм2
0805R9, R10
Резистор4.7 кОм2
0805C6, C7
Конденсатор100 нФ2
0805C8
Электролитический конденсатор470мкФ1
16ВC9, C10
Конденсатор33 пФ2
0805J1-J7, J10-J11
РазъемPLS-401
X2
Кварцевый резонатор8МГц1
НизкопрофильныйДобавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- Радиоуправление_ Приемник.rar (172 Кб)