Arduino 101: Пedometer с датчиком DHT11 и LCD-дисплеем
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino 101 (Intel Curie) | 1 |
| Датчик температуры и влажности DHT11 (4 пина) | 1 |
| LCD-дисплей 16x2 (белый на синем, Adafruit) | 1 |
| Потенциометр (подстройка контраста LCD) | 1 |
| Перемычки | 1 набор |
| Крона 9В + зажим | 1 |
Инструменты
- 3D-принтер (для корпуса)
Программное обеспечение
- Arduino IDE
О проекте
Проект для научной ярмарки «Моё тело, мой мир». Устройство измеряет: количество шагов, пройденное расстояние, сожженные калории, температуру и влажность воздуха. Большинство данных берется из встроенных библиотек Arduino 101 (шагомер на CurieIMU), остальное — математикой. Корпус напечатан на 3D-принтере. Питание — крона 9В.
Зачем это нужно
Многие ведут сидячий образ жизни. Физическая активность важна для метаболизма и профилактики болезней. Устройство мотивирует: человек видит свои показатели, понимает тело, улучшает результаты день за днём.
Код (полный скетч)
// Frank, the living dead, made this code.
// Chapecó, Brazil
// First project 2017, science fair.
// Thanks: Adafruit, Intel, Filipeflop, Keyes
#include <DHT.h>
#include <DHT_U.h>
#include <LiquidCrystal.h>
#include "CurieIMU.h"
#include <SoftwareSerial.h>
#include <Adafruit_Sensor.h>
#define DHTPIN 8
#define DHTTYPE DHT11
LiquidCrystal lcd(12, 10, 5, 4, 3, 2);
int state = LOW, lastState = LOW;
const int ledPin = 13;
boolean stepEventsEnabled = true;
long lastStepCount = 0;
boolean blinkState = false;
float stepLength;
float calories = 0;
float weight = 57; // кг
float height = 168; // см
float calPerKm;
float caloriesBurned;
float distance;
float stepsPerMile;
float speed;
char option;
float t;
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
void setup() {
lcd.begin(16, 2);
dht.begin();
stepLength = 0.30 * height; // длина шага, см
calPerKm = (0.57 * weight * 1.6) / 0.453; // ккал/км
stepsPerMile = 160000.0 / stepLength; // шагов на 16 км (≈10 миль)
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Pedometer");
lcd.setCursor(0, 1); lcd.print("Made by Frank :P");
delay(3000);
CurieIMU.begin();
CurieIMU.setStepDetectionMode(CURIE_IMU_STEP_MODE_NORMAL);
CurieIMU.setStepCountEnabled(true);
if (stepEventsEnabled) {
CurieIMU.attachInterrupt(eventCallback);
CurieIMU.interrupts(CURIE_IMU_STEP);
}
}
static void updateStepCount() {
int stepCount = CurieIMU.getStepCount();
if (stepCount != lastStepCount) {
lastStepCount = stepCount;
}
}
static void eventCallback(void) {
if (CurieIMU.stepsDetected()) updateStepCount();
}
void loop() {
if (!stepEventsEnabled) updateStepCount();
// --- Шаги ---
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Steps: ");
lcd.setCursor(0, 1); lcd.print(lastStepCount);
delay(4000);
// --- Калории ---
caloriesBurned = lastStepCount * (lastStepCount / stepsPerMile);
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Calories B.: ");
lcd.setCursor(0, 1); lcd.print(caloriesBurned); lcd.print(" Kcal");
delay(4000);
// --- Расстояние ---
distance = (stepLength * lastStepCount) / 100.0; // метры
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Distance: ");
lcd.setCursor(0, 1); lcd.print(distance); lcd.print(" Meters");
delay(4000);
// --- Температура ---
delay(delayMS);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println("Error - Temp");
} else {
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Temperature: ");
lcd.setCursor(0, 1); lcd.print(event.temperature); lcd.print(" C");
delay(3000);
}
// --- Влажность ---
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println("Error - Humi");
} else {
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Humidity: ");
lcd.setCursor(0, 1); lcd.print(event.relative_humidity); lcd.print("%");
delay(3000);
}
// Мигание встроенным LED
lastState = state;
digitalWrite(13, blinkState);
blinkState = !blinkState;
delay(300);
}
Схема подключения
LCD подключается стандартно (RS, E, D4-D7). DHT11 — к пину 8. Потенциометр — на вывод контраста LCD (Vo). Питание от кроны через Vin/GND.
Производственный процесс
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Сборка функционального 3D-печатного манипулятора на Arduino: пошаговое руководство
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Бесконтактный термометрический шлюз для быстрого и точного скрининга
- PiBot: Робот-пианист на Arduino для точного исполнения музыки
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
- Метеостанция на Arduino и ThingSpeak: температура и влажность в облаке
- Своё рулевое управление (джойстик) для игр на Arduino