Arduino 101 : Construisez un podomètre avec capteur DHT11 et écran LCD
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino 101 (Intel Curie) | 1 |
| Capteur température/humidité DHT11 (4 broches) | 1 |
| Écran LCD Adafruit 16×2 blanc sur bleu | 1 |
| Potentiomètre rotatif (contraste LCD) | 1 |
| Fils de connexion | 1 |
| Pile 9 V | 1 |
| Connecteur pile 9 V | 1 |
Outils nécessaires
- Imprimante 3D (pour le boîtier)
Applications et services en ligne
- Arduino IDE
À propos de ce projet
Ce projet a été réalisé pour une foire scientifique locale dont le thème était "Mon corps, mon monde".
L'idée : un dispositif mesurant la performance physique individuelle. Le podomètre affiche à chaque mouvement : distance parcourue, nombre de pas, calories brûlées, température et humidité ambiantes.
La plupart des données proviennent directement de la carte (bibliothèque de détection de pas intégrée), le reste par calculs mathématiques. Le boîtier est imprimé en 3D. Alimentation par pile 9 V.
Pourquoi ?
Une grande partie de la population vit de façon sédentaire, loin de l'activité physique et des habitudes saines. Il est crucial de reconnaître l'activité physique comme élément clé du métabolisme normal et de prévention des maladies futures.
Ce prototype aide à cette prise de conscience en collectant des données exploitables pour un suivi détaillé. En visualisant leurs performances, l'utilisateur est stimulé à pratiquer une activité physique, à comprendre son corps et à s'améliorer jour après jour.
Questions ? Laissez un commentaire ou envoyez-moi un e-mail.
Code
// Frank, the living dead, made this code.
// Chapecó, Brazil
// Mon premier projet 2017, foire scientifique.
// 2018
// 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;
int 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 caloriesPerKm;
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; // hauteur en cm
caloriesPerKm = (0.57 * weight * 1.6) / 0.453; // poids en kg
stepsPerMile = 160000.0 / stepLength; // 160000 cm = 1.6 km ? (vérifier)
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();
// --- Affichage PAS ---
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pas: ");
lcd.setCursor(0, 1);
lcd.print(lastStepCount);
delay(4000);
// --- CALORIES ---
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 ---
distance = (stepLength * lastStepCount) / 100; // en mètres
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.setCursor(0, 1);
lcd.print(distance);
lcd.print(" m");
delay(4000);
// --- TEMPÉRATURE ---
delay(delayMS);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println("Erreur - Temp");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.setCursor(0, 1);
lcd.print(event.temperature);
lcd.print(" C");
delay(3000);
}
// --- HUMIDITÉ ---
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println("Erreur - Humi");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Humidite: ");
lcd.setCursor(0, 1);
lcd.print(event.relative_humidity);
lcd.print("%");
delay(3000);
}
lastState = state;
digitalWrite(13, blinkState);
blinkState = !blinkState;
delay(300);
}
Schéma
Le LCD est simple à câbler. (Schéma fourni en image.)
Processus de fabrication
- Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
- Construire un Iron Man animé avec Arduino : capteurs, sons et relais
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Construire un bras robotique 3D fonctionnel piloté par Arduino – Guide pas à pas
- Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
- Portique de contrôle de température sans contact pour dépistage rapide et précis
- PiBot : Robot pianiste Arduino pour performance musicale de précision
- Jeu Pong sur Matrice NeoPixel avec Arduino Nano
- Station météo IoT temps réel – Arduino, ESP8266, DHT11 & ThingSpeak