Inhoudsopgave:

DIY Arduino binaire wekker - Ajarnpa
DIY Arduino binaire wekker - Ajarnpa

Video: DIY Arduino binaire wekker - Ajarnpa

Video: DIY Arduino binaire wekker - Ajarnpa
Video: Binary Alarm Clock 2024, November
Anonim
DIY Arduino binaire wekker
DIY Arduino binaire wekker
DIY Arduino binaire wekker
DIY Arduino binaire wekker
DIY Arduino binaire wekker
DIY Arduino binaire wekker

Het is weer de klassieke binaire klok! Maar dit keer met nog meer extra functie! In deze instructable laat ik je zien hoe je een binaire wekker kunt bouwen met Arduino die je niet alleen tijd, maar ook datum, maand kan laten zien, zelfs met timer- en alarmfuncties die ook als bedlampje kunnen worden gebruikt! Zonder verder oponthoud laten we aan de slag gaan!

Opmerking: dit project maakt geen gebruik van een RTC-module, dus de nauwkeurigheid is afhankelijk van het bord dat u gebruikt. Ik heb een corrigerend mechanisme toegevoegd dat het tijdsverloop over een bepaalde periode corrigeert, maar je zult moeten experimenteren om de juiste waarde voor de tijdsperiode te vinden (meer hierover hieronder), en zelfs met een correctief mechanisme zal het nog steeds afdrijven gedurende lange tijd (vergeleken met zonder). Als iemand geïnteresseerd is, voel je vrij om het gebruik van de RTC-module in dit project te implementeren

Benodigdheden

5 mm LED (van elke kleur, ik heb 13 witte LED's gebruikt met één RGB-LED als indicator) --- 14 stuks

Arduino Nano (andere werken mogelijk) --- 1 pc

Microschakelaar --- 1 st

Klein stukje aluminiumfolie

Montagebord (voor behuizing, maar voel je vrij om je eigen te ontwerpen)

Stuk wit papier (of een andere kleur)

Wat plastic folie (degene die als omslag van het boek wordt gebruikt)

Stelletje draden

Zoemer --- 1 st

NPN-transistor --- 1 st

Weerstanden 6k8 --- 14 stuks, 500R --- 1 stuks, 20R (10Rx2) --- 1 stuks, 4k7 --- 1 stuks

Stroomvoorziening voor het project (ik gebruikte li-on batterij)

5050 LED strip en een schuifschakelaar (optioneel)

Stap 1: Sluit het circuit aan

Verbind het circuit!
Verbind het circuit!

Ik verdeel deze stap in:

1) Het zoemergedeelte:

2) Het LED-paneel

3) De schakelaar (drukknop)

4) LED-strip

5) De capaciteitssensor:

6) Voeding

7) Verbind ze allemaal met Arduino

Meestal is dit slechts een stap "volg het schema". Dus bekijk het schema hierboven of download en print het zelfs!

Stap 2: Het zoemergedeelte voorbereiden

Het zoemergedeelte voorbereiden
Het zoemergedeelte voorbereiden
Het zoemergedeelte voorbereiden
Het zoemergedeelte voorbereiden
Het zoemergedeelte voorbereiden
Het zoemergedeelte voorbereiden

Als je eerder zoemer met Arduino hebt gebruikt, weet je dat als we het rechtstreeks op Arduino aansluiten, het niet luid genoeg zal zijn. We hebben dus een versterker nodig. Om de versterker te bouwen, hebben we een NPN-transistor nodig (in principe zal elke NPN werken, ik gebruikte S9013 omdat ik het van een oud project kreeg), en een weerstand om de stroom te beperken. Identificeer om te beginnen eerst de collector, emitter en basis van de transistor. Een beetje googlen op de datasheet zal hiervoor werken. Soldeer vervolgens de collector van de transistor aan de negatieve pool van de zoemer. Aan de positieve pool van de zoemer solderen we er gewoon een stuk draad aan, zodat we het later aan onze Arduino kunnen solderen. Soldeer daarna de 500R-weerstand (of een vergelijkbare weerstandswaarde) aan de basis van de transistor en soldeer van de weerstand een ander stuk draad voor toekomstig gebruik. Soldeer ten slotte de twee 10R-weerstanden in serie aan de emitter van de transistor en sluit een andere draad van de weerstanden aan.

Echt, raadpleeg het schema.

p/s: Ik weet nog steeds niet echt hoe ik een weerstand voor een transistor moet kiezen op het moment dat ik dit schrijf. De waarde die ik heb gebruikt, is empirisch gekozen.

Stap 3: Het LED-paneel voorbereiden

Het LED-paneel voorbereiden
Het LED-paneel voorbereiden
Het LED-paneel voorbereiden
Het LED-paneel voorbereiden
Het LED-paneel voorbereiden
Het LED-paneel voorbereiden

Sluit de LED's en weerstand dienovereenkomstig aan op het prototypebord en soldeer. Dat is het. Volg het schema. Voor het geval je geïnteresseerd bent in de afstand die ik heb gebruikt, 3 gaten uit elkaar voor elke kolom en twee gaten uit elkaar voor elke rij (zie afbeelding). En de indicatie-LED? Ik heb hem willekeurig aangesloten.

Nadat u de LED's en weerstand op het bord hebt gesoldeerd, verbindt u alle positieve klemmen van LED's met elkaar. Soldeer vervolgens de draden één voor één aan elk van de weerstanden op de negatieve terminals van LED's, zodat we ze later aan Arduino kunnen solderen.

OPMERKING: u kunt bij deze stap in de war raken. Onthoud dat in plaats van alle aarde met elkaar te verbinden, we alle positieve terminals met elkaar verbinden en de negatieve terminal met de individuele pin op Arduino. We gebruiken dus de Arduino GPIO-pin als aarde, niet Vcc. Maak je geen zorgen als je hem per ongeluk achterstevoren aansluit. U kunt alle HOOG naar LAAG en LAAG naar HOOG wijzigen in de ledcontrol-functie.

Stap 4: De schakelaar voorbereiden (eigenlijk drukknop)

Voorbereiding van de schakelaar (in feite drukknop)
Voorbereiding van de schakelaar (in feite drukknop)
Voorbereiding van de schakelaar (in feite drukknop)
Voorbereiding van de schakelaar (in feite drukknop)
Voorbereiding van de schakelaar (in feite drukknop)
Voorbereiding van de schakelaar (in feite drukknop)

Voor de schakelaar (ik noem het schakelaar omdat ik een microschakelaar heb gebruikt, maar je weet dat het een drukknop is), hebben we een 4k7 pull-down-weerstand nodig en natuurlijk de schakelaar zelf. Ah, vergeet niet om wat draden voor te bereiden. Begin met het solderen van de weerstand en een stuk draad aan de common ground (COM) van de microschakelaar. Soldeer vervolgens een ander stuk draad aan de normaal geopende (NO) van de microschakelaar. Bevestig ten slotte nog een draad aan de weerstand. Zet het vast met wat hete lijm.

Kennishoek: Waarom hebben we een pull-down weerstand nodig?

"Als u de digitale I/O-pin loskoppelt van alles, kan de LED onregelmatig knipperen. Dit komt omdat de ingang "zweeft" - dat wil zeggen, deze zal willekeurig HOOG of LAAG terugkeren. Daarom hebt u een pull-up of pull-down weerstand in het circuit." -- Bron: Arduino-website

Stap 5: LED-strip voorbereiden

LED-strip voorbereiden
LED-strip voorbereiden
LED-strip voorbereiden
LED-strip voorbereiden

LED-strip is voor bedzijlamp, die optioneel is. Sluit LED-strip en schuifschakelaar gewoon in serie aan, niets bijzonders.

Stap 6: De capaciteitssensor voorbereiden

De capaciteitssensor voorbereiden
De capaciteitssensor voorbereiden
De capaciteitssensor voorbereiden
De capaciteitssensor voorbereiden
De capaciteitssensor voorbereiden
De capaciteitssensor voorbereiden
De capaciteitssensor voorbereiden
De capaciteitssensor voorbereiden

Ok zie de foto. In principe gaan we de draad gewoon aan een klein stukje aluminiumfolie bevestigen (omdat aluminiumfolie niet kan worden gesoldeerd) en vervolgens op een klein stukje montagebord plakken. Vriendelijke herinnering, zorg ervoor dat u de aluminiumfolie niet volledig plakt. Laat een deel ervan vrij voor direct contact.

Stap 7: De voeding voorbereiden

De voeding voorbereiden
De voeding voorbereiden
De voeding voorbereiden
De voeding voorbereiden
De voeding voorbereiden
De voeding voorbereiden

Omdat ik een li-on-batterij als voeding heb gebruikt, heb ik een TP4056-module nodig voor opladen en bescherming, en een boost-converter om de spanning om te zetten naar 9v. Als je hebt besloten om een 9V-wandadapter te gebruiken, heb je misschien een DC-aansluiting nodig, of sluit je deze gewoon rechtstreeks aan. Merk op dat de weerstandswaarde voor de versterker is ontworpen voor 9V en als u een andere spanning wilt gebruiken, moet u mogelijk de weerstand wijzigen.

Stap 8: Ze verbinden met Arduino

Ze verbinden met Arduino
Ze verbinden met Arduino
Ze verbinden met Arduino
Ze verbinden met Arduino
Ze verbinden met Arduino
Ze verbinden met Arduino

Volg het schema! Volg het schema! Volg het schema!

Sluit niet de verkeerde pin aan, anders wordt het raar.

Stap 9: Behuizing

Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing

De afmeting van mijn ontwerp is 6,5 cm * 6,5 cm * 8 cm, dus het is een beetje omvangrijk. Het bestaat uit een voorvenster voor LED-display en bovenvenster voor de bedlamp. Voor mijn ontwerp, zie foto's.

Stap 10: Programmeertijd

Image
Image
Programmeer tijd!
Programmeer tijd!

Download mijn schets hieronder en upload naar je Arduino. Als je niet weet hoe je dit moet doen, doe dan geen moeite om dit project te doen! Nee grapje, hier is een goede tutorial over: Upload schets naar arduino

Open vervolgens de seriële monitor en u zou moeten zien dat deze de huidige tijd uitvoert. Om de tijd in te stellen, gaat u als volgt te werk.

Uur instellen: h, XX -- waarbij xx het huidige uur is

Minuten instellen: min, XX -- xx is de huidige minuut

Om de tweede in te stellen: s, XX

Datum instellen: d, XX

Maand instellen: ma, XX

Wanneer de bovenstaande opmerking wordt uitgevoerd, zou het u de waarde moeten retourneren die u zojuist hebt ingesteld. (Als u bijvoorbeeld het uur instelt met h, 15, zou het Uur: 15 moeten retourneren in de seriële monitor.

Voor de capaciteitssensor moet u deze mogelijk kalibreren voordat deze werkt. Druk hiervoor twee keer op de microschakelaar en kijk naar de seriële monitor. Het zou een aantal nummers moeten produceren. Leg nu uw vinger op de capaciteitssensor en let op het bereik van het nummer. Wijzig vervolgens de variabele "captrigger". Laten we zeggen dat je 20-30 krijgt als je erop drukt, en stel dan captrigger in op 20.

De schets gebruikt de ADCTouch-bibliotheek, zorg ervoor dat u deze hebt geïnstalleerd.

Stap 11: Correctief mechanisme

De periode voor het corrigerende mechanisme in mijn code is ingesteld op de juiste voor mij. Als de tijd nog steeds niet correct is, moet u de waarde van de variabele "corrdur" wijzigen

De corrdur staat nu standaard op 0 in de laatste update.

De waarde van corrdur betekent hoeveel milliseconden het duurt om één seconde te vertragen

Gebruik de formule om de waarde van corrdur te achterhalen:

2000/(y-x)/x)

waarbij x = werkelijke tijdsduur verstreken en y = tijdsduur verstreken van de klok, beide in seconde

Om de waarde van x en y te vinden, moet je een klein experiment doen.

Stel de tijd van de klok in op de werkelijke tijd en noteer de begintijd (de werkelijke begintijd en de begintijd van de klok moeten hetzelfde zijn). Noteer na een tijdje (enkele uren) de uiteindelijke werkelijke tijd en klok de eindtijd.

x=werkelijke eindtijd-begintijd en y=klok eindtijd-begintijd

Wijzig vervolgens de waarde van corrdur in de code en upload deze opnieuw naar de Arduino.

Herhaal vervolgens de test en deze keer veranderde de formule in:

2000/((2/z)+(y-x/x))

Waar x en y hetzelfde zijn als voorheen, terwijl z de huidige corrdur-waarde is.

Upload opnieuw en voer de test steeds opnieuw uit totdat deze nauwkeurig genoeg voor u is.

In het geval dat je klok nog steeds sneller gaat, zelfs als corrdur is ingesteld op 0 (betekent geen correctiemechanisme), moet je de tweede ++ wijzigen in de tweede -- in het correctiemechanismegedeelte van de code (ik heb het becommentarieerd), stel corrdur in op 0, zoek dan het nr. milliseconde die nodig is om één seconde te versnellen.

Stap 12: Alle functies gebruiken

Image
Image

U kunt de modus wijzigen door op de microschakelaar te drukken.

In de eerste modus geeft het gewoon de tijd weer. Als het indicatielampje 1 keer per seconde knippert, is het alarm uitgeschakeld. Als het 2 keer per seconde is, is het alarm ingeschakeld. U kunt het alarm 10 minuten snoozen in de eerste modus door op de capaciteitssensor te drukken.

In de tweede modus wordt de datum weergegeven. Op capaciteitssensor drukken doet niets.

In de derde modus kunt u de timer instellen. Als u op de capaciteitssensor drukt, wordt de timer ingeschakeld en moet u zien dat het indicatielampje begint te knipperen. Capaciteitssensor wordt ook gebruikt om de timertijd in te stellen. Het bereik van de timer is 1 minuut tot 59 minuten.

In de vierde modus kunt u het alarmuur instellen met behulp van de capaciteitssensor

In de vijfde modus kunt u de alarmminuten instellen met behulp van de capaciteitssensor.

Als u in de zesde modus op de capaciteitssensor drukt, wordt de minuut teruggezet op 30 en de seconde op 0 zonder het uur te wijzigen. Dat is gemeen, zolang je klok niet meer dan 30 minuten afdrijft, kun je hem opnieuw kalibreren met deze modus.

De zevende modus is de niets-doen-modus voor het geval de capaciteitssensor tijdens het opladen uitvalt.

Oh, om het alarm uit te schakelen, drukt u gewoon op de microschakelaar. (LAATSTE UPDATE OM ALARM SNOOZE OP TE NEMEN)

Nou, hoe zit het met het lezen van de klok? Het is makkelijk! Binaire klok lezen -- Wikihow In het begin voel je je misschien raar, maar je zult eraan wennen!

Stap 13: Conclusie

Conclusie
Conclusie
Conclusie
Conclusie

Waarom ik dit project ben begonnen. In eerste instantie is het omdat ik een oud digitaal horloge heb dat rondslingert en ik er een wekker van wil maken. Helaas blijkt het oude horloge kapot te zijn. Dus ik dacht: waarom zou ik er geen bouwen met Arduino? Met een beetje zoeken op Google vond ik dit binaire klokproject zonder RTC op instructable door Cello62. Het heeft echter niet de wekkerfunctie die ik wil, dus ik neem de code en pas deze zelf aan. En het project is geboren. Bovendien zag ik onlangs de klokwedstrijd op instructable draaien, wat me nog meer motivatie gaf om dit te doen. Hoe dan ook, dit is nog steeds mijn eerste project met Arduino, dus een heleboel mogelijke verbeteringen.

Toekomstige verbetering:

1) Gebruik RTC

2) Stel draadloos alarm of tijd of timer in!

3) Aan welke functie ik ook denk

Stap 14: Update: na een week gebruik

Update: na een week gebruik
Update: na een week gebruik
Update: na een week gebruik
Update: na een week gebruik
Update: na een week gebruik
Update: na een week gebruik

Afgezien van het voor de hand liggende probleem - tijdsverloop, is het volgende dat ik zou zeggen het stroomverbruik. Allereerst stap ik de spanning op naar 9v, die vervolgens wordt verlaagd door de lineaire regelaar in Arduino. De lineaire regelaar is erg inefficiënt. De klok duurt maar EEN DAG. Dat betekent dat ik hem elke dag moet opladen. Dat is niet het grootste probleem totdat je je realiseert dat het hele systeem slechts ongeveer 50% efficiënt is. Aangezien mijn batterij 2000 mAh is, zou ik het verspilde vermogen per dag kunnen berekenen.

Verspilde energie=(7.4Wh*10%)+(7.4Wh*90%*50%)=4.07Wh per dag

Dat is 1.486 kWh per jaar! Dat kan worden gebruikt om, uh, 283 g water te koken (van 25 C tot 100 C)? Maar goed, ik ga de efficiëntie van de klok verbeteren. De manier om dit te doen is om de lineaire regelaar helemaal niet te gebruiken. Dat betekent dat we de boost-converter moeten aanpassen om 5V rechtstreeks naar de 5V-pin op Arduino uit te voeren. Om het energieverlies nog verder te minimaliseren, moet ik de twee ingebouwde LED's (pin13 en voeding) verwijderen, omdat ze 0,95 Wh per dag verspillen. Helaas ben ik totaal noob in SMD-solderen, dus de enige manier om dit te doen is door de rail op het bord te knippen. Hierna moet ik de emitterweerstand op de zoemer en het bedlampje verwijderen (ledstrip werkt niet op 5V). Maar betekent dat dat je die geweldige functie moet opgeven? Nee! Je hebt hier twee keuzes: Gebruik de normale 5mm LED-diode, of gebruik 5V LED-strip. Maar voor mij voelde ik me al moe om dit project de hele vorige week te doen, dus besloot ik deze functie op te geven. Ik heb de schakelaar echter oorspronkelijk gebruikt voor de lichtfunctie voor het in- of uitschakelen van het klokpaneel om nog meer energie te besparen, maar uiteindelijk knippert de LED als ik hem uitschakel. Bug wordt functie? Ik weet het niet (Iedereen weet het, vertel het me hieronder).

Aan het einde van de wijziging gaat de klok nu meer dan 2 dagen mee!

Vervolgens heb ik een minder ernstig probleem met de klok. Tijdens het opladen zou de capaciteitssensor gek worden, dus ik voeg een andere modus toe die helemaal niets doet.

Wat betreft tijdsverloop, aangezien het erg onhandig is om elke dag op de computer aan te sluiten om hem te resetten, heb ik een andere modus toegevoegd die de minuut op 30 en de seconde op 0 zet. Dat betekent dat je hem op elk half uur kunt resetten!

Aanbevolen: