Статьи » Разработки |
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-модулю, разместить в отдельном корпусе (а не в том же, как сделано у автора - это же кнопка с пирометром, пищалкой и дисплеем, а не сам звонок). Вот так получилось у мастера: В текущем виде устройство не считается ни медтехникой, ни средством изменения. Результаты, полученные с его помощью, нельзя применять для принятия официальных решений - например, о недопуске посетителя с повышенной температурой в магазин. Нужно повторить измерение тепловизором или пирометром. Но фирмы-производители дверных звонков могут освоить выпуск этих полезных приборов, получив все необходимые сертификаты. И тогда вскоре такие звонки появятся повсюду.
Посмотрите еще эти статьи
Управляем вытяжкой на кухне пультом от телевизора на Arduino Вывод картинки на дисплей 128x64 Детектор микронаушников Ethernet shield w5100 таймер включения на веб странице Вывод различных данных на дисплей LCD 128x64 Подключение датчиков газа и дыма серии MQ к Arduino Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте. Так же у нас есть Telegram канал. Вам понравился наш материал? Поделитесь с коллегами! Просмотров: 2752. Оценка статьи: 4.0 из 5. Уже оценило 1 читатель |
Всего комментариев: 0 | |