Статьи » Разработки |
2020-03-31 в 16:16 (последнее изменение 2022-01-30 в 01:06)
Вы подходите к двери и нажимаете на звонковую кнопку. Встроенный в неё пирометр измеряет и отображает на дисплее вашу температуру, и если она нормальная, звучит обычный звонок, а если повышенная - сирена. Так автор конструкции 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-модулю, разместить в отдельном корпусе (а не в том же, как сделано у автора - это же кнопка с пирометром, пищалкой и дисплеем, а не сам звонок). Вот так получилось у мастера: В текущем виде устройство не считается ни медтехникой, ни средством изменения. Результаты, полученные с его помощью, нельзя применять для принятия официальных решений - например, о недопуске посетителя с повышенной температурой в магазин. Нужно повторить измерение тепловизором или пирометром. Но фирмы-производители дверных звонков могут освоить выпуск этих полезных приборов, получив все необходимые сертификаты. И тогда вскоре такие звонки появятся повсюду. Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте. Так же у нас есть Telegram канал. Вам понравился наш материал? Поделитесь с коллегами! Просмотров: 2991. Оценка статьи: 4.0 из 5. Уже оценило 1 читатель |
Всего комментариев: 0 | |