Сделай сам своими руками
Форум для обмена опытом в области бюджетных решений
Текущее время: 28 мар 2024, 22:39

Часовой пояс: UTC + 3 часа [ Летнее время ]







Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Датчик движения на базе HW-MS03 и NodeMCU
СообщениеДобавлено: 10 июн 2020, 12:36 

Зарегистрирован: 27 май 2016, 19:36
Сообщения: 138
Есть задумка реализовать датчик движения на китайских готовых модулях. Смысл в том, чтобы это устройство большую часть времени находилось в режиме глубокого сна и лишь в момент обнаружения движения, просыпалось, отправляло данных по WI-FI и засыпало снова до следующего обнаружения.

Сам датчик движения (HW-MS03) при обнаружении формирует и удерживет на выходе логическую единицу в течение трёх секунд после прекращения движения, то есть: "движение + ещё 3 секунды с момента прекращения движения". Чтобы пробудить устройство NodeMCU нужно подать лишь короткий импульс на сброс.

Вопрос заключается в том, как сформировать такой короткий импульс из длинного, да ещё и с регулируемым тайм-аутом, то есть устройство должно гарантированно не сброситься снова до тех пор, пока полностью не завершит отправку данных и снова не перейдёт в режим сна.

Просто оставить NodeMCU включенным нельзя, так как питание осуществляется от Li-Ion батареи и потребляет ощутимый ток в размере 100mA.

Прототип представлю ниже:

Вложение:
motion_detector.jpg
motion_detector.jpg [ 128.17 Кб | Просмотров: 9305 ]


Вложение:
motion-dia.jpg
motion-dia.jpg [ 31.8 Кб | Просмотров: 9305 ]


Где между датчиком и полевым транзистором неизвестное пока устройств, которое нужно придумать.

Гугление не дало никаких ощутимых результатов. Есть вот такой подход, где применяется программный "костыль": https://www.youtube.com/watch?v=pPd362tRx5o , но мне этот путь не нравится, получается какой-то компромисс, мне он до конца не понятен, а надо-то всего сформировать короткий импульс вместо длинного. Нужен какой-то одновибратор, только какой?


Последний раз редактировалось user314 15 июн 2020, 15:22, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Формирователь короткого импульса для сброса NodeMCU
СообщениеДобавлено: 10 июн 2020, 18:30 
Модератор
Аватара пользователя

Зарегистрирован: 09 дек 2011, 17:54
Сообщения: 11557
user314
Это делает дифференцирующая цепь. Конденсатор заряжается с постоянной времени RC. Можно какой-нибудь КМОП элемент прицепить, чтобы сделать фронт и тыл импульса крутыми. Тогда ещё и размер конденсатора снизится на пару порядков, если длительность импульса требуется большая.

_________________
Резервное место встречи (если посадят): Телеграм канал Iuri's Workshop >>>


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Формирователь короткого импульса для сброса NodeMCU
СообщениеДобавлено: 12 июн 2020, 11:26 

Зарегистрирован: 27 май 2016, 19:36
Сообщения: 138
Спасибо за подсказку, всё получилось! Чуть позже выложу полную схему и скетч, когда всё доведу до ума.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Формирователь короткого импульса для сброса NodeMCU
СообщениеДобавлено: 15 июн 2020, 15:21 

Зарегистрирован: 27 май 2016, 19:36
Сообщения: 138
Итак, вот что у меня получилось:

Вложение:
motion_detector.png
motion_detector.png [ 261.11 Кб | Просмотров: 9244 ]


Цепочка C1, R2 и Q2 дёргают сброс wifi устройства. Q1 выполняет роль блокировки, до тех пор пока устройство не выполнит все функции и не перейдёт в режим сна. В ходе экспериментов спалил пару транзисторов Q1, пока не дошло, что R1 нужен обязательно, иначе импульсом пробивается сток-исток (а может и паразитный диод?).
R3 и R4 делит напряжение пропорционально до 3.3 вольта (максимум аналогового входа) при 4.2 на аккумуляторе и отправляет это значение по указанному адресу в скетче, он представлен ниже (не понял как под кат убрать):

Код:
#include <ESP8266WiFi.h>        // Include the Wi-Fi library

const byte holdPin = 12; // The pin which holds the ESP/NodeMCU in working state during data sends
const byte ledPin = 13; // Test pin for led
const int analogInPin = A0; // The pin where tests battery voltage

const char* ssid     = "SSID_NAME";         // The SSID (name) of the Wi-Fi network you want to connect to
const char* password = "password";     // The password of the Wi-Fi network

const char* host = "192.168.0.10"; // Either name or IP of the host to send data
const int httpPort = 10000; // The port

int sensorValue = 0;
int outputValue = 0;

void setup() {

  pinMode(ledPin, OUTPUT);
  pinMode(holdPin, OUTPUT);
  digitalWrite(ledPin, HIGH);
  digitalWrite(holdPin, HIGH);

  sensorValue = analogRead(analogInPin);
  outputValue = map(sensorValue, 0, 1024, 0, 42); // e.g 4.2 Voltage for Li-Ion battery
 
  Serial.begin(115200);         // Start the Serial communication to send messages to the computer
  delay(10);
  Serial.println('\n');

  Serial.println();
  Serial.print("MAC: ");
  Serial.println(WiFi.macAddress()); // Send the MAC address of the ESP8266 to the computer

  Serial.println();
  Serial.print("Battery Voltage: ");
  Serial.print(outputValue);

  // Connect to the network
  Serial.println();
  WiFi.begin(ssid, password);             
  Serial.print("Connecting to ");
  Serial.print(ssid); Serial.println(" ...");

  int i = 0;
  while (WiFi.status() != WL_CONNECTED) { // Wait for the Wi-Fi to connect
    delay(1000);
    Serial.print(++i); Serial.print(' ');
    if (i > 10) {
      Serial.println('\n');
      Serial.print("Connection failed to ");
      Serial.println(ssid);
      ESP.deepSleep(0);
    }
  }

  Serial.println('\n');
  Serial.println("Connection established!"); 
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());         // Send the IP address of the ESP8266 to the computer

  // Logging data to cloud
  Serial.println();
  WiFiClient client;
  Serial.print("Sending data to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  int l = 0;
  while (!client.connect(host, httpPort)) {
    delay(1000);
    Serial.print(++l); Serial.print(' ');
    if (l > 10) {
      Serial.println('\n');
      Serial.print("Sending failed to ");
      Serial.println(host);
      ESP.deepSleep(0);
    }
  }

  // This will send the request to the server
  client.print("Host: " + WiFi.hostname() + " / Battery Voltage: " + outputValue + " \r\n");
  delay(500);
  client.stop();
  Serial.println("\r");
  Serial.println("Data sent, communication closed!"); 

  delay(100);

  ESP.deepSleep(0);
}

void loop() {

}


const char* ssid - имя точки доступа
const char* password - пароль
const char* host - куда отправлять (имя или ip)
const int httpPort - порт

Далее я применил программу socat и шелл скрипт, который запускается каждый раз при получении данных от датчика:

Код:
socat TCP4-LISTEN:10000,fork,reuseaddr EXEC:./catch_motion_event.sh &

Код:
#!/bin/bash

while read line;
do
   beep
   echo "$(date +%F" "%H:%M:%S) / $line";
done >> catch_motion_event.log

Каждое срабатывание регистрируется в лог и пикает спикер на сервере с запущеным socat.

Код:
# cat catch_motion_event.log
2020-06-15 14:13:35 / Host: ESP-223311 / Battery Voltage: 42
2020-06-15 14:14:07 / Host: ESP-223311 / Battery Voltage: 42
2020-06-15 14:14:21 / Host: ESP-223311 / Battery Voltage: 42
2020-06-15 14:16:06 / Host: ESP-223311 / Battery Voltage: 42
2020-06-15 14:16:43 / Host: ESP-223311 / Battery Voltage: 42


На этом пока всё.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Датчик движения на базе HW-MS03 и NodeMCU
СообщениеДобавлено: 15 июн 2020, 17:39 
Модератор
Аватара пользователя

Зарегистрирован: 09 дек 2011, 17:54
Сообщения: 11557
user314 писал(а):
В ходе экспериментов спалил пару транзисторов Q1
При эксплуатации транзисторы с изолированным затвором вообще нежелательно оставлять затвор в воздухе. У некоторых типов транзистор можно пробить переход статическим напряжением в пару десятков Вольт. Я даже когда-то давно придумал вот такую схему защиты, которая позволяла работать транзисторам при токе менее 100nA.

Изображение

_________________
Резервное место встречи (если посадят): Телеграм канал Iuri's Workshop >>>


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Датчик движения на базе HW-MS03 и NodeMCU
СообщениеДобавлено: 15 июн 2020, 19:50 

Зарегистрирован: 27 май 2016, 19:36
Сообщения: 138
Iurii писал(а):
При эксплуатации транзисторы с изолированным затвором вообще нежелательно оставлять затвор в воздухе. У некоторых типов транзистор можно пробить переход статическим напряжением в пару десятков Вольт. Я даже когда-то давно придумал вот такую схему защиты, которая позволяла работать транзисторам при токе менее 100nA.

А я вот всегда забываю, что эти приборы "хлипкие" при грубом обращении, поэтому каждый раз всё сначала. Видимо привычка думать, что современные полевики менее подвержены статическим разрядам.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Датчик движения на базе HW-MS03 и NodeMCU
СообщениеДобавлено: 15 июн 2020, 22:22 
Модератор
Аватара пользователя

Зарегистрирован: 09 дек 2011, 17:54
Сообщения: 11557
user314
Я думаю путаницу в умы внесли гибридные униполярные транзисторы, затвор которых прячется за биполярным транзистором. Всегда жалею себя по этому поводу. Когда я серьёзно увлекался радиотехникой мощных униполярных транзисторов вообще не было и сократить потери переключателя можно было разве что с помощью реле. Сейчас же раздолье. Можно построить преобразователь на 10-20 Ампер размером с несколько спичечных головок.

_________________
Резервное место встречи (если посадят): Телеграм канал Iuri's Workshop >>>


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Датчик движения на базе HW-MS03 и NodeMCU
СообщениеДобавлено: 16 июн 2020, 10:37 
Аватара пользователя

Зарегистрирован: 28 янв 2014, 16:16
Сообщения: 1311
Откуда: Бишкек, Киргизия
Иногда требуется сформировать импульс управления и по фронту, и по спаду управляющего напряжения.
Испытал следующую несложную схему:
Вложение:
Удвоитель2.gif
Удвоитель2.gif [ 13.21 Кб | Просмотров: 9222 ]


Счетверение элементов используется для умощнения выхода.


Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:

ADS

Смотреть на Youtube Смотреть на Youtube Смотреть на Youtube Смотреть на Youtube Смотреть на Youtube Смотреть на Youtube
Загрузка...
Copyright © oldoctober.com 2008г.