Vill du bli nästa Usain Bolt? - så titta här! Det här projektet handlar om ett häftigt projekt som kan mäta hur snabbt du kan springa 50, 100, 150 .... eller 500 meter. Allt du behöver är enESP TTGO , ultraljudssensor och några knappar från komponentmegasatsen . I tabellen nedan kan du även se ett förslag på inköp som täcker dina behov för detta projekt men även många i framtiden!
Specifikationer
För att göra detta projekt behöver du komponenterna nedan. De kan alla hittas här på ebits.se.
siffra |
Komponentbild |
Komponent |
1 |
TTGO T-Display ESP32 med WiFi, Bluetooth och 1,1" LCD-färgskärm | |
1 |
1800mAh LiPo batteri med skyddskrets | |
1 | Komponent mega kit | |
1 | LiPo batteriladdare med skyddskrets | |
1 | HC-SR04 |
Saker du behöver från component mega kit kit är följande:
siffra | Komponent |
1 | Aktiv fast frekvens summer |
3 | Knappar |
3 | 10 k Ω motstånd |
12 | Dupont kablar |
Bygga kretsar på en fumble board
Konstruktionen av fumbleboardet utförs med följande anslutning av modulerna tillTTGO . Om tabellen nedan följs behöver du inte ändra koden, som finns längre ner på sidan eller på följande länk:
HC-SR04 VCC |
TTGO 5V |
HC-SR04 GND |
TTGO GND |
HC-SR04 TRIG |
TTGO 32 |
HC-SR04 ECHO |
TTGO 33 |
Summer + |
TTGO 17 |
Summer - |
TTGO GND |
Knapp Start |
TTGO 25 |
Knappen uppåt |
TTGO 26 |
Knapp ner |
TTGO 27 |
Bilden nedan illustrerar den faktiska installationen på fumbleboardet.
Bilden nedan är samma uppställning som bilden ovan, men här kopplas helt enkelt ett batteri och en laddningskrets ihop, så att enheten så småningom kan bli portabel. Denna konstellation är ansluten direkt till baksidanav TTGO , vilket möjliggör direktanslutning av batteriet . Själva laddningskretsen gör att USB-C med 5V 2A kan anslutas. Batteriet som syns på bilderna är ett 1800 mAh batteri som kommer att ge en rimlig drifttid på systemet.
Bilden nedan illustrerar den faktiska installationen på fumbleboardet.
Programmering på TTGO t-display
Kodavsnittet nedan visar biblioteken som projektet använder. Det är främst för att komma åt displayen på TTGO . Själva mapparna kan laddas ner via följande länk: TFT_eSPI.h & Free_Fonts.h.
De ska placeras under Bibliotek, som du hittar under Dokument -> Arduino -> bibliotek.
# include "Free_Fonts.h" // Inkludera rubrikfilen bifogad till denna sketch
# inkluderar "SPI.h"
# inkluderar "TFT_eSPI.h"
//Baserat på TTGO
# definiera knapp1 26
# definiera knapp2 27
# definiera start_run 25
# definiera TRIG 32
# definiera ECHO 33
# definiera A0 17
void loop () {
tft.setTextDate(MC_DATE);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
if ( digitalRead (start_run) == HÖG ){
if (timesDisplayed == false){
prepareForRun();
} annat {
gånger som visas = falskt;
DisplayStartMenu(avstånd);
fördröjning ( 1000 );
}
}
if ( digitalRead (knapp2) == HÖG ){
if (avstånd > 50 ){
avstånd-= 50 ;
UpdateDistance(avstånd);
fördröjning ( 200 );
}
}
if ( digitalRead (knapp1) == HÖG ){
if (avstånd < 500 ){
avstånd+= 50 ;
UpdateDistance(avstånd);
fördröjning ( 200 );
}
}
}
För att uppdatera skärmen när man trycker på fjärrknapparna anropas funktionen nedan som har till uppgift att uppdatera displayen.
void UpdateDistance( int _distance){
tft.fillScreen(TFT_BLACK);
Strängtext = itoa(_distance, buf, 10 ) ;
text += "m" ;
tft.setFreeFont(FF2);
tft.drawString( "Avstånd: " + text , 120 , 40 , GFXFF);
}
När start_run-knappen trycks in anropas funktionen nedan som gör en nedräkning på skärmen och även en ljudnedräkning i form av ett pip. När tiden har gått kommer summern att ge en längre tjutton vilket är en indikator på att tiden har börjat.
void PrepareForRun(){
int nedräkning = avstånd/ 5 ;
digitalWrite (A0, HIGH );
fördröjning ( 200 );
digitalWrite (A0, LÅG );
fördröjning ( 200 );
digitalWrite (A0, HIGH );
fördröjning ( 200 );
digitalWrite (A0, LÅG );
fördröjning ( 200 );
for ( int a = 0 ; a < avstånd/ 5 ; a++){
--nedräkning;
Strängtext = itoa(nedräkning, buf, 10 ) ;
tft.fillScreen(TFT_BLACK);
tft.setFreeFont(FF2);
tft.drawString( "Gå till start: " + text , 120 , 40 , GFXFF);
fördröjning ( 1000 );
}
för ( int b = 3 ; b > 0 ; b--){
Strängtext = itoa(b, buf, 10 ) ;
tft.fillScreen(TFT_BLACK);
tft.setFreeFont(FF2);
tft.drawString( "Tid: " + text , 120 , 40 , GFXFF);
digitalWrite (A0, HIGH );
fördröjning ( 500 );
digitalWrite (A0, LÅG );
fördröjning ( 500 );
}
digitalWrite (A0, HIGH );
fördröjning ( 2000 );
tft.fillScreen(TFT_BLACK);
tft.setFreeFont(FF2);
tft.drawString( "KÖR!" , 120 , 40 , GFXFF);
digitalWrite (A0, LÅG );
MeasureRunTime();
}
När du kör förbi ultraljudssensorn kommer MeasureRunTime() att slutföras och en tid skickas med funktionen DisplayTimes (dubbel timer).
void MeasureRunTime(){
timeMeasuring = sant;
runTimeStart = millis ();
while (MeasureDistance() > 100 ){
fördröjning ( 10 );
}
runTimeMs = millis () - runTimeStart;
dubbel timer = ( dubbel )runTimeMs/ 1000 ;
Seriell . print ( "Tid:" );
Seriell . println (( dubbel )runTimeMs/ 1000 );
timeMeasuring = false;
DisplayTimes(timmar);
}
Här kan du se funktionen som anropas i while-loopen tills den bryts.
float MeasureDistance(){
digitalWrite (TRIG, LOW );
delayMikrosekunder ( 2 );
digitalWrite (TRIG, HIGH );
delayMikrosekunder ( 5 );
digitalWrite (TRIG, LOW );
float t = pulsIn (ECHO, HIGH );
flytavstånd = t* 0,017015 ;
Seriell . print ( "Avstånd: " );
Seriell . println (avstånd);
retursträcka ;
}
Kodavsnittet nedan är återigen en funktion för att uppdatera skärmen, nu med den senaste löptiden.
void DisplayTimes( int time_number){
Strängtext = itoa(time_number, buf, 10 ) ;
tft.fillScreen(TFT_BLACK);
tft.setFreeFont(FF2);
tft.drawString( "Tid: " + text + " s" , 120 , 40 , GFXFF);
}
Hela projektet kommer att finnas tillgängligt på eBits Github
3D-printad box
Bilderna nedan visar lådans design och avsedd anslutning av modulerna i lådan. Om du inte har en 3D-skrivare hemma så finns det många printserviceföretag på internet som alla erbjuder denna tjänst till ett förmånligt pris.
Designen nedan hittar du här
Genomförande
Här är en bild på anslutningen och anslutningen till laddningskretsen , knappar,TTGO och HC-SR04 på locket till den 3D-printade lådan. Knapparna kan dra nytta av en liten klick begagnat lim på kanterna. Resten kan monteras med skruvar.
Här är en bild på den färdiga och fullt fungerande sprinttrackern, längst ner kommer laddningsmöjligheten att vara i form av USB-C och upptill är en på/av-brytare monterad. Lådan är ganska liten och lätt att ta med sig.