Introduction: EAL - Sports Ur Funktioner

Dette projekt er et skole projekt der er lavet i valgfaget C-Programmering på Erhvervs akademi Lillebælt. Det er mit første projekt hvor jeg arbejder med Arduino og C programmering. Projektet går ud på at jeg har lavet nogle af de funktioner et almindeligt sportsur indeholder. Disse funktionerne er skridttæller, puls måler og temperatur måler. Som en ekstra ting har jeg også funktionen fugtighedsporcent med da et af de moduler jeg bruger både kan måle temperatur og fugtigheden.

Indhold i dette projekt:

Step 1: Komponenter

Step 2: Opsætning

Step 3: Programmering

Step 4: Afprøvning/Test

Step 1: Komponenter

Komponenter der er brugt til dette projekt:

1 x Arduino Mega 2560

1 x High Performance 400 Tie Points Solderless Breadboard

1 x 6 Volt batteri Energizer

1 x OLED Display Module for Arduino 0.96" 128x64 IIC I2C SPI White/Blue/Yellow

1 x DHT11 Module ( Temperatur- og fugtighedmodul )

1 x Heartbeat Module ( Puls måler modul )

1 x Hydrargyrum switch ( Modul til skridttællerfunktion )

Diverse ledninger

Step 2: Opsætning

Overstående billeder og nedenstående beskrivelse viser hvordan de forskellige komponenter er tilkoblet Arduino Mega 2560.


OLED Display Module - Arduino Mega 2560

GND - GND

VCC - 5V

SCL - SCL

SDA - SDA


DHT11 Module - Arduino Mega 2560

GND PIN - GND

VCC PIN - 5V

SIGNAL PIN - DIGITAL INPUT 8


Heartbeat Module - Arduino Mega 2560

GND PIN - GND

VCC PIN - 5V

SINAL PIN - ANALOG INPUT 0


Hydrargyrum switch - Arduino Mega 2560

GND - GND

VCC - 5V

SIGNAL PIN - DIGITAL INPUT 2


Step 3: Programmering

Måden jeg lavede programmeringen til dette projekt var at jeg jeg først lavede programmeringen til hver enkelte sensor. Da programmering til hver enkelte sensor virkede som den skulle sammensatte jeg det hele en i kode. Efter tilføjelser og ændringer lykkedes det at sammensætte en brugbar kode til projektet.

Heartbeat Modulet brugte jeg til at måle pulsen. Men da den værdi den viste, ikke var en brugbar værdi, valgte jeg at indsætte en formel sådan at man kunne få en cirka værdi når man målte pulsen. Beskrivelse af denne formel kan ses i koden.

DHT11 Modulet brugte jeg som temperatur sensor. Jeg valgte også at vise luftfugtigheden i procent da dette modul kunne måle begge ting.

Hydrargyrum switch / Tilt switch brugte jeg til skridt tæller funktion.

OLED Display brugte jeg som skærm til at få de forskellige værdier/målinger vist på.


Her vises koden:

//------------------------------------------------------ Skridttæller ---------------------------------------------------------------//

#include // Indkludere dette bibliotek

//Definere SPI tilslutning: #define OLED_RESET 13
//Bruger SPI tilslutning: Adafruit_SSD1306 display(OLED_RESET); const int buttonPin = 2; // Indgang hvor Hydrargyrum kontakt er tilsluttet // Variabler der ændre sig: int buttonPushCounter = 0; // Tæller for hvor mange gange kontakten er trykket int buttonState = 0; // Nuværende tilstand på kontakten int lastButtonState = 0; // Tidligere tilstand på kontakten

//------------------------------------------------------- Pulsmåler ---------------------------------------------------------------//

int sensorPin = 0; // Analog indgang hvor Pulsmåler modul er tilsluttet

//----------------------------------------------- Temperatur og fugtighedsmåler ---------------------------------------------------//

#include // Inkludere dette bibliotek int pinDHT11 = 8; // Indgang hvor temperatur og fugtigheds modul et tilsluttet SimpleDHT11 dht11;

//---------------------------------------------------------------------------------------------------------------------------------//

void setup() { Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Initialisere med 0x3C til 128x64 display }

void loop()
{

//------------------------------------------------------ Skridt tæller ----------------------------------------------------// pinMode(buttonPin, INPUT); // Vælger at kontaktens signal skal være en indgang.

Serial.begin(9600); // Gør det muligt at aflæses værdierne på seriel monitor buttonState = digitalRead(buttonPin); // Læser kontaktens ingang

if (buttonState != lastButtonState){ // Sammenligner kontaktens tilstand med dens tidligere tilstand if (buttonState == HIGH) { // Hvis tilstanden er ændret skal den forhøje tælleren buttonPushCounter++; // Hvis den aktuelle tilstand er høj så er kontakten gået fra slukket til tændt Serial.println(buttonPushCounter); } else { // Hvis den aktuelle tilstand er lav så er kontakten gået fra tændt til slukket Serial.println(""); // Mulighed for at få vist en funktion på skærmen ( Er ikke medtaget i denne funktion) } delay(10); // Forsinkelse på aflæsning af værdi på kontakt, for ikke at risikere at kuglen hopper hurtigt frem og tilbage } lastButtonState = buttonState; // Gemmer den aktuelle tilstand som den sidste tilstand, til næste gang funktionen gentager sig

display.clearDisplay(); display.setTextSize(1); // Tekst størrelse display.setTextColor(WHITE); // Tekst farve display.setCursor(0,0); // Punkt hvor linjen starter på OLED skærmen (kan justeres) display.print("Antal skridt "); // Kategori for hvilken værdi der vises, kan ses på OLED skærm display.println(buttonPushCounter); // Værdien for den aktuelle værdi, kan ses på OLED skærm.

//---------------------------------------------------------- Pulsmåler -----------------------------------------------------------//
int rawValue = analogRead (sensorPin); // Den aflæste værdi for pulsmåler modulet int value = (rawValue / 8.4 ); // Den udregnede værdi for pulsen. // Den gennemsnitlige puls for mænd og kvinder ligger mellem // 60-90 slag i minuttet derfor må den gennemsnitlige puls være (60+90)/2=75 // Den aflæseste værdi for pulsmåler modulet er i gennemsnit 630 derfor // 630/75= 8,4. Dette indsættes for at give en ca. pulsværdi

delay (100); // Forsinkelse for aflæsning af værdi på pulsmåler modulet

display.setTextSize(1); // Tekst størrelse display.print("Puls " ); // Kategori for hvilken værdi der vises, kan ses på OLED skærm display.print(value); // Værdien for den aktuelle værdi, kan ses på OLED skærm.

// ------------------------------------------------ Temperatur og fugtighedsmåler -----------------------------------------------------//
// Aflæser disse dataer: byte temperature = 0; byte humidity = 0; byte data[40] = {0}; if (dht11.read(pinDHT11, &temperature, &humidity, data)) return; display.println(" "); // Næste linje på OLED skærm display.print("Temperatur "); // Kategori for hvilken værdi der vises, kan ses på OLED skærm display.print((int)temperature); display.print(" C "); // Værdien for den aktuelle værdi, kan ses på OLED skærm. display.println(" "); // Næste linje på OLED skærm display.print("Fugtighed " ); // Kategori for hvilken værdi der vises, kan ses på OLED skærm display.print((int)humidity); display.println(" %"); // Værdien for den aktuelle værdi, kan ses på OLED skærm. // DHT11 prøveudtagningstid er 1HZ. delay(1000); // Forsinkelse for aflæsning af værdi på modulet

//--------------------------------------------------------------------------------------------------------------------------------// display.display(); // Automatisk updatering af de forskellige værdier på skærmen. Resetter værdierne ved strømafbrydelse }

Nedenstående filer er kode og biblioteker til dette projekt.

Download for at få en bedre oversigt af koden og de forskellige beskrivelser.


Step 4: Afprøvning/Test

Ved afprøvning fandt jeg ud af at heart beat modulet som jeg bruger til at måle pulsen med, er meget uregelmæssig i sin måling. Det hjælper derfor lidt på problemet hvis man holder dioden helt indtil fingeren (vist på ovenstående billeder). Skridttæller funktionen virker rimeligt godt, dog med undtagelse for hvis man vender Tilt sensoren for hurtigt. Dette gør at skridttæller funktionen ikke tæller det rigtige antal skridt (gange den har gået fra ikke at være aktiv til at være aktiv). Temperatur og luftfugtighed sensor virker også rimelig som den skal. Dog med undtagelse for store variationer i dens måling en gang imellem.