Bliv den nye Usain Bolt |Sprint tracker|
0 kommentarer

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
  • Bygga kretsar på en fumble board
  • Programmering av ESP32 TTGO
  • 3D-printad box
  • Genomförande
  • 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
    Kodavsnittet nedan är själva loopslingan som ser till att du kan välja vilket avstånd du vill mäta och även kontrollerar om start_run har tryckts in.

     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.

    Skriv en kommentar!

    Relevanta produkter

    TS101 digital loddekolbeTS101 digital loddekolbe i hånd
    TS101 digital lödkolv med USB C-försörjning
    Erbjudande prisFrån 1 119 kr
    14 i lager
    TS80P USB-C Loddekolbe kitTS80P Loddekolbe
    TS80P USB-C mini Lödpenna sats
    Erbjudande prisFrån 1 279 kr
    2 i lager
    bruge Loddekolbe Renser til at rengøre loddekolbespidsenLoddekolbe Renser
    Lyxigt rengöringsmedel för lödkolv
    Erbjudande pris143 kr
    8 i lager