Reactietijd Meter

by JnsD in Circuits > Arduino

45 Views, 1 Favorites, 0 Comments

Reactietijd Meter

IMG_1727.jpg
HKU opdracht voor vak ITTT

Dit project heb ik gemaakt voor een vak dat ik aan de HKU kreeg. In het begin van dit project was Formule 1 bezig en stond, zoals het hoort, Max Verstappen op nummer 1. Doordat Formule 1 in deze periode bijna niet te missen was, heb ik er interesse in ontwikkeld en ben ik vanuit deze interesse gaan werken aan dit project.

Bij Formule 1 is een van de belangrijkste vaardigheden van een coureur een snelle reactietijd. Om dit op een speelse manier te verwerken in een project besloot ik om een reactietijd meter te maken in de vorm van een Formule 1 stuur. Dit stuur heeft ook een afteller in de vorm van de startlichten van Formule 1.

Supplies

Componenten:

  • Arduino Uno
  • OLED Display I2C (128x32)
  • 9V Batterij Houder met DC Jack
  • 9V Batterij
  • 10 Rode leds
  • Simpele knop
  • 5x 220Ω weerstanden
  • 1x 10KΩ weerstand
  • 17x koperen kabel
  • Printplaatje 5x8cm
  • 2 schroeven

Behuizing:

  • Triplex 3 laags 3mm dik
  • Naaldhouten lad
  • Houtlijm

Ik begon met mijn idee uit te werken op papier en alle benodigdheden hiervoor op te schrijven en te bestellen.

IMG_1715.jpg
IMG_1714.jpg
Untitled Sketch 2_bb.png

Zodra ik alle benodigdheden had, begon ik al mijn componenten te linken aan mijn Arduino en mijn breadboard. Zo kon ik testen of al mijn componenten wel werkten.

Zodra alles werkend was, kon ik beginnen met het schrijven van mijn code.



#include
#include
#include
#include

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define LOGO16_GLCD_HEIGHT 32
#define LOGO16_GLCD_WIDTH 128

#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

int countdownNumber = 6;
double count;
bool buttonPressed = false;

int score1;
int score2;
int score3;

void setup() {
registerDisplay();
registerPins();
Serial.begin(9600);
}

void loop() {
countdown();
counter();
}

void registerDisplay() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
display.clearDisplay();
}

void registerPins() {
pinMode(4, INPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}

void displayText(int textSize, String text, int x, int y, boolean d) {
display.setTextSize(textSize);
display.setTextColor(WHITE);
display.setCursor(x,y);
display.println(text);

if(d){
display.display();
}
}

void countdown() {
if (buttonPressed == false) {
for (int i = 8; i < 13; i++) {
countdownNumber--;
delay(1000);
display.clearDisplay();
displayText(3, String(countdownNumber), 4, 3, false);
display.display();
digitalWrite(i, HIGH);
}

countdownNumber = 6;
delay(1000);

for (int i = 8; i < 13; i++) {
digitalWrite(i, LOW);
}
}
}

void counter() {
if (buttonPressed == false) {
for (int i = 0; i < 100; i++) {
int buttonState = digitalRead(4);

display.clearDisplay();
displayText(3, String(i), 4, 3, false);
display.display();

if(buttonState == 1) {
buttonPressed = true;
checkScores(i);
break;
}
}
}
displayBestScores();
buttonPressed = false;
}

void displayBestScores() {
delay(5000);
display.clearDisplay();
displayText(1, "#1 score: " + String(score1), 4, 0, false);
displayText(1, "#2 score: " + String(score2), 4, 10, false);
displayText(1, "#3 score: " + String(score3), 4, 20, false);
display.display();
delay(5000);
}

void checkScores(int score) {
if (score < score1 || score1 == 0) {
if (score1 != 0) {
if (score2 != 0) {
score3 = score2;
}
score2 = score1;
}
score1 = score;
} else if (score > score1 && score < score2 || score2 == 0) {
if (score2 != 0) {
score3 = score2;
}
score2 = score;
} else if (score > score2 && score < score3 || score3 == 0) {
score3 = score;
}
}

IMG_1723.jpg

Zodra mijn componenten aan elkaar verbonden waren, ik de code geschreven had en alles met elkaar werkten, kon ik beginnen met het verplaatsen van mijn breadboard met een printplaatje. Op mijn printplaatje heb ik vervolgens alles gesoldeerd zodat het niet meer snel uit elkaar kan vallen.

IMG_1740.jpg
IMG_1753.jpg
Untitled.png

Als 5e stap heb ik mijn behuizing in elkaar gezet. Ik ben begonnen met afmetingen te maken van al mijn componenten zodat ik zeker wist dat alles binnen mijn behuizing paste. Vervolgens heb ik schetsen gemaakt van het ontwerp. Voor de behuizing wilde ik een stuur maken dat afgeleid was van sturen die gebruikt worden bij Formule 1. Ik was van plan om hier hout voor te gaan gebruiken als materiaal, wat al snel de oorzaak was van een aantal complicaties op het gebied van design. Zo is een Formule 1 stuur erg dynamisch, wat moeilijk na te bootsen is met hout. Zo heb ik zoals hierboven weergegeven een aantal schetsen gemaakt. Uiteindelijk heb ik voor het rechts onder ontwerp gekozen aangezien deze voornamelijk uit basisvormen bestond, wat dus goed te maken was met hout.

Daarna heb ik alles uitgezaagd en aan elkaar gelijmd om zo een nette houten behuizing te hebben. Vervolgens heb ik de nodige inkepingen gemaakt zodat mijn ledlampen, knop en display van buitenaf zichtbaar waren. Als laatste heb ik de gehele behuizing zwart gespoten.

IMG_1726.jpg
Untitled21.png

Als laatste stap heb ik mijn gesoldeerde componenten in mijn behuizing geplaatst en mijn behuizing dicht gemaakt met 2 schroeven aan de achterkant zodat ik in de toekomst eventueel nog de batterij eruit kan halen of vervangen.

Conclusie

Ik heb bij dit project gebruik gemaakt van een aantal bronnen waaronder deze pagina die mij hielp bij het gebruiken van mijn display (deze display weergeeft de score). https://github.com/elementzonline/Arduino-Sample-Codes/blob/master/OLED_I2C_Sample/OLED_I2C_Sample.ino


Echter merkte ik al snel dat met het gebruiken van deze code en mijn programmeerkennis een deel van mijn Arduino niet deed wat het moest doen. Dit werd veroorzaakt door de code die mijn display zou moeten initialiseren. Ik heb er daarom voor gekozen om gebruik te maken van een andere bron(https://robojax.com/learn/arduino/?vid=robojax-SSD1306-OLED-128x32) waarbij de tick snelheid van mijn display omlaag ging, maar ik wel volledig gebruik kon maken van mijn Arduino.


Aan de hand van dit project heb ik veel geleerd over de mogelijkheden met Arduino’s en hoe toegankelijk het eigenlijk is. Voordat ik ooit met een Arduino had gewerkt, verwachtte ik dat het veel lastiger was om externe onderdelen aan te sturen met een Arduino. Dit viel mij heel erg mee en ik heb veel lol gehad bij het proces van het maken van dit project.


Iets wat ik geleerd heb en een volgende keer meer rekening mee zou willen houden is dat je goed moet nadenken over de indeling binnen een behuizing. Zo heb ik veel moeite gehad om de arduino, display, leds, knop en printplaatje op de juiste plek neer te zetten zonder dat de kabels elkaar in de weg zaten of dat de arduino display wegdrukte van zijn plek.