Een automatische stopwatch maken voor hardlopers, atleten en sporters

Probeer Ons Instrument Voor Het Oplossen Van Problemen





In deze post gaan we een stopwatch construeren die automatisch de timer start wanneer de hardloper begint te lopen en de timer stopt wanneer de hardloper het einde bereikt. De verstreken tijd tussen het begin- en eindpunt wordt weergegeven op een 16 x 2 LCD.

Laten we eerst beginnen met te leren hoe we een eenvoudig en uiterst nauwkeurig Arduino-stopwatchcircuit kunnen configureren.



Een stopwatch is een handmatig bestuurd tijdklokapparaat dat is ontworpen om de tijdsduur te meten die mogelijk is verstreken vanaf een bepaald tijdstip waarop het werd geactiveerd en tegen de tijd dat het uiteindelijk werd gedeactiveerd. Een grotere variant van hetzelfde apparaat wordt genoemd de stopklok die wordt gebruikt om de actie op afstand te volgen en die normaal gesproken wordt aangetroffen in sportstadions enz.

Mechanische versus elektronische stopwatch

Eerder kwam de traditionele mechanische handstopwatch vaker voor en werd deze door iedereen voor dit doel gebruikt.



In het mechanische systeem hadden we twee drukknoppen voor het uitvoeren van de stopwatchfuncties. Een om de stopklok te starten door eenmaal op te drukken, en om de tijd te stoppen door nogmaals op dezelfde knop te drukken om de verstreken tijd op te nemen ... de tweede knop werd gebruikt om de klok weer op nul te zetten.

Mechanische stopklok werkte in principe door middel van veerkracht, waarvoor een periode handmatig moest worden opgewonden door aan de gegeven kartelknop aan de bovenkant van het klokapparaat te draaien.

In vergelijking met de moderne digitale stopwatches kunnen de mechanische typen echter als aanzienlijk primitief en onnauwkeurig worden beschouwd in het bereik van milliseconden.

Met behulp van een Arduino

En vandaag de dag met de komst van een microcontroller, zijn deze stopwatches uiterst nauwkeurig en betrouwbaar geworden tot op de microseconde.

Het Arduino-stopwatchcircuit dat hier wordt gepresenteerd, is een van deze moderne door microcontrollers aangedreven ontwerpen waarvan kan worden verwacht dat het op één lijn ligt met de commerciële moderne stopwatch-gadgets.

Laten we leren hoe we het voorgestelde Arduino-stopklokcircuit kunnen bouwen:

Voor de constructie heeft u de volgende materiaallijsten nodig:

Hardware vereist

Een Arduino LCD KeyPad Shield (SKU: DFR0009)

Een Arduino LCD KeyPad Shield (SKU: DFR0009)

Een Arduino ONE-bord

Arduino UNO

Een Arduino USB-kabel

arduino usb-kabel

Zodra je het bovenstaande materiaal hebt verkregen en ze aan elkaar hebt gekoppeld, gaat het erom de volgende gegeven schetscode in je Arduino-bord te configureren en de magie van de stopklokfuncties te bekijken.

De code

Een 7-segmentweergave toevoegen

Laten we nu verder gaan met de details met betrekking tot de constructie van een stopwatchcircuit met behulp van een 7-segment LED-display en Arduino. We zullen de concepten onderzoeken met betrekking tot interrupts en display-driver-IC's die cruciaal zijn om dit project te begrijpen. Dit project werd voorgesteld door de heer Abu-Hafss, een van de fervente lezers van deze website.

Zoals we al weten, is Stopwatch een apparaat dat helpt bij het bijhouden van een korte tijdsperiode van uren tot milliseconden (meestal). Bijna alle goedkope digitale polshorloges die zijn uitgerust met stopwatchfunctionaliteit, maar geen van de horloges kan de pit geven om er zelf een te maken en ook het vinden van een stopwatch met 7-segment LED-display is uitzonderlijk.

De heer Abu-Hafss stelde ons voor om een ​​stopwatch te ontwerpen met 4 displays, twee voor minuten en twee voor seconden (MM: SS) configuratie. Maar voor de meesten van ons is het misschien niet een haalbaar ontwerp, dus hebben we nog twee weergaven toegevoegd voor een millisecondebereik, dus het voorgestelde ontwerp zal nu in MM: SS: mS-configuratie zijn.

Als je om de een of andere reden alleen de MM: SS-configuratie nodig hebt, hoef je de 7-segmentdisplays in milliseconden en de driver-IC's niet aan te sluiten, de hele functionaliteit van het circuit blijft onaangetast.

Het circuit:

De voorgestelde stopwatch bestaat uit zes IC 4026, een driver met zeven segmenten, zes LED-displays met zeven segmenten, een Arduino-bord, een paar drukknoppen en een paar 10K-weerstanden.

Laten we nu eens kijken hoe we IC 4026 kunnen verbinden met een 7-segmentendisplay.

Het 7-segment-display kan elk gangbaar kathodedisplay van elke kleur zijn. Het display met 7 segmenten kan gemakkelijk worden uitgeschakeld door 5V-voeding, dus een weerstand van 330 ohm is verplicht op elk segment van het display.

Laten we nu eens kijken naar het pin-diagram van IC 4026:

  • De pin # 1 is klokingang.
  • De pin # 2 is klok uitschakelen, het deactiveert de telling op het display als deze pin hoog is.
  • De pin # 3 is display inschakelen. Als deze pin laag is, wordt het display uitgeschakeld en vice versa.
  • De pin # 5 is carry-out, die hoog wordt wanneer IC 10 telt.
  • De pinnen 6, 7, 9, 10, 11, 12, 13 zijn weergave-uitgangen.
  • De pin # 8 is GND.
  • De pin # 16 is Vcc.
  • De pin # 15 wordt gereset, als we deze pin hoog zetten, wordt de telling naar nul.
  • De pinnen # 4 en # 14 worden niet gebruikt.

Aansluitschema weergeven:

Aansluitschema LCD-scherm:

Elk van de GND-pennen van het 7-segmentdisplay kan met aarde worden verbonden. De IC moet worden gevoed door 5V-voeding of de 5V-uitgangspen van Arduino.

Het bovenstaande schema voor slechts één beeldscherm, herhaal hetzelfde voor vijf andere beeldschermen.

Hier is de rest van het schema:

Stopwatch met Arduino met 7-segmentweergave

Het circuit kan worden gevoed door een 9V-batterij. Er zijn hier twee knoppen, een voor het starten van de tijd en een voor het stoppen. Door op de resetknop op de Arduino te drukken, wordt de tijdtelling op het display teruggezet naar nul.

De twee drukknoppen zijn verbonden met pin # 2 en # 3, die hardware-interrupt zijn van de Arduino / Atmega328P-microcontroller.

Laten we eens kijken wat onderbreken is:

Er zijn twee soorten interrupts: hardware-interrupt en software-interrupt. Hier gebruiken we alleen de hardware-interrupt.

Een interrupt is een signaal naar de microcontroller, waardoor de microcontroller onmiddellijk op een gebeurtenis reageert.

Er zijn slechts twee hardware-interrupt-pinnen in Arduino-kaarten met ATmega328P-microcontrollerpen # 2 en # 3. Arduino mega heeft meer dan twee hardware-interruptpinnen.

De microcontrollers kunnen niet twee functies tegelijk uitvoeren. Bijvoorbeeld het controleren op het indrukken van een knop en het tellen van getallen.

De microcontrollers kunnen geen twee gebeurtenissen tegelijkertijd uitvoeren, als we een code schrijven om het indrukken van een knop te controleren en getallen te tellen, wordt de druk op de knop alleen gedetecteerd wanneer de microcontroller het codefragment voor het detecteren van de knopdruk leest, de rest van de tijd (telt de cijfers) de knop werkt niet.

Er zal dus een vertraging zijn in de detectie van het indrukken van een knop en als de code tijdelijk wordt gestopt, wordt het indrukken van de knop mogelijk nooit gedetecteerd. Om dit soort problemen te voorkomen is interrupt geïntroduceerd.

Het interruptsignaal krijgt altijd de hoogste prioriteit, de hoofdfunctie (hoofdregels code) wordt gestopt en voert de functie (een ander stuk code) uit die is toegewezen aan die specifieke interrupt.

Dit is erg belangrijk voor tijdkritische toepassingen zoals stopwatch of beveiligingssystemen enz. Waarbij de processor onmiddellijk actie moet ondernemen als reactie op een gebeurtenis.

In Arduino wijzen we hardware-interrupt toe als:

attachInterrupt (0, start, RISING)

  • '0' betekent het onderbrekingsgetal nul (in microcontrollers begint alles vanaf nul) wat pin # 2 is.
  • 'Start' is de naam van de onderbrekingsfunctie, u kunt hier alles noemen.
  • 'RISING' als de pin # 2 (die onderbreking nul is) hoog wordt, wordt de onderbrekingsfunctie uitgevoerd.

attachInterrupt (1, Stop, RISING)

  • '1' betekent het onderbrekingsnummer één, pin # 3.
  • 'Stop' is de naam van de onderbreking.

We kunnen ook 'RISING' vervangen door 'FALLING', nu wanneer de interrupt-pin LAAG wordt, wordt de interrupt-functie uitgevoerd.

We kunnen ook 'RISING' vervangen door 'CHANGE', nu wanneer de interrupt-pin van hoog naar laag of van laag naar hoog gaat, wordt de interrupt-functie uitgevoerd.

De interruptfunctie kan als volgt worden toegewezen:

void start () // start is de naam van de onderbreking.

// programma hier

De onderbrekingsfunctie moet zo kort mogelijk zijn en de functie delay () kan niet worden gebruikt.

Dat concludeert dat de hardware-interruptsoftware-interrupt gerelateerd aan Arduino in een volgend artikel zal worden uitgelegd.

Nu weet je waarom we de start- en stopdrukknoppen hebben aangesloten om pinnen te onderbreken.

Sluit het circuit aan volgens het diagram, de rest van het circuit spreekt voor zich.

Programma:


Nu is dat de code.

Stopwatch speciaal ontwikkeld voor de Atheletes

Laten we tot slot leren hoe de bovenstaande concepten daadwerkelijk kunnen worden geüpgraded voor atleten die hun loopvaardigheden willen ontwikkelen zonder afhankelijk te zijn van anderen voor de noodzakelijke start en stop van de timer / stopwatch. Het is beter om de timer automatisch te starten door uw beweging te detecteren dan iemand die de stopwatch start / stopt, waardoor ook hun reactietijd kan toenemen.

OPMERKING: dit project is ontworpen voor het meten van de tijd tussen punt ‘A’ en punt ‘B’ die door ÉÉN gebruiker tegelijk wordt bestreken.

De opstelling bestaat uit twee lasers geplaatst op startpunt en eindpunt, twee LDR's zijn ook tegenover twee lasermodules geplaatst. Wanneer de atleet de ‘start’ laser onderbreekt, begint de tijd te berekenen en wanneer de atleet het einde bereikt, onderbreekt hij de ‘eindlaser’ en de timer stopt en geeft de verstreken tijd tussen twee punten weer. Dit is de methode die wordt gebruikt om de verstreken tijd in het voorgestelde idee te meten.

Laten we elk onderdeel van het circuit in detail bekijken.

Componenten Werkdetails

Het circuit is vrij eenvoudig gehouden, het bestaat uit 16 x 2 LCD-module, enkele weerstanden, twee LDR's en een drukknop.

De interface tussen LCD en arduino is standaard, we kunnen een vergelijkbare verbinding vinden in veel andere LCD-gebaseerde projecten.

Twee analoge pinnen A0 en A1 worden gebruikt om laseronderbrekingen te detecteren. Analoge pin A2 is verbonden met drukknop die wordt gebruikt om de stopwatch in te schakelen.

Drie weerstanden, twee 4.7K en één 10K zijn pull-down-weerstanden die ervoor zorgen dat de ingangspennen laag blijven.

10K potentiometer is voorzien voor het aanpassen van het contrast in de LCD-module voor optimale zichtbaarheid.

Het voorgestelde circuit is ontworpen met een foutdetectiemechanisme voor lasers. Als een van de lasers defect is of niet goed is uitgelijnd met LDR, wordt er een foutmelding weergegeven op het LCD-scherm.

· Als de START-laser niet werkt, wordt de melding '‘ start ’laser werkt niet weergegeven.

· Als de STOP-laser niet werkt, wordt de melding '‘ stop ’laser werkt niet weergegeven.

· Als beide lasers niet werken, wordt weergegeven 'Beide lasers werken niet'

· Als beide lasers correct werken, wordt weergegeven: 'Beide lasers werken prima'

De foutmelding verschijnt totdat de lasermodule is gefixeerd of de uitlijning correct is uitgevoerd met LDR.

Zodra deze stap probleemloos verloopt, gaat het systeem naar de stand-bymodus en wordt '-system standby-' weergegeven. Op dit punt kan de gebruiker de installatie inschakelen door op elk gewenst moment op de drukknop te drukken.

Als de drukknop wordt ingedrukt, is het systeem klaar om beweging van de gebruiker te detecteren en wordt 'Systeem is klaar' weergegeven.

De hardloper bevindt zich mogelijk enkele centimeters van de 'start'-laser.

Als de 'start' -laser wordt onderbroken, begint de tijd te tellen en worden de displays 'Tijd wordt berekend ……' De tijd berekend op de achtergrond.

De verstreken tijd wordt pas weergegeven als de loper de 'stop' -laser bereikt / onderbreekt. Dit komt omdat voor het weergeven van de verstreken tijd op het LCD-scherm, zoals bij traditionele stopwatch, verschillende aanvullende instructies nodig zijn die in de microcontroller moeten worden uitgevoerd, wat de nauwkeurigheid van de setup aanzienlijk verslechtert.

OPMERKING: Druk op de reset-knop op de arduino om de metingen te wissen.

Hoe het circuit op een atletiekbaan te zetten:

Gebruik dikke draden om verbinding te maken tussen LDR's en het Arduino-circuit, aangezien de afstand tussen deze twee enkele meters van elkaar kan zijn en de spanning niet significant mag dalen. De afstand tussen LDR1 en LDR2 kan maximaal een paar honderd meter bedragen.

Hoe LDR te monteren:

De LDR moet in een holle, ondoorzichtige buis worden gemonteerd en het voorste gedeelte moet ook worden afgedekt en er wordt alleen een gat met een diameter van enkele millimeters gemaakt om de laserstraal binnen te laten.

De LDR moet worden beschermd tegen direct zonlicht, aangezien hij niet kan onderscheiden van laserstraal en andere lichtbronnen en mogelijk geen beweging van de gebruiker registreert.

Programmacode:

Prototype van de auteur:

Upgraden met een Split Timer-faciliteit

Het voorgestelde automatische stopwatchcircuit met gesplitste timer is een uitbreiding van het automatische stopwatchcircuit, waarbij de stopwatch de tijd automatisch bijhoudt zodra de solo-loper het startpunt verlaat en de timer stopt en de verstreken tijd laat zien wanneer de loper het eindpunt bereikt.

Invoering

Dit project werd voorgesteld door een van de enthousiaste lezers van deze website, de heer Andrew Walker.

In dit project introduceren we nog 4 LDR's om de tussentijd van de solo-loper te meten. Er zijn in totaal 6 LDR's die allemaal op de atletiekbaan kunnen worden geplaatst met een uniforme afstand tussen hen of afhankelijk van de omstandigheden en de keuze van de gebruiker.

De meeste hardware blijft ongewijzigd, behalve de toevoeging van 4 LDR's, maar de code heeft een enorme wijziging ondergaan.

Schematisch diagram met tussentijd:

Automatische stopwatch met tussentijd

Het bovenstaande circuit bestaat uit weinig componenten en is beginnersvriendelijk. Er is geen verdere uitleg vereist, alleen bedrading volgens het schakelschema.

Hoe LDR's te bedraden:

De LDR 2 wordt getoond op het hoofdcircuitschema en sluit nog 4 LDR's parallel aan zoals weergegeven in het bovenstaande diagram.

Indelingsdiagram:

Het bovenstaande is de basisopstelling voor het plaatsen van de laser. Houd er rekening mee dat de afstand tussen LDR's de keuze van de gebruiker kan zijn, afhankelijk van de tracklengte.

Programma:

Hoe deze automatische stopwatch te bedienen:

• Als de installatie is voltooid, zet u eerst de lasers aan en vervolgens zet u het Arduino-circuit aan.
• Als alle lasers correct zijn uitgelijnd met LDR's, geeft het display geen foutmeldingen weer. Lijn ze eventueel goed uit.
• Nu geeft het circuit 'Systeem is stand-by' weer. Druk nu op de 'start' knop en het zal 'Systeem is klaar' weergeven.
• Op dit punt, wanneer de solospeler de LDR 1-lichtstraal onderbreekt, start de timer en wordt weergegeven 'De tijd wordt berekend ...'
• Zodra de speler het eindpunt bereikt, d.w.z. LDR 6, stopt de timer en wordt de 5 tussentijd weergegeven die door het circuit is opgenomen.
• De gebruiker moet op de resetknop op de Arduino drukken om de timer te resetten.
Waarom kan deze automatische stopwatch geen live-timing op het scherm weergeven zoals traditionele stopwatch dat doet (maar geeft hij eerder een statische tekst weer 'De tijd wordt berekend ....')?
Om de timing in realtime weer te geven, moet Arduino aanvullende instructies uitvoeren op het LCD-scherm. Dit zal enkele microseconden tot enkele milliseconden vertraging toevoegen aan het belangrijkste stuk code voor tijdregistratie, wat tot onnauwkeurige resultaten zal leiden.

Als u nog vragen heeft, kunt u dit aangeven via het commentaargedeelte.




Vorige: Arduino LCD KeyPad Shield (SKU: DFR0009) Gegevensblad Volgende: Arduino Random RGB Light Generator Circuit