Inhoudsopgave:

Mechanische klok met zeven segmenten - Ajarnpa
Mechanische klok met zeven segmenten - Ajarnpa

Video: Mechanische klok met zeven segmenten - Ajarnpa

Video: Mechanische klok met zeven segmenten - Ajarnpa
Video: Seven Segment Display Using A Clock 2024, November
Anonim
Mechanische klok met zeven segmenten
Mechanische klok met zeven segmenten
Mechanische klok met zeven segmenten
Mechanische klok met zeven segmenten

Een paar maanden geleden heb ik een tweecijferig mechanisch 7-segmentsdisplay gebouwd dat ik in een afteltimer heb veranderd. Het kwam redelijk goed uit en een aantal mensen stelde voor om het display te verdubbelen om een klok te maken. Het probleem was dat ik al bijna geen PWM IO meer had op mijn Arduino Mega en niet genoeg beschikbaar had voor het tweede of derde cijfer. Ik werd toen gewezen in de richting van deze PCA9685 16-kanaals PWM-stuurprogramma's die via een I2C-interface werken. Deze maakten het mogelijk om de 28 servo's aan te sturen die ik allemaal nodig had met behulp van de twee I2C-pinnen op een Arduino. Dus ging ik aan de slag met het bouwen van een klok die nu een DS1302 real-time klokmodule gebruikt om de tijd bij te houden en twee 16-kanaals servodrivers om de 28 servo's te besturen die worden gebruikt om het display te maken, allemaal aangedreven door een Arduino Uno.

Als je deze Instructable leuk vindt, overweeg dan om ervoor te stemmen in de klokkenwedstrijd

Benodigdheden:

Om je klok te bouwen, heb je naast enkele basisgereedschappen de volgende benodigdheden nodig:

  • Arduino Uno - Koop hier
  • DS1302 Klokmodule - Hier kopen
  • 2 x PCA9685 16Ch servostuurprogramma's - hier kopen
  • 28 x micro-servo's - hier kopen
  • Lintkabel - hier kopen
  • Mannelijke Pin Header Strips - Koop hier
  • Vrouwelijke pin-headerstrips - hier kopen
  • 3 mm MDF - Koop hier
  • Zwarte spuitverf - hier kopen
  • 5V 5A batterij-eliminatiecircuit - hier kopen
  • 12V-voeding - hier kopen

Voor dit project heb je ook enkele 3D-geprinte onderdelen nodig. Als je nog geen 3D-printer hebt en je vindt het leuk om dingen te maken, dan moet je zeker overwegen om er een te kopen. De hier gebruikte Creality Ender 3 Pro is betaalbaar en produceert prints van redelijk goede kwaliteit voor zijn prijs.

  • 3D-printer gebruikt - hier kopen
  • Filament - Koop hier

Stap 1: 3D print de plastic onderdelen

3D-print de plastic onderdelen
3D-print de plastic onderdelen
3D-print de plastic onderdelen
3D-print de plastic onderdelen
3D-print de plastic onderdelen
3D-print de plastic onderdelen

Ik heb de 7 segment displays zo eenvoudig mogelijk ontworpen. De servo is ook de steunbeugel om het segment erboven op te houden. Er zijn twee 3D-geprinte componenten nodig voor elk segment, een afstandsblok om de onderkant van de servo te ondersteunen en het displaysegment dat rechtstreeks op de servo-arm wordt gelijmd.

Download de 3D-afdrukbestanden - Mechanische klok met 7 segmenten 3D-afdrukbestanden

Print de servo-segmenten en stippen met behulp van een felgekleurde PLA. Ik gebruikte doorschijnend groen, maar rood, oranje of geel zou ook goed moeten werken. Ik heb zwarte PLA gebruikt voor de afstandsblokken en puntsteunen, zodat ze niet zichtbaar zijn als de segmenten in de uit-stand staan.

Als je geen toegang hebt tot een 3D-printer, probeer dan een van de online printservices. Er zijn een aantal betaalbare services beschikbaar die de componenten printen en binnen een paar dagen bij u thuis bezorgen.

Stap 2: Bereid uw besturingskaarten en bedrading voor

Bereid uw besturingskaarten en bedrading voor
Bereid uw besturingskaarten en bedrading voor
Bereid uw besturingskaarten en bedrading voor
Bereid uw besturingskaarten en bedrading voor
Bereid uw besturingskaarten en bedrading voor
Bereid uw besturingskaarten en bedrading voor
Bereid uw besturingskaarten en bedrading voor
Bereid uw besturingskaarten en bedrading voor

U moet twee PCA9685 16-kanaals PWM-stuurprogramma's gebruiken om uw 28 klokservo's aan te sturen. Ik scheidde de servo's in de uur- en minutencijfers, waarbij elk paar cijfers door één bord werd aangestuurd. Dus ik heb een bord dat de servo's bestuurt voor de cijfers van twee uur en het tweede dat de servo's bestuurt voor de cijfers van twee minuten.

Om de twee aan elkaar te koppelen, moet je een 6-aderige lintkabelconnector maken en een tweede headerstrip op het andere uiteinde van de eerste servobesturingskaart solderen. U moet ook het I2C-adres op het tweede bord wijzigen, zodat het verschilt van het eerste en uniek identificeerbaar is.

Je moet ook de kabelboom maken om de drie kaarten (twee servokaarten en de klokmodule) op je Arduino aan te sluiten. Je hebt 5V en GND nodig voor elk bord, evenals de I2C-verbindingen naar je Arduino-pinnen A4 en A5 (I2C op Arduino Uno), en de klokmodule-pinnen CLK, DAT & RST naar pinnen 6, 7 en 8 op je Arduino respectievelijk.

De Arduino wordt rechtstreeks van stroom voorzien vanuit de 12V-voeding en naar de servo's met behulp van de 5V 5A BEC die vervolgens wordt aangesloten op de twee terminals aan de bovenkant van de PWM-driver. U hoeft slechts één servodriver op de voeding aan te sluiten en deze zal de tweede via de 6-aderige lintkabelverbinding van stroom voorzien.

Stap 3: Monteer de servo's

Monteer de servo's
Monteer de servo's
Monteer de servo's
Monteer de servo's
Monteer de servo's
Monteer de servo's

Nadat u uw segmenten hebt afgedrukt, moet u de achterkant en zijkanten zwart spuiten, zodat ze minder zichtbaar zijn wanneer ze 90 graden naar de uit-stand worden gedraaid.

Vervolgens moet je de segmenten op je servo-armen lijmen met smeltlijm. Het helpt om ze op de servo te lijmen met de arm al op de servo, op deze manier kun je controleren of je ze recht en waterpas lijmt.

Je moet ook een afstandsblok op de onderkant van elke servo lijmen.

Zet de stippen in elkaar door een kleine deuvel of kebabstok in de achterkant van de stippen en vervolgens in de basisblokken te lijmen. Ik heb deze sticks ook zwart gespoten zodat ze vanuit een hoek minder zichtbaar zijn.

Stap 4: Instellen en testen

Instellen en testen
Instellen en testen
Instellen en testen
Instellen en testen

Ik heb alle servo's genummerd en het nummer op elke lead geschreven, zodat het gemakkelijker was om ze bij te houden. Ik begon met het bovenste segment op het cijfer van de eenheden en werkte rond naar het middensegment op het tiental. Dit is ook de volgorde waarin ik ze op de servobesturingskaarten heb aangesloten, onthoudend dat de identifiers op de kaarten van 0 tot 13 tellen en niet van 1 tot 14.

Ik plaatste de segmenten vervolgens op een tafel met voldoende ruimte ertussen om te testen, zodat ze niet in elkaar overgingen terwijl de reislimieten en richtingen werden ingesteld. Als je ze dicht bij elkaar probeert te plaatsen, zul je waarschijnlijk een of twee proberen om op een bepaald moment in de verkeerde richting of over de reis te bewegen en een andere te raken die het segment, de servo-arm kan beschadigen of de tandwielen op de servo kan strippen.

Stap 5: De code uploaden

De code uploaden
De code uploaden
De code uploaden
De code uploaden
De code uploaden
De code uploaden

De code ziet er op het eerste gezicht ingewikkeld uit, maar is eigenlijk relatief eenvoudig dankzij de twee gebruikte bibliotheken. Er is ook veel herhaling omdat er vier verschillende 7 segment displays moeten worden bijgewerkt.

Hier is een beknopte beschrijving van de code, bekijk de volledige gids voor een meer gedetailleerde uitleg en een link om de code te downloaden - Mechanische 7 Segment Display Clock

We beginnen met het importeren van twee bibliotheken, virtuabotixRTC.h voor de klokmodule en Adafruit_PWMServoDriver.h voor de servodrivers. De Adafruit-bibliotheek kan rechtstreeks worden gedownload en geïnstalleerd via de bibliotheekmanager in de IDE.

Vervolgens maken we voor elke besturingsprint een object aan met het betreffende adres, één voor de uurcijfers en één voor de minutencijfers.

We hebben dan vier arrays om de aan- en uit-posities voor elke servo op te slaan. U moet deze nummers in de komende stappen aanpassen om ervoor te zorgen dat uw servo's rechtop staan wanneer ze zijn ingeschakeld, 90 graden zijn gedraaid wanneer ze zijn uitgeschakeld en niet te lang reizen.

Een cijferreeks slaat de posities van elk segment op voor elk cijfer dat moet worden weergegeven.

Vervolgens stellen we de klokmodule in en maken we variabelen om de huidige en vroegere individuele cijfers op te slaan.

In de setup-functie starten en configureren we de PWM-besturingskaarten en werken we indien nodig de kloktijd bij. Vervolgens doorlopen we een lus om het display in te stellen op 8 8: 8 8, zodat we de startpositie van alle servo's kennen. Dit wordt ook gebruikt om de servo's zo in te stellen dat ze allemaal correct naar boven wijzen.

In de hoofdlus halen we de bijgewerkte tijd van de klokmodule, morsen deze in de vier cijfers en controleren vervolgens of de tijd is veranderd sinds de laatste controle. Als de tijd is veranderd, werken we het display bij en werken vervolgens de vorige cijfers bij.

In de update-weergavefunctie verplaatsen we eerst de middensegmenten. Dit wordt eerst gedaan omdat er enige logica nodig is om de twee bovenste segmenten naast het middensegment een beetje uit de weg te schuiven voordat het middensegment wordt verplaatst, anders zal het er tegenaan stoten. Zodra de middelste segmenten zijn verplaatst, worden de resterende segmenten op de juiste posities verplaatst.

Stap 6: Montage van de klok op het achterbord

De klok op het achterbord monteren
De klok op het achterbord monteren
De klok op het achterbord monteren
De klok op het achterbord monteren
De klok op het achterbord monteren
De klok op het achterbord monteren

Toen ik klaar was met testen, heb ik de servo's op het achterbord gemonteerd met behulp van de bovenstaande lay-out als richtlijn.

Het witte gebied is de totale grootte van het bord, het lichtere grijs is het gebied rond elk cijfer waar de servosegmenten naar toe bewegen en de omtrek op het donkergrijze gebied is de middellijn voor de buitenste 6 segmenten voor elk cijfer.

Ik sneed het bord, markeerde de lay-out en plakte de cijfers op hun plaats om de wijzerplaat te vormen.

Ik boorde toen gaten in de buurt van elke servo en voerde de draden door naar de achterkant van het bord, zodat ze minder zichtbaar zijn.

Ik heb de elektronica op de achterkant van de klok gemonteerd met dubbelzijdig plakband.

Stap 7: definitieve installatie en bediening

Definitieve installatie en bediening
Definitieve installatie en bediening
Definitieve installatie en bediening
Definitieve installatie en bediening
Definitieve installatie en bediening
Definitieve installatie en bediening
Definitieve installatie en bediening
Definitieve installatie en bediening

Toen de servo's allemaal klaar waren, heb ik alle servo-armen verwijderd voor de laatste aanpassingen aan de posities van de segmenten. U moet de Arduino in deze staat inschakelen zodat 8 8: 8 8 wordt weergegeven en vervolgens de stroom loskoppelen, dit centreert al uw servo's opnieuw zodat u de servo-armen weer kunt plaatsen met de segmenten zo dicht mogelijk bij verticaal als mogelijk.

U moet dan uw Arduino achtereenvolgens inschakelen en aanpassingen maken aan uw segment aan en uit-posities in uw vier arrays, zodat de servo's perfect verticaal zijn wanneer ze aan staan en 90 graden draaien wanneer ze zijn uitgeschakeld zonder te veel te reizen. Deze stap is behoorlijk tijdrovend en vereist een beetje geduld, maar het eindresultaat is het zeker waard!

De klok kan gevoed blijven met de 12V-voeding en 5V BEC erop aangesloten. Als de stroom uitvalt, houdt de batterij op de RTC-module de tijd bij, zodat wanneer de stroom wordt hersteld, de klok automatisch wordt gereset naar de juiste tijd.

Als je deze Instructable leuk vond, stem er dan op in de Clock-wedstrijd en laat me weten welke verbeteringen of suggesties je kunt bedenken in de comments hieronder.

Klokken wedstrijd
Klokken wedstrijd
Klokken wedstrijd
Klokken wedstrijd

Tweede prijs in de klokkenwedstrijd

Aanbevolen: