Inhoudsopgave:

TheSUN, Arduino aangedreven design wandklok - Ajarnpa
TheSUN, Arduino aangedreven design wandklok - Ajarnpa

Video: TheSUN, Arduino aangedreven design wandklok - Ajarnpa

Video: TheSUN, Arduino aangedreven design wandklok - Ajarnpa
Video: Объяснение прошивки Marlin 2.0.x 2024, Juli-
Anonim
TheSUN, Arduino aangedreven design wandklok
TheSUN, Arduino aangedreven design wandklok
TheSUN, Arduino aangedreven design wandklok
TheSUN, Arduino aangedreven design wandklok
TheSUN, Arduino aangedreven design wandklok
TheSUN, Arduino aangedreven design wandklok

Hallo weer Instructables-mensen!:-P

Vanwege verzendproblemen kon ik mijn ABTW-project niet voortzetten, dus besloot ik je een andere te laten zien, mijn nieuwste creatie.

Ik denk dat velen van ons, net als ik, van die mooie adresseerbare LED Stripes houden (ook wel NEOPIXEL LED genoemd). Je kunt ze krijgen van ADAFRUIT. Andere leveranciers zullen ook soortgelijke producten aanbieden. Er is een bibliotheek beschikbaar op ADAFRUITS - GitHub (klik op mij) inclusief enkele voorbeeldcode. Dus codering zou eenvoudig moeten zijn …

Ik zag die NEOPIXELS een gedachte, wat de h… kan ik doen met die glimmende kleine dingen.

  • Een LED-matrix Display? -> Te ingewikkeld en ik gebruik het niet (momenteel)
  • Kerstverlichting? -> Het past bij het seizoen, maar het zou goedkoper zijn om er een te kopen:-P
  • een klok? -> Waarom niet! Maar het moet stijlvol en onconventioneel zijn

Laten we dus een wandklok maken.

Als we ons polshorloge van dichtbij bekijken (als je een analoog hebt zoals ik), zullen we merken dat we 12 uur en 60 minuten hebben (hopelijk). Dat betekent dat we 60 adresseerbare LED's nodig hebben, phu! Als we een streep nemen met 60 LED's / meter krijgen we een diameter van ~318 mm (radius = scope / (2*Π)) dat is zeker te groot.

De waarheid is dat als je iemand om de tijd vraagt, niemand zal zeggen dat het 2 minuten over 3 is! U krijgt "Het is 5 over 3" als antwoord. Dus waarom zouden we niet alles terugschalen naar stappen van 5 minuten? Daarvoor hebben we slechts 12 LED's nodig, wat betekent dat we een diameter van 63,6 mm krijgen. We kunnen ook uren en minuten onderscheiden door ze een aparte kleur te geven. We zullen ook in staat zijn om de "ontbrekende" stappen van één minuut te voorzien van een extra strip van 4 LED's (of een enkele adresseerbare LED.

DAT IS HET PLAN! Laten we eens kijken hoe ik alles heb gedaan. Zoals altijd zal ik een lijst / materiaallijst en instructies geven over hoe het te bouwen.

Als je denkt dat alleen Zwitsers coole klokken kunnen maken, laten we dan maar bewijzen dat je ongelijk hebt (sorry Zwitserland:-P)

Stap 1: Ontwerp en materiaalkeuze

Ontwerp en materiaalkeuze
Ontwerp en materiaalkeuze
Ontwerp en materiaalkeuze
Ontwerp en materiaalkeuze

Ontwerp:

Als we onze analoge horloge/klok nog eens goed bekijken, zien we dat de cirkel is verdeeld in 12 * 30° stappen waarvan we weten dat we 63,6 mm nodig hebben voor de LED-Strip. Het moet dus mogelijk zijn om de strip op de een of andere manier rond een buis uit te lijnen. Ik besloot acrylglas te gebruiken, omdat het er mooi uitziet en het mogelijk is om het LED-licht erin in te kapselen en bij elke fout in het glas zal er wat lichtverstrooiing optreden. Dus laten we zeggen: meer onzuiverheden leiden tot meer lichtverstrooiing! Dat is precies wat we willen. Dus pak gerust je graveergereedschap en wees creatief:-)

Als je verwijst naar mijn BoM-lijst en de naam die ik aan de klok heb gegeven, heb ik een zonachtig ontwerp gekozen. Ik heb alle acrylonderdelen van een Duitse verkoper op E-Bay (link voorzien in de BoM). Voor mijn ontwerp je zal nodig hebben:

  • acryl grondplaat, transparant dikte = 6mm, diameter = 300mm
  • acrylaat middenplaat, transparant dikte = 3mm, diameter = 150mm
  • acryl frontplaat, satijn, dikte = 3mm, diameter = 90mm
  • acryl buis, transparant, buitendiameter = 64mm (zal betekenen dat we een beetje moeten tweaken met de LED-strip)
  • acrylaatstaaf, transparant, diameter = 5 mm (dit worden onze balken); Er zijn ook acrylstaven met bubbels erin, ik raad ze aan, maar ik heb ze niet in de buurt.
  • acryl lijm

Elektronica (zie de Fritzing-bestanden):

  • Arduino mini (of vergelijkbaar)
  • 1 adresseerbare LED-strip (12 LED's voor stappen van uur en 5 minuten)
  • 4 adresseerbare LED's (enkele minuten)
  • 2 330 Ohm Weerstanden
  • 1 1000 µF condensator
  • 1 voeding (5V/500mA)
  • een RTC DS-1307 (optioneel!)
  • Bluetooth-module (optioneel! ja, u kunt de tijd instellen via BT en een Android-smartphone)

Als je jezelf afvraagt waarom ik MAX485-chips op mijn BoM heb staan. Het antwoord is, dat ik de klok wil synchroniseren met het domoticasysteem dat ik ga maken (nooit meer een klok op zomertijd hoeven zetten:-P). Dat zal ik in mijn blog beschrijven in de volgende paar weken/maand.

Zoals je hebt gemerkt, zal ik ook proberen om de klok off-grid te krijgen met wat zonnepanelen en een LiPo, maar dat behandel ik niet in deze Instructable, voel je vrij om het zelf te proberen.

Stap 2: Bereid de acrylonderdelen voor

Bereid de acrylonderdelen voor
Bereid de acrylonderdelen voor
Bereid de acrylonderdelen voor
Bereid de acrylonderdelen voor
Bereid de acrylonderdelen voor
Bereid de acrylonderdelen voor

Het gereedschap:

Allereerst is het erg handig als u het DWG-plan afdrukt dat ik heb toegevoegd in de schaal 1: 1. Dit zal u helpen om alle onderdelen uit te lijnen en zal u dienen als een boorplan. Verder heeft u nodig:

  • hobbymes
  • verstekmeter
  • metaalzaag
  • klemmen
  • handboor
  • kan boren, diameter 65mm
  • een set metaalboren
  • een kleine metalen vijl
  • acryl lijm

Laten we beginnen:

Neem de grondplaat en lijn deze uit op het plan, zodat u het middelpunt van de cirkel kunt krijgen. Neem nu je handboor met de blikboor erop gemonteerd en boor (heel langzaam! niet te veel druk!) een gat in het midden van de grondplaat, de buitenste cirkel moet ~ 2-3 mm diep zijn. Dit is om de LED-strip in de grondplaat te laten zakken (LED-strip ~10 mm breed, balken slechts 5 mm in diameter) en om ze uit te lijnen met de balken (zie afbeelding 1).

Nu hebben we de ijzerzaag, de verstekmeter en de acrylbuis nodig. Snijd het gewoon in stukjes. Ik besloot om de behuizing (buis) 40 mm lang te maken (foto 2). Pak nu de ijzerzaag weer vast en maak een kleine sponning aan een kant van de buis, maak het glad met de metalen vijl. Daar komen de draden uit;-) (zie afbeelding 3)

Tijd voor wat lijm…Neem de middelste plaat (d=150mm) en de frontplaat (de gesatineerde). Lijn ze weer uit op de plattegrond, breng wat lijm aan op het midden van de middelste plaat, lijn de frontplaat uit en wacht tot de lijm is licht uitgehard. De lijm die ik heb gebruikt is licht hardend en kan tot 2-3 uur duren, dus misschien wil je een klem gebruiken… (foto 3 en 4)

Doe hetzelfde voor het lijmen van de buis op de grondplaat, zorg ervoor dat de sponning naar de plaat is gericht en ergens is uitgelijnd waar u de eerste LED (12 uur) wilt hebben.

Wacht tot het uitgehard is!

We kunnen nu de 2 delen (bookmatched) op het plan uitlijnen en onze 4 enkele minuutgaten boren (5 mm in diameter of de diameter van de LED die u hebt gekozen; boor het langzaam en niet te veel druk). Boor ongeveer 8-9 mm diep. Pas op, de gesatineerde plaat is erg bros en kan breken als je te diep boort. Je kunt ze nu aan elkaar lijmen of je besluit, zoals ik, een drevel in de grondplaat te snijden en deze met een schroef vast te zetten.

Nogmaals, wacht tot de lijm is uitgehard. Lijn nu de balken uit en lijm ze op de grondplaat. (foto 6)Raad eens… wacht tot de lijm hard is geworden:-)Laten we verder gaan met de elektronica…

Stap 3: Elektronica

Elektronica
Elektronica
Elektronica
Elektronica
Elektronica
Elektronica
Elektronica
Elektronica

Het gereedschap:

  • soldeerbout
  • Soldeerdraad
  • hobbymes
  • een klein stukje prototype PCB
  • geëmailleerde draad of een andere draad die u verkiest
  • hete lijm

Ik heb gekozen voor de enkele LED's. Als je geëmailleerde draad gebruikt, vergeet dan niet om de lak eraf te schrapen voordat je gaat solderen. Daar kun je een hobbymes voor gebruiken. Bedraad ze, zie de afbeelding met de pinout op flikto.de. Merk op dat DOUT op de volgende LED naar DIN gaat! (zie afbeelding 2) Daarna kunt u de ledstrip in 4 elementen knippen met elk 3 leds. Onthoud dat we een LED-strip van 63,6 mm en een buitendiameter van 64 mm van de buis hebben, dus we hebben wat extra lengte nodig om hem precies op de balken uit te lijnen. Sluit hem aan met geëmailleerde draad zoals op afbeelding 4. Ik heb een kleine prototype-PCB gemaakt die zal dienen als een "stroomkabelboom" en zal de componenten voor de LED-strips bevatten (de twee 330 Ohm-weerstanden en de 1000 µF-condensator, afbeelding 7). Zie daarvoor de Fritzing-afbeelding.

Monteer nu de Strip om de buis, lijn de LED's uit met de balken. De eerste Pixel komt overeen met 12 uur. Als je je behuizing hebt omgedraaid, vergeet dan niet dat alles gespiegeld is. Ga tegen de klok in! Gebruik wat hete lijm om het aan de buis te bevestigen. Een kleine druppel voor elk segment is voldoende!

U kunt hetzelfde doen voor de enkele LED's (eventueel gespiegeld), voeg gewoon wat hete lijm toe en druk ze in de voorgeboorde gaten.

Sluit de Arduino nog niet aan, we zullen de hardware-serial gebruiken voor de BT-verbinding, dus controleer eerst de volgende stappen waar ik de software beschrijf.

Stap 4: Coderen

Code
Code
Code
Code

U kunt nu de schets in de Arduino laden. U kunt de LED-strips nu ook bedraden. Sluit de BT-module niet aan!!! We willen eerst de code bekijken, je moet weten waar je verschillende dingen kunt aanpassen …

Download de Arduino IDE en de bibliotheken. Arduino IDE, AdafruitNeoPixel, Time, DS1307RTC

Installeer de IDE en plaats de bibliotheken in de bibliotheekmap. Open het bijgevoegde INO-bestand en upload het naar je arduino. De hier beschreven code is hetzelfde, maar met aanvullende opmerkingen! Als je alles goed hebt gedaan, kun je nu de "bootanimatie" zien. Het is mogelijk om de tijd via de seriële monitor in te stellen. Typ gewoon @"uur"/"min"/"sec", bijv. @10/33/00 (10:33).

Voel je vrij om met de code te spelen… Hier zal ik je een korte beschrijving van de code geven (Setup zonder RTC!)

DEFINITIES:

#define PIN 6 //Hour LED Strip #define MINPIN 5 //Singelminute LED #define NUMPIXELS 12 //Aantal pixels voor uur #define MINNUMPIXELS 4 //Aantal pixels voor enkele minuut #define BAUDRATE 115200 //Baudrate, moet overeenkomen de baudrate van BT-module #define utch '@' //start BYTE van TimeSync

int tijdset = 0; //vlag om op te slaan als de tijd is ingesteld na bootint delayval = 20; // vertraging voor vervagende animatie int clocktimer = 10000; //time refresh int timebright = 250; // helderheid van uur Strip int mtimebright = 50; // helderheid van singelminint initialiseren = 0; //vlag om de clearpixels-functie aan te roepen na het opstarten van een uur; int oud uur = 0; // winkel vorige. uur per minuut; int oldamine = 0; // slaat de vorige minuut op voor refreshint asecond; int aday; int per maand; int een jaar; int mmin;tmElements_t tm;

// Setup voor de 2 NeoPixel LED-arrays (NAAM = TYPE (AANTAL PIXELS, WELKE PIN, FORMAT RGB OF GRB, FREQ); Raadpleeg de Adafruit-gids voor meer informatie. Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel minpixels = Adafruit_NeoPixel (MINNUMPIXELS, MINPIN, NEO_RGB + NEO_KHZ800);

OPSTELLING:

ongeldige setup() {

Serieel.begin(BAUDRATE); Draad.begin(); // Initialiseer de strips, allemaal OFFpixels.begin(); minpixels.begin(); pixels.show(); minpixels.show();

//Maak een kleine animatieSerial.println ("SUNRISE"); zonsopkomst(); vertraging (1000); Serial.println ("ZONSONDERGANG"); zonsondergang(); pixels.show(); Serial.println("KLAAR"); }

LUS:

void loop() {// controleer op timesync while (Serial.available() >0){ char c = Serial.read(); if(c == utch) //als er een @ op de regel staat, lees dan de komende bytes / ints{ readtime(); } } // initialiseer de LED's, duidelijke opstartanimatie

if (initialiseren == 0){ clearpixels(); initialiseren = 1; }

uur = uur();

aminuut = minuut(); if(timeset == 1 || timeset == 0) // hier kunt u controleren of de tijd is ingesteld, u kunt het programma hier stoppen als Timeset = FALSE, verwijder gewoon "|| timeset == 0"!

{

if(oldamin < aminute || oldahour zet alles op OFF, toon nieuwe tijd {clearpixels(); ClockDisplay(); } } }

Geef de klok weer:

void ClockDisplay(){

oldahour = een uur;

oldamine = een minuut; int xuur, xmin;

if (ahour >= 12){ xhour = ahour-12; // we hebben maar 12 LED's voor 24-uurs weergave} else { xhour = ahour; } // schaal het in stappen van 5 minuten xmin = (aminute / 5); if(oldamine < aminuut){ oldamine = aminuut; duidelijke pixels(); } // neem de rest van de deling dor de singelmin LED mmin = (aminuut % 5); // modulo-operator bijv. 24% 5 = 4! erg handig:-Ppixels.setBrightness(timebright); pixels.setPixelColor(xmin, pixels. Color(5, 125, 255)); // je kunt de kleuren hier veranderen! speel rond!pixels.setPixelColor(xuur, pixels. Color(255, 50, 0)); pixels.show();

// toon de enkele minsfor (int m=0; m

minpixels.setBrightness(mtimebright); minpixels.setPixelColor(m, pixels. Color(255, 255, 0)); minpixels.show(); } }Lees en verwerk TIME-informatie van Serial

void readtime() // als we de leidende "@" al hebben, verwerk dan de komende gegevens en sla de tijd op voor de TIME Lib{

ahour = Serial.parseInt(); aminute = Serial.parseInt(); asecond = Serial.parseInt(); aday = Serial.parseInt(); amonth = Serial.parseInt(); een jaar = Serial.parseInt(); Serial.println("TIMESET"); Serial.print(uur); Serieel.print(": "); Serial.println(een minuut); setTime (een uur, een minuut, een seconde, een dag, een maand, een jaar); }

Wis alles

void clearpixels() // zet elke afzonderlijke PIXEL uit om het scherm te vernieuwen{

pixels.begin(); minpixels.begin(); for(int i=0;ipixels.setPixelColor(i, pixels. Color(0, 0, 0)); minpixels.setPixelColor(i, pixels. Color(0, 0, 0)); pixels.show(); minpixels.laten zien(); } }

Stap 5: De Android APP en BT-verbinding

De Android APP en BT-verbinding
De Android APP en BT-verbinding
De Android APP en BT-verbinding
De Android APP en BT-verbinding
De Android APP en BT-verbinding
De Android APP en BT-verbinding

Als u succesvol was met de vorige stappen, kunt u nu uw BT-module aansluiten. (ik hoop dat je ervoor hebt gezorgd dat de baudrates overeenkomen). vergeet niet de TX & RX lijnen over te steken:-)

Download en installeer de app, koppel met uw BT-dongle, start de app, maak verbinding met de dongle en synchroniseer de tijd met uw mobiel. De APP doet in principe hetzelfde als voorheen. Het stuurt gewoon @uu/mm/ss/dd/mm/YYYY gegenereerd op basis van de systeemtijd. Ik heb ook het APPInventor AIA-bestand verstrekt en een uitleg over de volgende stap (voor degenen die geïnteresseerd zijn).

Stap 6: APPInventor

APPInventor
APPInventor
APPInventor
APPInventor

APP Inventor is vrij eenvoudig te gebruiken en de moeite waard voor zo'n eenvoudig programma.

Als u een nieuw project maakt, bevindt u zich in het DESIGNER-scherm. (afbeelding 1) Hier voegen we tabellen, knoppen, sensoren en andere elementen toe voor verder gebruik. In ons geval hebben we nodig:

  • een tabel (om alle elementen uit te lijnen)
  • een lijstkiezer (voor selectie van het BT-apparaat waarmee we verbinding maken)
  • een knop (om de TIME over BT af te vuren)
  • sommige labels (weergave van de werkelijke tijd en datum)
  • de kloksensor (ververs de tijd)
  • de bluetooth-clientsensor (connectiviteit)

Ze toevoegen is net zo eenvoudig als slepen en neerzetten! Op Afbeelding 2 ziet u een overzicht van de "APP" in het BLOKKEN scherm. Nou, dat is eigenlijk waar alle "magie" gebeurt. Bovenaan heb ik enkele variabelen gemaakt om de tijd en datum op te slaan. Het eerste blok linksboven initialiseert het lijstkiezerelement met de lijst met gekoppelde BT-apparaten. tweede blok beslissen we wat te doen met het eerder gekozen element. Welnu, we willen er verbinding mee maken.

Als je het volgende blok van dichtbij bekijkt, kun je zien dat we, als de BT-status "verbonden" is, het BT-bericht genereren. Het is hetzelfde dat we eerder in de SerialMonitor hebben getypt. Het laatste blok aan de linkerkant geeft ons de voorloopnullen om de tijd weer te geven (bijv. 01:08). Aan de rechterkant kun je ons laatste blok vinden, daar gebruiken we het klokelement. Hier werken we de variabelen bij en voegen ze samen met de cijfersprocedure, dit gebeurt elke 1000ms (standaardinstelling, verander het in de ontwerpermodus) en toon de bijgewerkte waarden met het label. Dat is slechts een korte beschrijving, maar APPInventor is echt zo eenvoudig als dat:-) Misschien is er iemand in de gemeenschap die software wil schrijven voor iOS of WindowsPhone. (zou geweldig zijn)

Ik hoop dat je mijn Instructable leuk vond! Veel plezier met je nieuwe wandklok! Misschien wil je het cadeau doen aan iemand van wie je houdt (het is kerstseizoen):-)

En als er vragen zijn, stel ze gerust!

Met vriendelijke groeten en prettige kerstdagen.

Aanbevolen: