Создаем контролируемую через Android-приложение, основанную на микроконтроллере Ардуино, станцию мониторинга здоровья. Данное устройство обеспечивает одновременные данные о t° тела, частоте сердечных сокращений, влажности в помещении и t° в нем.
Таким образом, проводная электроника с датчиками и приложением обеспечит простой способ контроля состояния здоровья и окружающей среды.
Комплектующие
Создавать станцию мониторинга здоровья мы начнем с перечисления всех необходимых нам деталей и программного обеспечения.
Итак, используем в этом проекте следующий аппаратные компоненты:
- Arduino UNO & Genuino UNO × 1
- Провода перемычки (общие) × 1
- Датчик температуры и влажности DHT11 (3 контакта) × 1
- Датчик температуры × 1
- Резистор 10 кОм × 2
- Модуль Bluetooth HC-05 × 1
- Датчик сердечного ритма × 1
Программное обеспечение и сервисы:
Схема соединений
Сразу переходим к схеме соединения всех наших комплектующих.
Соединяйте все детали согласно схема изображенной на рисунке выше.
Собираем всё вместе
Подключение Ардуино и макета.
Датчик температуры для получения данных о температуре тела
Делаем приложение
После того как мы всё собрали наша задача сделать приложение через онлайн-решение, о котором мы написали выше - MIT App Inventor 2.
Теперь мы можем обратиться к нашему смартфону, на экране которого увидим процесс инициализации устройств, после чего всё будет готово к измерениям.
Далее станция мониторинга здоровья получает данные и выводит измерения на экран.
Код проекта
Код, необходимый для нашей станции мониторинга здоровья на Ардуино вы можете скачать или скопировать ниже.
#include <SoftwareSerial.h> #include <cactus_io_AM2302.h> #define AM2302_PIN 7 #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); AM2302 dht(AM2302_PIN); SoftwareSerial Bluetooth(10, 9); String Data; int pulsePin = 0; int blinkPin = 13; volatile int BPM; volatile int Signal; volatile int IBI = 600; volatile boolean Pulse = false; volatile boolean QS = false; volatile int rate[10]; volatile unsigned long sampleCounter = 0; volatile unsigned long lastBeatTime = 0; volatile int P = 512; volatile int T = 512; volatile int thresh = 512; volatile int amp = 100; volatile boolean firstBeat = true; volatile boolean secondBeat = false; void interruptSetup() { TCCR2A = 0x02; TCCR2B = 0x06; OCR2A = 0X7C; TIMSK2 = 0x02; sei(); } ISR(TIMER2_COMPA_vect) { cli(); Signal = analogRead(pulsePin); sampleCounter += 2; int N = sampleCounter - lastBeatTime; if (Signal < thresh && N > (IBI / 5) * 3) { if (Signal < T) { T = Signal; } } if (Signal > thresh && Signal > P) { P = Signal; } if (N > 250) { if ( (Signal > thresh) && (Pulse == false) && (N > (IBI / 5) * 3) ) { Pulse = true; digitalWrite(blinkPin, HIGH); IBI = sampleCounter - lastBeatTime; lastBeatTime = sampleCounter; if (secondBeat) { secondBeat = false; for (int i = 0; i <= 9; i++) { rate[i] = IBI; } } if (firstBeat) { firstBeat = false; secondBeat = true; sei(); return; } word runningTotal = 0; for (int i = 0; i <= 8; i++) { rate[i] = rate[i + 1]; runningTotal += rate[i]; } rate[9] = IBI; runningTotal += rate[9]; runningTotal /= 10; BPM = 60000 / runningTotal; QS = true; } } if (Signal < thresh && Pulse == true) { digitalWrite(blinkPin, LOW); Pulse = false; amp = P - T; thresh = amp / 2 + T; P = thresh; T = thresh; } if (N > 2500) { thresh = 512; P = 512; T = 512; lastBeatTime = sampleCounter; firstBeat = true; secondBeat = false; } sei(); } void setup() { Bluetooth.begin(9600); Serial.begin(9600); dht.begin(); sensors.begin(); interruptSetup(); } void loop() { sensors.requestTemperatures(); dht.readHumidity(); dht.readTemperature(); if (isnan(dht.humidity) || isnan(dht.temperature_C)) { return; } if (QS == true) { Serial.print(sensors.getTempCByIndex(0)); Serial.print(" "); Serial.print(dht.temperature_C); Serial.print(" "); Serial.print(dht.humidity); Serial.print(" "); Serial.println(BPM); Bluetooth.print(sensors.getTempCByIndex(0)); Bluetooth.print(" "); Bluetooth.print(dht.temperature_C); Bluetooth.print(" "); Bluetooth.print(dht.humidity); Bluetooth.print(" "); Bluetooth.println(BPM); QS = false; } delay(1500); }
На этом всё. Будьте здоровы!