Оглавление:

Датчик уведомления стиральной машины: 6 шагов (с изображениями)
Датчик уведомления стиральной машины: 6 шагов (с изображениями)

Видео: Датчик уведомления стиральной машины: 6 шагов (с изображениями)

Видео: Датчик уведомления стиральной машины: 6 шагов (с изображениями)
Видео: 6 советов для первого и правильного запуска новой стиральной машины 2024, Июль
Anonim
Image
Image
Прототип
Прототип

Этот датчик стиральной машины находится на моей стиральной машине и использует акселерометр для определения вибрации от машины. Когда он обнаруживает, что цикл стирки завершен, он отправляет мне уведомление на мой телефон. Я построил это, потому что сама машина больше не пищит, когда она закончила, и я устал забывать вынуть белье.

Код можно найти здесь:

Полный список запчастей:

  • WEMOS LOLIN32
  • Макетная плата половинного размера (для прототипирования)
  • Коробка проекта АБС с матричной платой 59x88x30 мм
  • Sparkfun LIS3DH - трехосевой акселерометр
  • 1x ZVP3306A P-канальный МОП-транзистор, 160 мА, 60 В, 3-контактный E-Line
  • 1x BC549B TO92 30 В NPN транзистор
  • 5мм LED Синий 68 мкд
  • 1x 100 кОм 0,125 Вт CF резистор
  • 1x 330 кОм 0,125 Вт CF резистор
  • 2x 10кОм 0,250Вт CF резистор
  • 1x 100 0,250 Вт CF резистор
  • 2-контактный женский кабель JST PH-Style (14 см)
  • 4x неодимовых магнитных диска M1219-8 6x4 мм

Шаг 1: прототип

Прототип
Прототип

В устройстве используется микроконтроллер ESP32. В этом случае я использую плату для разработки Lolin32 от Wemos, которую вы можете купить на AliExpress примерно за 7 долларов. Акселерометр - это Sparkfun LIS3DH - важно, чтобы акселерометр был цифровым, а не аналоговым, как вы увидите позже. Батарею я взял из старого набора bluetooth-колонок.

ESP32 подключается к акселерометру через I2C. Первая версия кода просто опрашивала три оси ускорения (x, y и z) для получения измеренного значения ускорения каждые 20 мс. Поместив прототип макета в стиральную машину, я построил приведенный выше график, который показывает пики ускорения во время различных фаз цикла стирки. Те пики, где абсолютное ускорение превышало 125 мг (125 тысячных долей нормальной силы тяжести), показаны оранжевым цветом. Мы хотим обнаружить эти периоды и использовать их для определения состояния стиральной машины.

Как определить, включена машина или нет?

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

К счастью, акселерометр LIS3DH имеет функцию, с помощью которой он может запускать прерывание, когда ускорение превышает заданный порог (обратите внимание, это требует использования встроенного фильтра верхних частот акселерометра - подробности см. В коде на Github), а ESP32 можно разбудить. из режима глубокого сна с помощью прерывания. Мы можем использовать эту комбинацию функций для создания спящего режима с очень низким энергопотреблением, который запускается движением.

Псевдокод будет выглядеть примерно так:

# Пробуждение устройства

notification_threshold = 240 counter = 10 Accelerometer.set_threshold (96) # 96 мг, пока счетчик> 0: если Accelerometer.above_threshold (): counter ++ else: counter- if counter> notification_threshold: # Обнаружен последний цикл отжима, спящий режим (1 секунда) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Вы можете видеть здесь, что мы используем счетчик, чтобы определить, сколько секунд ускорения мы обнаружили в течение текущего периода пробуждения. Если счетчик упадет до нуля, мы можем снова перевести устройство в спящий режим. Если счетчик достигает 240 (порог уведомления), значит, мы обнаружили 4 минуты вибрации. Мы можем настроить значения этих порогов, чтобы убедиться, что устройство правильно определяет последний цикл отжима. Как только будет обнаружена достаточная вибрация, мы можем просто поспать еще 5 минут (в моем случае это время, необходимое для фактического завершения стирки) перед отправкой уведомления.

Шаг 2. Отправка уведомления через Blynk

Отправка уведомления через Blynk
Отправка уведомления через Blynk

Blynk - это сервис, предназначенный для взаимодействия с устройствами Интернета вещей с помощью приложения на вашем телефоне. В этом случае я использую API push-уведомлений, который запускается простым HTTP POST для Blynk API.

Шаг 3. Измерение энергопотребления и оценка срока службы батареи

Измерение энергопотребления и оценка срока службы батареи
Измерение энергопотребления и оценка срока службы батареи

Рекламируется, что чип ESP32 имеет очень низкое энергопотребление в режиме глубокого сна (всего 5 мкА). К сожалению, схемы на многих различных платах разработки обеспечивают очень разные характеристики энергопотребления - не все платы разработки ESP32 созданы одинаковыми. Например, когда я впервые начал этот проект, я использовал Sparkfun ESP32 Thing, который потреблял около 1 мА энергии в режиме глубокого сна (даже после отключения светодиода питания). С тех пор я использую Lolin32 (а не версию Lite), на которой я измерил ток 144,5 мкА в режиме глубокого сна. Для этого измерения я просто подключил мультиметр последовательно к батарее и устройству. Это, безусловно, легче сделать при создании прототипа на макетной плате. Я также измерил текущее использование, когда устройство не спит:

  • Глубокий сон: 144,5 мкА
  • Пробуждение: 45 мА
  • Wi-Fi включен: 150 мА

Предполагая, что я использую машину два раза в неделю, я оценил следующие моменты времени, в течение которых датчик проводит в каждом состоянии:

  • Глубокий сон: 604090 секунд (~ 1 неделя)
  • Бодрствование: 720 секунд (12 минут)
  • Wi-Fi включен: 10 секунд

По этим цифрам мы можем оценить, на сколько хватит заряда батареи. Я использовал этот удобный калькулятор, чтобы получить среднее энергопотребление 0,2 мА. Расчетное время автономной работы составляет 201 день или около 6 месяцев! На самом деле я обнаружил, что устройство перестанет работать примерно через 2 месяца, поэтому могут быть некоторые ошибки в измерениях или емкости аккумулятора.

Шаг 4: Измерение уровня заряда батареи

Измерение уровня заряда батареи
Измерение уровня заряда батареи
Измерение уровня заряда батареи
Измерение уровня заряда батареи

Я подумал, что было бы неплохо, если бы устройство могло сообщать мне, когда батарея разряжается, чтобы я знал, когда ее заряжать. Чтобы измерить это, нам нужно измерить напряжение батареи. Батарея имеет диапазон напряжений 4,3–2,2 В (минимальное рабочее напряжение ESP32). К сожалению, диапазон напряжений на выводах АЦП ESP32 составляет 0–3,3 В. Это означает, что нам нужно понизить напряжение батареи с максимального значения 4,3 до 3,3, чтобы избежать перегрузки АЦП. Это можно сделать с помощью делителя напряжения. Просто подключите два резистора с соответствующими значениями от батареи к земле и измерьте напряжение посередине.

К сожалению, простая схема делителя напряжения потребляет энергию из аккумулятора, даже если напряжение не измеряется. Вы можете смягчить это, используя резисторы высокого номинала, но недостатком является то, что АЦП может быть не в состоянии потреблять достаточный ток для проведения точных измерений. Я решил использовать резисторы со значениями 100 кОм и 330 кОм, которые упадут с 4,3 В до 3,3 В согласно этой формуле делителя напряжения. Учитывая общее сопротивление 430 кОм, мы ожидаем, что потребляемый ток составит 11,6 мкА (по закону Ома). Учитывая, что мы используем ток в режиме глубокого сна 144 мкА, это достаточно значительное увеличение.

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

Имея указанную выше схему, я использую следующий псевдокод для получения значения заряда батареи в процентах:

battery_percentage ():

# включить цепь напряжения батареи gpio_set_level (BATTERY_EN_PIN, HIGH) # Уровень заряда батареи возвращается как целое число от 0 до 4095 adc_value = adc1_get_value (ADC_PIN) # включить цепь напряжения батареи gpio_set_level (BATTERY_EN_PIN, LOW) # float adc_voltage * делитель использует резисторы 100 кОм / 330 кОм # 4,3 В -> 3,223, 2,4 -> 1,842 ожидаемый_макс = 4,3 * 330 / (100 + 330) ожидаемый_мин = 2,4 * 330 / (100 + 330) уровень заряда батареи = (adc_voltage-ожидаемое_мин) / (ожидаемое_макс. -expected_min) return battery_level * 100.0

Шаг 5: Делаем красивее

Делаем это красивее
Делаем это красивее
Делаем это красивее
Делаем это красивее
Делаем это красивее
Делаем это красивее

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

Возможно, самой сложной частью этого было размещение всех компонентов цепи напряжения батареи на небольшом пространстве рядом с Lolin32. К счастью, с небольшими хитростями и соответствующими соединениями, сделанными с помощью припоя, схема аккуратно вписывается. Кроме того, поскольку Wemos Lolin32 не имеет контакта, открывающего положительный полюс аккумулятора, мне пришлось припаять провод от разъема аккумулятора к плате контактов.

Я также добавил светодиод, который мигает, когда устройство обнаруживает движение.

Шаг 6: завершающие штрихи

Image
Image
Последние штрихи
Последние штрихи
Последние штрихи
Последние штрихи

Я приклеил 4 неодимовых магнита размером 6 мм x 4 мм к основанию коробки, что позволяет ей надежно приклеиваться к металлической крышке стиральной машины.

В проектной коробке уже есть небольшое отверстие для доступа к кабелям. К счастью, мне удалось расположить плату ESP32 рядом с этим отверстием, чтобы получить доступ к разъему micro USB. После увеличения отверстия с помощью ножа кабель идеально подошел, чтобы можно было легко зарядить аккумулятор.

Если вас интересуют какие-либо детали этого проекта, пожалуйста, оставьте комментарий. Если вы хотите увидеть код, проверьте его на Github:

github.com/alexspurling/washingmachine

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