»
Добавить статью

Дверной звонок при коронавирусе covid-19

2020-03-31 в 16:16

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

Так автор конструкции RoniBandini нашёл новое применение популярному среди ардуинщиков пирометрическому датчику MLX90614. Свой проект мастер выложил на сайт Arduino Project Hub под лицензией CC-BY 4.0 по адресу https://create.arduino.cc/project....-114b3f

Дополнительные ссылки:

https://www.thingiverse.com/thing:4224148 - файлы для 3D-печати корпуса, лицензия та же.

https://github.com/ronibandini/CoronavirusDoorbell - код, лицензия GPL 3.0. Для компиляции необходимы библиотеки: Wire.h, Adafruit_MLX90614.h, TM1637Display.h, SoftwareSerial.h.

Устройство выполнено на Arduino Nano R3, подойдут и его клоны. В качестве периферийных устройств, помимо упомянутого выше пирометрического датчика, требуются: пьезоизлучатель без встроенного генератора (расположен в кнопке, частота и продолжительность звука задаются программно, по умолчанию - соответственно, 2 кГц и 0,1 с), дисплей с последовательным интерфейсом типа COM-11441 фирмы SparkFun или другой на драйвере TM1637 (переписав код, можно приспособить дисплей с любым другим интерфейсом), а также MP3-модуль DEV-12660 того же производителя, либо более распространённый DFPlayer компании DFRobot. Оба вида модулей допускают непосредственное подключение динамической головки к встроенному усилителю. Ещё нужны блок питания, карта памяти и кнопка. Вначале всё это необходимо соединить при помощи макетной платы типа breadboard и перемычек типа "дюпон" по следующей схеме:

Та же схема в формате PNG: https://hacksterio.s3.amazonaws.com/uploads....lUA.png

Затем нужно залить скетч:

Код
/***************************************************  
Coronavirus Doorbell
By Roni Bandini
March 2020
@RoniBandini
****************************************************/

  // IR Temp sensor SDA A4 SCL A5 GND 5V
  // 7 Seg Display Clock D12 D9 GND 5V
  // Buzzer GND y D4
  // Button GND y D3
  // MP3 Player GND 5V D10 D11
   
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <TM1637Display.h>
#include "SoftwareSerial.h"

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

// Mp3 player rx and tx
SoftwareSerial mySerial(10, 11);  

#define CLK 12  
#define DIO 9  
#define buttonPin 3
#define buzzerPin 4

# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00  
# define ACTIVATED LOW

int bodyTemperature=0;
int buttonValue=0;

// adjust sensor  
int adjustTemp=3;

// Creates display object  
TM1637Display display(CLK, DIO);

// All - in display
const uint8_t SEG_START[] = {
  SEG_G, // -
  SEG_G, // -
  SEG_G, // -
  SEG_G // -
  };

void setup() {

  // button
  pinMode(buttonPin,INPUT_PULLUP);  

  // Buzzer
  pinMode(buzzerPin, OUTPUT);
   
  Serial.begin(9600);

  Serial.println("Coronavirus doorbell - Roni Bandini @RoniBandini");  
   

  // mp3 player  
  mySerial.begin(9600);  

  // nothing being played, just init  
  playFirst();  
   
  display.setBrightness(0x0f);
   
  display.setSegments(SEG_START);  

  mlx.begin();  

  delay(1000);

   
}

void loop() {

  // read button
  buttonValue = digitalRead(buttonPin);  
   
  if (buttonValue == LOW) {
   
  beep();
  // button has been pressed
   
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC());  
  Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");
   
  bodyTemperature=mlx.readObjectTempC();  

  bodyTemperature=bodyTemperature+adjustTemp;

  // send to display
  display.showNumberDec(bodyTemperature, false,4);

  execute_CMD(0x0F,0x01,0x01);
   
   
  if (bodyTemperature>38) {
  Serial.println("High fever");  
  execute_CMD(0x0F,0x01,0x02);  
  }

  Serial.println();

  delay(5000);
   
  } // button pressed

  display.setSegments(SEG_START);  
   
}

void beep(){
  tone(buzzerPin, 2000);  
  delay(100);  
  noTone(buzzerPin);  
  }

  void playFirst()
{
  execute_CMD(0x3F, 0, 0); // query device
  delay(500);
  setVolume(25);
  delay(500);

}

void pause()
{
  execute_CMD(0x0E,0,0);
  delay(500);
}

void play()
{
  execute_CMD(0x0D,0,1);  
  delay(500);
}

void playNext()
{
  execute_CMD(0x01,0,1);
  delay(500);
}

void playPrevious()
{
  execute_CMD(0x02,0,1);
  delay(500);
}

void setVolume(int volume)
{
  execute_CMD(0x06, 0, volume);  
  delay(2000);
}

void execute_CMD(byte CMD, byte Par1, byte Par2)
// Excecute the command and parameters
{
// Calculate the checksum (2 bytes)
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
// Build the command line
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,
Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
//Send the command line to the module
for (byte k=0; k<10; k++)
{
mySerial.write( Command_line[k]);
}
}

Скетч в ZIP-архиве:https://github.com/ronibandini/CoronavirusDoorbell/zipball/master

Как видим, критерий в программе прописан очень простой: меньше 38 °C - звонок, больше - сирена. Правильно ли это - вопрос к медикам. Когда Arduino подключено к компьютеру, скетч выводит в монитор последовательного порта оповещения об основных происходящих событиях. На карте памяти, установленной в MP3-модуль, должны быть два файла: 01.mp3 - звонок, 02.mp3 - сирена. Эти звуки можно записать самостоятельно.

Отладив звонок на макетке, его нужно разобрать, оставив breadboard для отладки следующих проектов, а затем собрать заново пайкой и поместить в корпус - такой же 3D-печатный, как у мастера, либо самодельный, либо в готовую распаечную коробку. Динамическую головку, подключённую к MP3-модулю, разместить в отдельном корпусе (а не в том же, как сделано у автора - это же кнопка с пирометром, пищалкой и дисплеем, а не сам звонок).

Вот так получилось у мастера:

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

Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте и страницу в Twitter!
Так же у нас есть Telegram канал.

Вам понравился наш материал? Поделитесь с друзьями!

Оценка статьи: 0.0 из 5. Уже оценило 0 читателей
Автор: tormozedison
Источник: https://create.arduino.cc/projecthub/roni-bandini/coronavirus-doorbell-114b3f


Вам может быть это интересно

Всего комментариев: 0
Добавить комментарий
Все смайлы
Сейчас читают