Оглавление:
- Шаг 1: прототип
- Шаг 2. Отправка уведомления через Blynk
- Шаг 3. Измерение энергопотребления и оценка срока службы батареи
- Шаг 4: Измерение уровня заряда батареи
- Шаг 5: Делаем красивее
- Шаг 6: завершающие штрихи
Видео: Датчик уведомления стиральной машины: 6 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Этот датчик стиральной машины находится на моей стиральной машине и использует акселерометр для определения вибрации от машины. Когда он обнаруживает, что цикл стирки завершен, он отправляет мне уведомление на мой телефон. Я построил это, потому что сама машина больше не пищит, когда она закончила, и я устал забывать вынуть белье.
Код можно найти здесь:
Полный список запчастей:
- 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 - это сервис, предназначенный для взаимодействия с устройствами Интернета вещей с помощью приложения на вашем телефоне. В этом случае я использую 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: завершающие штрихи
Я приклеил 4 неодимовых магнита размером 6 мм x 4 мм к основанию коробки, что позволяет ей надежно приклеиваться к металлической крышке стиральной машины.
В проектной коробке уже есть небольшое отверстие для доступа к кабелям. К счастью, мне удалось расположить плату ESP32 рядом с этим отверстием, чтобы получить доступ к разъему micro USB. После увеличения отверстия с помощью ножа кабель идеально подошел, чтобы можно было легко зарядить аккумулятор.
Если вас интересуют какие-либо детали этого проекта, пожалуйста, оставьте комментарий. Если вы хотите увидеть код, проверьте его на Github:
github.com/alexspurling/washingmachine
Рекомендуемые:
Мониторинг стиральной / сушильной машины с помощью ESP8266 и датчика ускорения: 6 шагов
Мониторинг стиральной / сушильной машины с помощью ESP8266 и датчика ускорения: стиральная / сушильная машина находится в подвале, и вы, как правило, кладете в нее кучу одежды, и после этого вы занимаетесь другой домашней работой. Вы не замечаете одежду, которая оставалась мокрой и впитывающейся в подвале на вашей машине
Как найти штифты мотора стиральной машины: 6 шагов
Как найти контакты мотора стиральной машины: Определение штырьков мотора стиральной машины с помощью цифрового мультиметра. Нам понадобится мультиметр в режиме проверки целостности цепи и аналогичный универсальный мотор стиральной машины, как на картинке выше. начните сначала с визуального осмотра t
Уведомления для стиральной машины: 3 шага
Уведомления о стиральных машинах. У меня есть «тупая» недорогая стиральная машина примерно за 150 фунтов стерлингов. Размер был самым большим ограничением, поэтому не судите меня слишком строго. Самая глупая вещь в моем доме - это я. Стирать белое белье с красными джемперами - один из моих грехов. Другой не помню
Как легко было отремонтировать электронику моей стиральной машины: 5 шагов (с изображениями)
Насколько легко было отремонтировать электронику моей стиральной машины: почему? Поскольку я производитель, мне нравится ремонтировать свои собственные вещи, что иногда является проблемой, потому что они остаются в нерабочем состоянии, пока я нахожу время, чтобы придумать стратегию удаления эта проблема. Починить что-то обычно просто и весело, но поиск
Уведомления стиральной машины с помощью MESH: 4 шага (с изображениями)
Уведомления стиральной машины с использованием MESH: Ой! Я забыл об одежде в стиральной машине … Вы всегда забываете забрать одежду после стирки? Этот рецепт улучшит вашу стиральную машину, чтобы получать уведомления через Gmail или IFTTT, когда ваша одежда будет готова к фото