Я планирую измерить уровень воды в колодце, глубина которого составляет около 10 метров, а максимальный уровень воды - до 5 метров. Я планирую использовать ультразвуковой датчик HC SR04 для измерения глубины, передавать его через ZigBee на Raspberry Pi в моем доме.
Как обсуждалось в моем предыдущем вопросе, мне нужно выбрать микроконтроллер для соединения ультразвукового датчика и модуля ZigBee.
Параметры для выбора:
Низкое энергопотребление: я планирую использовать это от батареи, поэтому приоритетным является низкое энергопотребление. На данный момент у меня нет цели для использования энергии или дней между сменами батареи или даже какой батареи использовать. Так как это больше учебный проект, и он у меня дома, я гибок, но меньшее энергопотребление лучше.
Низкая стоимость: это учебный проект для меня, и я не хочу тратить на это колоссальную сумму денег, поэтому более низкая стоимость лучше.
Работа внутри колодца: весь проект будет работать внутри колодца и подвергаться воздействию сильного солнечного света и дождя. Я буду обеспечивать хороший случай и защиту, хотя.
Легко программировать.
Я выбрал ZigBee, поскольку он прост, соответствует моему варианту использования и малой мощности. Но мое требование состоит в том, чтобы транспортировать данные датчика, и я открыт для других видов транспорта. Расстояние от моего колодца до Raspberry Pi составляет около 6 метров со стеной между ними. Я планирую измерять глубину воды каждые 10 минут и два раза в минуту, когда работает водяной насос (примерно 20 минут в день).
Ответы:
Общий процесс выбора микроконтроллера.
Подведите ваши требования к микроконтроллеру. Например, в этом случае:
Для этого можно использовать 8-контактный контроллер, который может также потребовать использования программирующих контактов в общих целях.
Определите необходимую производительность процессора и требования к памяти . Достаточно ли использовать 8-битный MCU или вам нужен 32-битный? На каких тактовых частотах процессора допустимы десятки МГц или достаточно 1 МГц? Сколько памяти программы, ОЗУ и ПЗУ необходимо?
Учитывая описанное приложение, вам не нужна высокая вычислительная производительность. Вероятно, будет достаточно 8-битного контроллера (хотя он будет не намного дешевле 32-битного, поэтому вы можете выбрать здесь цену, возможно).
Низкое энергопотребление . Когда это не критично, вы, вероятно, можете обойтись практически с любым контроллером, используя режим низкого энергопотребления с наименьшим напряжением питания и системной тактовой частотой. Если это более важно, вы можете начать сужать свой список поиска, начав с выделенных ядер с низким энергопотреблением MCU, таких как (ядра ARM® Cortex®-M0 или M0 + CPU). Обычно таблицы данных содержат таблицы для большинства режимов с низким энергопотреблением / частоты VCC / SysClk , в более качественных таблицах также указывается потребление каждой периферии.
Инструменты разработчика . Я считаю это очень важным аспектом. Специализированные аппаратные средства программирования могут стоить целое состояние, поэтому обычно я использую микроконтроллеры, для которых у меня уже есть программисты. Когда вы переключаетесь на другую семью или бренд, полезно инвестировать в плату разработки, на которой есть встроенный программатор, который впоследствии можно будет использовать для программирования своих пользовательских плат. В общем, всегда сначала проверяйте, сколько будет стоить возможность загружать программы в микроконтроллер.
Как отметил @Sean в комментариях, возможным и экономически эффективным решением будет поиск таких RF-модулей, которые поставляются со встроенным программируемым MCU приложения, которое может запускать ваше встроенное программное обеспечение, в то же время обрабатывая часть RF-связи. Такие модули существуют для BLE, WiFi и ZigBee и, возможно, для многих других технологий.
Кроме того, о том, как выживет любой MCU в колодце. Все это сводится к корпусу, который вы предоставите для устройства. Например, не имеет большого значения, какой MCU вы выберете, если корпус не на 100% водонепроницаем.
TL; DR; Здесь идет специфическая часть продукта.
Вы можете выбрать ATtiny25, который стоит 0,87 $ / 1 штука на Farnell. 8-битный, 8-контактный, поэтому не займет много места. В режиме выключения питания он потребляет 0,2 мкА с отключенным сторожевым таймером, при 3 В. 2-4 мкА, если сторожевой таймер включен. Он совместим с Arduino, поэтому программирование не будет стоить вам дорого (программист USBasp или AVRdude стоит около 2 $ на eBay). ( Обратите внимание : вы должны использовать библиотеку Arduino Software Serial для взаимодействия с радиочастотным коммуникационным модулем, поскольку этот MCU имеет только SPI для аппаратного обеспечения.) В целом, он небольшой, дешевый, с относительно низким энергопотреблением, но UART с побитовым битом может усложняет это все же. Он имеет 2 кБ памяти программ, что должно быть достаточно для вас.
Или используйте ARM Cortex M0, который потребляет 2 мкА в режиме ожидания и 5 мкА в режиме остановки. Такой MCU, например, STM32F030F4, который стоит 1,09 $ / 1 шт . Это более мощный 32-разрядный контроллер с максимальной тактовой частотой 48 МГц, но, как вы можете видеть, всего за + 0,2 $. Он поставляется с программной памятью 16 КБ, чего недостаточно для выполнения этой простой задачи. Он имеет SPI, UART, I2C и множество других периферийных устройств. Программирование это будет стоить дороже, выделенный программист стоит 20 долларов в Farnell. На мой взгляд, не стоит. Вместо этого вы можете инвестировать в плату разработки для семейства F0, в которой есть встроенный программист (ST-LINK) . STM32F0Открытие платы обнаружения ~ 10 $, Вы можете начать создавать прототипы с помощью этой платы и позже использовать ее в качестве программиста.
источник
Глядя на простоту программирования и низкую стоимость, я бы, вероятно, начал с какого-то модуля Arduino (или недорогого клона). Код для вашего ультразвукового датчика уже существует, как и пример кода для ZigBee, например, с использованием модулей Digi XBee. В последнем случае вы подключаете XBee к последовательному порту, и после установления соединения с почтенным старым командным интерфейсом «AT» у вас появляется двухточечный канал, который вы можете отправить любой текст вниз (на ваш Raspberry Pi ). ZigBee - не самый дешевый тип связи на короткие расстояния, но модули XBee в реальном выражении упали в цене за последние 5 лет.
Я знаю, что у некоторых людей есть проблемы с языком на основе C / C ++, используемым в Arduino, но в этом случае вы в значительной степени объедините уже существующие скрипты от других пользователей.
Если вы поищите в Google «спящий режим Arduino», вы найдете примеры того, как вы можете перевести Arduino в режим пониженного энергопотребления, а также время от времени просыпаться, чтобы взять чтение, передать его, а затем снова войти в спящий режим.
источник