Как я могу заставить свой arduino запускаться при обнаружении магнита и продолжать работать, пока приложение не определит, что оно должно быть выключено
Моей мыслью было использовать магнитный геркон для включения Arduino. Но как заставить его работать, если магнит перемещается? Идея состоит в том, что приложение определяет, когда можно отключить питание Arduino.
Мне не нужно энергопотребление, когда система бездействует, так как между срабатываниями магнитных триггеров могут пройти недели.
Дуг
@Doug Bower, 👍1
3 ответа
Лучший ответ:
Вы можете подключить силовой полевой МОП-транзистор параллельно геркону, которым управляет Arduino:
Arduino включается при активации геркона. Затем вы можете активировать (установить ВЫСОКИЙ уровень) контакт, подключенный к MOSFET, чтобы Arduino по-прежнему получал необходимую мощность через MOSFET, если геркон выключается. Если настало время выключить Arduino, вы можете отпустить цифровой контакт (НИЗКИЙ уровень или высокий импеданс/вход), чтобы он стал низким. Это отключит полевой МОП-транзистор, который отключит питание Arduino.
Переведите Arduino в режим глубокого сна и подключите прерывание к контакту, который контролирует ваш геркон. После запуска он может запустить ваш код, прежде чем снова погрузиться в спящий режим
Библиотека LowPower поможет вам минимизировать количество потребляемой энергии, переводя Arduino в спящий режим. Arduino проснется, как только сработает магнитный геркон, после чего вы сможете выполнить некоторый код, прежде чем он снова вернется в спящий режим.
Есть пример скетча, который может вам подойти:
// **** ВКЛЮЧАЕТ *****
#include "LowPower.h"
// Использовать вывод 2 в качестве вывода для пробуждения
const int wakeUpPin = 2;
void wakeUp()
{
// Просто обработчик прерывания контакта.
}
void setup()
{
// Настроить вывод пробуждения в качестве входных данных.
// Это потребляет несколько мкА тока.
pinMode(wakeUpPin, INPUT);
}
void loop()
{
// Разрешить вывод пробуждения для запуска прерывания по низкому уровню.
attachInterrupt(0, wakeUp, LOW);
// Вход в состояние отключения питания с отключенными модулями АЦП и БПК.
// Просыпаемся, когда на выводе пробуждения низкий уровень.
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
// Отключить внешнее прерывание вывода при пробуждении вывода.
detachInterrupt(0);
// Делаем что-нибудь здесь
// Пример: чтение датчика, регистрация данных, передача данных.
}
Спасибо за это решение. Это не совсем то, что я искал из-за энергопотребления (хотя оно очень низкое!), но я планирую использовать его для других проектов., @Doug Bower
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Питание светодиодной ленты - Сколько ампер?
- Arduino nano как клавиатура HID
- Как я могу запитать Arduino Nano от батареи LiPo, желательно 3,7 В
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
Крисл - Я думаю, это именно то, что я искал. Однако у меня есть один вопрос: поскольку я использую 4 батарейки АА в качестве источника питания, должен ли я вместо этого подключить соединение «Arduino 5V» на вашей схеме к выводу Vin? Будут ли другие проблемы, так как я использую более высокое напряжение? - Дуг, @Doug Bower
Нет, более высокое напряжение не должно быть проблемой (большинство полевых МОП-транзисторов имеют довольно высокий предел напряжения). Только убедитесь, что используемый МОП-транзистор рассчитан на ток выше, чем требуется для всей схемы. И он должен перейти в режим насыщения при напряжении затвора 5 В., @chrisl