Arduino 101: Bouw een teller met DHT11 sensor & LCD display
Onderdelen en benodigdheden
| Arduino 101 | × | 1 |
| DHT11 Temperatuur- & Vochtigheidssensor (4 pinnen) | × | 1 |
| Adafruit Standaard LCD - 16x2 Wit op Blauw | × | 1 |
| Draaipotentiometer (standaard, voor LCD-contrast) | × | 1 |
| Draadjes (standaard) | × | 1 |
| 9V batterij (standaard) | × | 1 |
| 9V Batterijclip | × | 1 |
Nodige tools en machines
| 3D-printer (standaard) |
Apps en online diensten
| Arduino IDE |
Over dit project
Dit project was bedoeld om te voldoen aan de eisen van de wetenschapsbeurs in mijn stad vorig jaar, met als thema "Mijn lichaam, mijn wereld".
Het hoofddoel was een apparaat maken dat de fysieke prestaties van ieder meet: de teller telt bij elke beweging de afgelegde afstand, het aantal stappen, de verbrande calorieën, en meet de omgevingstemperatuur en vochtigheid.
De meeste data komt direct van het bord, omdat het een bibliotheek heeft voor staptelling. De rest bereken ik met wiskunde.
De behuizing is 3D-geprint. De teller wordt gevoed door een 9V-batterij.

Waarom?
Een groot deel van de bevolking leeft sedentair, ver van fysieke activiteit en gezonde leefgewoontes.
Het is noodzakelijk om fysieke activiteit te erkennen als belangrijk element voor normale metabolische activiteiten en om de risico's op toekomstige ziekten te verminderen.
Met deze conclusie maakte ik een prototype-apparaat dat hierbij helpt, door data te verzamelen die gedetailleerd geanalyseerd kan worden.
Deze data, wanneer bekeken, stimuleren de oefening van fysieke activiteit, omdat de persoon zijn prestaties kan monitoren, zijn lichaam begrijpt en dag na dag kan verbeteren.
Heb je vragen over dit project? Laat dan een reactie achter.
Je kunt me ook een e-mail sturen.
Code
Code (C/C++)
// Frank, de levende dode, maakte deze code.
// Chapecó, Brazilië
// Dit was mijn eerste project in 2017, voor een wetenschapsbeurs.
// 2018
// Dank aan:
// 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 stapLengte;
float calories = 0;
float gewicht = 57;
float lengte = 168;
float caloriesPerKm;
float caloriesVerbrand;
float afstand;
float stappenPerMijl;
float snelheid;
char optie;
float t;
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
void setup() {
lcd.begin(16, 2);
dht.begin();
stapLengte = 0.30 * lengte; // Lengte in cm
caloriesPerKm = (0.57 * gewicht * 1.6) / 0.453; // Gewicht in kg
stappenPerMijl = 160000.0 / stapLengte; // 160000 cm = 16 km
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Teller");
lcd.setCursor(0, 1);
lcd.print("Gemaakt door 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();
}
// Stappen tonen
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Stappen: ");
lcd.setCursor(0, 1);
lcd.print(lastStepCount);
delay(4000);
// Calorieën berekenen en tonen
caloriesVerbrand = lastStepCount * (lastStepCount / stappenPerMijl);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Calorieën: ");
lcd.setCursor(0, 1);
lcd.print(caloriesVerbrand);
lcd.print(" Kcal");
delay(4000);
// Afstand berekenen en tonen
afstand = (stapLengte * lastStepCount) / 100; // Afstand in meters
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Afstand: ");
lcd.setCursor(0, 1);
lcd.print(afstand);
lcd.print(" Meters");
delay(4000);
// Temperatuur en vochtigheid lezen (pin 8)
delay(delayMS);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println("Fout - Temp");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.setCursor(0, 1);
lcd.print(event.temperature);
lcd.print(" C");
delay(3000);
}
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println("Fout - Vocht");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Vocht: ");
lcd.setCursor(0, 1);
lcd.print(event.relative_humidity);
lcd.print("%");
delay(3000);
}
lastState = state;
digitalWrite(13, blinkState);
blinkState = !blinkState;
delay(300);
}
Schema
De LCD is eenvoudig aan te sluiten.

Productieproces
- Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
- Een Arduino Iron Man bouwen: onderdelen, sensoren en stapsgewijze handleiding
- Find Me: Slimme Item Locator met Arduino en Bluetooth
- Bouw een Functionele, Arduino-aangedreven 3D-geprinte Robotarm – Stap-voor-Stap Handleiding
- DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
- Contactloze temperatuurgate voor snelle, accurate screening
- PiBot: De Arduino-aangedreven pianorobot voor precisiemuziek
- NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
- Realtime Weerstation met Arduino & ThingSpeak IoT
- Bouw een Aangepaste Arduino Joystick Stuurwiel voor Gaming
- Bouw een krachtige FM-radio ontvanger met Arduino en TEA5767 module