Главная » Радиоуправление
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Похожие статьи:


Радиоуправление на ATmega8 и радиомодулях NRF24L01+PA+LNA. Приемник

В данной статье, являющейся логическим , будет рассмотрен приемник радиоуправления.

Как и в случае с передатчиком, основой устройства выступает микроконтроллер 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). Все исходные файлы присутствуют в архиве, прикрепленном к статье.

Алгоритм работы программы можно описать так:

  1. Инициализация таймера, АЦП, прерываний и регистров ввода-вывода.
  2. Инициализация исполнительных устройств (сервомашинки и т.д.)
  3. Инициализация радиомодуля.
  4. Перевод радиомодуля в режим приема.
  5. Ожидание приема, а так же циклический опрос АЦП с целью мониторинга напряжения аккумуляторной батареи. Опрос датчика DS18B20, датчика воды.
  6. При приеме данных, корректируется положение исполнительных механизмов, состояние нагрузок. Если получен флаг запроса состояния, отправляются данные о температуре и напряжении.
  7. Работа с переменными-счетчиками, переход к пункту 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):

Fuse-биты

Печатная плата, как и в случае с приемником является односторонней. Что, однако, повлекло за собой использование перемычек. Размеры готовой платы составляют 70х40(мм).

Печатная плата

Разъем для программирования не выведен, так что для заливки прошивки в микроконтроллер необходимо аккуратно припаяться тонкими проводками к печатным проводникам, либо использовать программатор со специальной панелькой для программирования МК еще до установки на плату.

Про возможную замену деталей в данном случае можно не упоминать. Единственное, L7805 заменить на L78L05 нельзя - от нее питаются и сервоприводы, а "облегченная" версия не потянет ток более 100мА.

Немного фотографий, а так же видео:

Фото 1 Фото 2

Фото 3 Фото 4

Так же, хочу напомнить, что для корректной работы модуля NRF24L01+ необходимо подпаять к его выводам питания два конденсатора: электролитический, емкостью ~47мкФ, и керамический ~100нФ (последнее фото). Либо, как вариант, предусмотреть посадочные места для них на плате, непосредственно возле разъема для подключения радио модуля.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
U0 Линейный регуляторLM1117-3.31 Расположен вне платыПоиск в FivelВ блокнот
U1 МК AVR 8-бит
ATmega8
1 TQFP-32Поиск в FivelВ блокнот
U4 Линейный регулятор
L7805AB
1 TO220Поиск в FivelВ блокнот
U5 Датчик температуры
DS18B20
1 ОпциональноПоиск в FivelВ блокнот
R1, R2 Резистор
10 кОм
2 0805Поиск в FivelВ блокнот
R3, R4 Резистор
1 кОм
2 0805Поиск в FivelВ блокнот
R9, R10 Резистор
4.7 кОм
2 0805Поиск в FivelВ блокнот
C6, C7 Конденсатор100 нФ2 0805Поиск в FivelВ блокнот
C8 Электролитический конденсатор470мкФ1 16ВПоиск в FivelВ блокнот
C9, C10 Конденсатор33 пФ2 0805Поиск в FivelВ блокнот
J1-J7, J10-J11 РазъемPLS-401 Поиск в FivelВ блокнот
X2 Кварцевый резонатор8МГц1 НизкопрофильныйПоиск в FivelВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 2
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (5) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
Саша #
Микроконтроллер определить, что в корпусе появилась вода, а что будет происходить дальше?
Ответить
0

[Автор]
zeconir #
Это уже зависит от ваших действий. Будете дальше гонять модель - флаг вам в руки, мешать никто не будет.
Ответить
0
Саша #
Имею в виду какие действия будет делать микроконтроллер после обнаружения воды?
Ответить
0

[Автор]
zeconir #
Отсылать на пульт сигнал, на этом действия заканчиваются. Все остальные функции не отключаются, управляемость моделью сохраняется.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Набор 4WD Kit Bluetooth
Набор 4WD Kit Bluetooth
Сатфайндер Ручной фен 450 Вт с регулировкой температуры
вверх