Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Arduino 101: Пedometer с датчиком DHT11 и LCD-дисплеем

Компоненты и материалы

Компонент Количество
Arduino 101 (Intel Curie) 1
Датчик температуры и влажности DHT11 (4 пина) 1
LCD-дисплей 16x2 (белый на синем, Adafruit) 1
Потенциометр (подстройка контраста LCD) 1
Перемычки 1 набор
Крона 9В + зажим 1

Инструменты

Программное обеспечение

О проекте

Проект для научной ярмарки «Моё тело, мой мир». Устройство измеряет: количество шагов, пройденное расстояние, сожженные калории, температуру и влажность воздуха. Большинство данных берется из встроенных библиотек 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 101: Пedometer с датчиком DHT11 и LCD-дисплеем

Производственный процесс

  1. Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
  2. Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
  3. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  4. Сборка функционального 3D-печатного манипулятора на Arduino: пошаговое руководство
  5. DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
  6. Бесконтактный термометрический шлюз для быстрого и точного скрининга
  7. PiBot: Робот-пианист на Arduino для точного исполнения музыки
  8. NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
  9. Метеостанция на Arduino и ThingSpeak: температура и влажность в облаке
  10. Своё рулевое управление (джойстик) для игр на Arduino