Steampunk analoge Gauge Moonphase klok (8 / 11 stap)

Stap 8: Met behulp van de RTC om te rijden de meters


Nu moeten we de gegevens lezen van de RTC en het omzetten in getallen die kunnen worden verzonden naar de meters weer te geven van de (datum en tijd!). Dit is eigenlijk werkelijk eenvoudig vanwege de grote routine voor de DS3231 van stap 6. De routine al converteert de BCD-gegevens van de 3231 naar decimaal dus alles wat we moeten doen is de uren door 10, en de minuten en seconden door 4 vermenigvuldigen (in het geval van mijn manometers, jou kan variëren) en de nieuwe waarden van de pwm verzenden de meters.
We moeten ook wat code de minuten en uren te bevorderen en om terug te keren de meters tot nul wanneer ze max. Dit is werkelijk ongecompliceerd, maar ik liep in een klein probleem. Wanneer de naalden naar nul uit hun volledige reis terugkeert, doen ze vrij krachtig. Genoeg om een door te klikken op lawaai en oorzaak bezorgdheid over de levensduur van de d'Arsonval bewegingen in de meters. Ik wilde een zachte return routine te implementeren in de software die op het eerste gezicht leek vrij gemakkelijk te doen.  Ik uiteindelijk krijgen om te werken en ik zal u hoe tonen. Sommigen van u elektronica goeroes mogelijk om erachter te komen een hardwareoplossing voor deze (GLB-kosten en riool door een diode weerstand regeling wanneer de PWM op nul of iets gaat). Zo ja, laat het me weten. Ik nam het pad van de software, en een meer tijd te denken over het nog niet uitgegeven.

Een kleine video van de code hieronder uitvoeren. De O'scope-trace is de blokgolf van de RTC. Aankondiging telkens ontspringt, de seconden hand stappen.

Hier is een programma dat de RTC op basis van een interrupt gegenereerd door het RTC blokgolf gekoppeld lezen zal aan 2 van de arduino pin en output van de waarde van de seconden op pin 5 (PWM).
Deze routine omvat niet de zachte return voor de naald.

#include < Wire.h >

#define DS3231_I2C_ADDRESS 104
#define int_pin 2
#define gauge_pin 5

byte seconden, minuten, uur, dag, datum, maand, jaar;
byte secpos;
char weekdag [4];
Booleaanse int_tick;
byte tMSB, tLSB;
float temp3231;

VOID Setup
{
Wire.begin();
Serial.begin(9600);
Wire.beginTransmission(DS3231_I2C_ADDRESS); 104 is DS3231 apparaatadres
Wire.send(0x0E); //
Wire.send(B00000000);
Wire.endTransmission();
pinMode (int_pin, INPUT);
digitalWrite(2,HIGH); opdagen op interne trekken van pin 2
attachInterrupt (0, int0handler, stijgt); interrupt nul sluit aan op pin 2 en de functie int0handler aanroepen wanneer pin 2 een stijgende spanning ziet
secpos = 0;
}

void loop
{

Als (int_tick) {}
updategauge();
}

watchConsole();  gebruikt de tijd en datum wijzigen

}

ongeldig int0handler() {}
int_tick = 1;
}

ongeldig updategauge() {}
Serial.println("int");
get3231Date();
Serial.Print(weekDay); Serial.Print (","); Serial.Print (maand, DEC); Serial.Print("/"); Serial.Print (datum, DEC); Serial.Print("/"); Serial.Print (jaar, DEC); Serial.Print ("-");
Serial.Print (uren, DEC); Serial.Print(":"); Serial.Print (minuten, DEC); Serial.Print(":"); Serial.Print (seconden, DEC);

Serial.Print ("temperatuur:"); Serial.println(get3231Temp());
secpos = seconden * 4;
Als (secpos > = 240) secpos = 0; Dit geeft de tweede naald aan einde van de reis
analogWrite (gauge_pin, secpos);
int_tick = 0;  Reset de int teek vlag
}

Normale decimale getallen omzetten in binary coded decimal
byte decToBcd(byte val)
{
retourneren ((val/10 * 16) + (val % 10));
}

VOID watchConsole()
{
Als (Serial.available()) {/ / zoeken char in seriële wachtrij en proces als gevonden
Als (Serial.read() == 84) {//If command = "T" instellen datum
set3231Date();
get3231Date();
Serial.println("");
}
}
}

VOID set3231Date()
{
T(SEC)(min)(hour)(dayOfWeek)(dayOfMonth)(month)(Year)
T(00-59)(00-59)(00-23)(1-7)(01-31)(01-12)(00-99)
Voorbeeld: 02-Feb-09 @ 19:57:11 voor de 3e dag van de week -> T1157193020209

seconden (byte) = ((Serial.read()-48) * 10 + (Serial.read() - 48)); Gebruik van (byte) type gieten en ASCII-wiskunde om resultaat te bereiken.
minuten (byte) = ((Serial.read()-48) * 10 + (Serial.read() - 48));
uren (byte) = ((Serial.read()-48) * 10 + (Serial.read() - 48));
dag = (byte) (Serial.read() - 48);
datum (byte) = ((Serial.read()-48) * 10 + (Serial.read() - 48));
maand (byte) = ((Serial.read()-48) * 10 + (Serial.read() - 48));
jaar (byte) = ((Serial.read()-48) * 10 + (Serial.read() - 48));
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.send(0x00);
Wire.send(decToBcd(seconds));
Wire.send(decToBcd(minutes));
Wire.send(decToBcd(hours));
Wire.send(decToBcd(Day));
Wire.send(decToBcd(date));
Wire.send(decToBcd(month));
Wire.send(decToBcd(Year));
Wire.endTransmission();
}

VOID get3231Date()
{
verzoek tot het ontvangen van gegevens beginnen bij register 0
Wire.beginTransmission(DS3231_I2C_ADDRESS); 104 is DS3231 apparaatadres
Wire.send(0x00); Start op registreren 0
Wire.endTransmission();
Wire.requestFrom (DS3231_I2C_ADDRESS, 7); zeven bytes voor aanvragen

if(Wire.available()) {}
seconden = Wire.receive(); krijgen seconds
minuten = Wire.receive(); Ontvang minuten
uren = Wire.receive();   uren krijgen
dag = Wire.receive();
datum = Wire.receive();
maand = Wire.receive(); Temp maand
jaar = Wire.receive();

seconden = (((seconds & B11110000) >> 4) * 10 + (seconden & B00001111)); BCD converteren naar een decimaal getal
minuten = (((minutes & B11110000) >> 4) * 10 + (minuten & B00001111)); BCD converteren naar een decimaal getal
uren = (((hours & B00110000) >> 4) * 10 + (uren & B00001111)); BCD converteren naar een decimaal getal (neem aan 24-uurs modus)
dag = (dag & B00000111); 1-7
datum = (((date & B00110000) >> 4) * 10 + (datum & B00001111)); 1-31
maand = (((month & B00010000) >> 4) * 10 + (maand & B00001111)); msb7 is een overloop van de eeuw
jaar = (((year & B11110000) >> 4) * 10 + (jaar & B00001111));
}
else {}
Oh noes, geen gegevens!
}

schakelaar (dag) {}
Case 1:
strcpy (weekdag, "Sun");
breken;
Case 2:
strcpy (weekdag, "Ma");
breken;
Case 3:
strcpy (weekdag, "Di");
breken;
Case 4:
strcpy (weekdag, "wo");
breken;
Case 5:
strcpy (weekdag, "Do");
breken;
Case 6:
strcpy (weekdag, "VR");
breken;
Case 7:
strcpy (weekdag, "za");
breken;
}
}

float get3231Temp()
{
tijdelijke registers (11u - 12u) krijgen bijgewerkt automatisch elke 64s
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.send(0x11);
Wire.endTransmission();
Wire.requestFrom (DS3231_I2C_ADDRESS, 2);

if(Wire.available()) {}
tMSB = Wire.receive(); 2 de aanvulling int gedeelte
tLSB = Wire.receive(); breuk, deel

temp3231 = (tMSB & B01111111); 2's wiskunde op Tmsb
temp3231 += ((tLSB >> 6) * 0,25); alleen de zorg over bits 7 & 8
}
else {}
Oh noes, geen gegevens!
}

Return temp3231;
}

Gerelateerde Artikelen

Steampunk ESP8266 Internet verbonden klok met behulp van de Arduino IDE

Steampunk ESP8266 Internet verbonden klok met behulp van de Arduino IDE

Wat u krijgt wanneer een ring NeoPixel, een goedkope Arduino Wifi aan boord en een laser cutter in een stoom-Punk-Sedan lopen?Een modieuze Steampunk ontworpen Internet verbonden klok met behulp van de ESP8266 chip en de Arduino IDE natuurlijk!Hier is
STEAMPUNK stoom GAUGE, aangedreven door ARDUINO

STEAMPUNK stoom GAUGE, aangedreven door ARDUINO

dit is opgericht om één of ander-oogsuikergoed voor mijn keuken. Ik wilde iets unieks voor een speciale lege ruimte op mijn muur, en het toevoegen van beweging, BLINKIE lichten en interessante mechanische "guts" maakte het zelfs beter.Uiteindeli
Steampunk LED klok

Steampunk LED klok

Ik werd geïnspireerd om het maken van een steampunk klok een tijdje geleden na het doorbladeren van een heleboel Instructables op verschillende klokken. Het begon met een enigszins vaag idee van wat ik wilde bereiken en het echt geëvolueerd als ik he
Steampunk Table Clock

Steampunk Table Clock

Enige tijd geleden heb ik een steampunk-tabel hebt ontworpen klok dat ziet eruit als een miniatuur stoommachine maar ik niet kunnen voltooien van de bouw van het tot nu toe vanwege de complexe structuur en vele delen. Ik had ook geproduceerd sommige
Analoge Discovery PWM en digitale IO controle wel LabVIEW

Analoge Discovery PWM en digitale IO controle wel LabVIEW

Het doel van dit project is om je te leren hoe u kunt besturen van de ontdekking van de analoge met LabVIEW. Met name zal dit project aantonen hoe de controle van de Analog Discovery's digitale IO en PWM pinnen. Dit project richt zich voornamelijk op
Wandklok

Wandklok

Hi guys, vandaag zullen we leren sommige ontwerpen vaardigheden om awesome wand klokken. In dit project we InkScape gebruikt te ontwerpen onze Wandklok en een laser cutter machine zal gebruiken om te snijden.Opmerking: Dit project werd gemaakt door (
Touch scherm koffietafel DIY met 32-inch TV en low-cost CCD sensor

Touch scherm koffietafel DIY met 32-inch TV en low-cost CCD sensor

UPDATE 04/04/2016: Multipoint software + Emulating NES video/foto's + OPTION_7 punt en klik + snelheidstest optie videoUPDATE 24/03/2016: CCD sensor reverse Engineering + met behulp van 2 CCD sensoren Laser Gravure vectorbestanden + Retropie spelenHa
RS485 Seriële communicatie tussen Arduino Mega en Arduino Nano met Visuino

RS485 Seriële communicatie tussen Arduino Mega en Arduino Nano met Visuino

Soms moeten we aansluiten Arduino boards Arduino boards ligt ver weg van elkaar. De RS485 is een zeer handige manier om te verbinden de planken met slechts 2 draden, en kan werken tot een afstand van 1200 m (4000 ft). Het maakt het ook mogelijk meerd
Model vliegen: Perfectioneren de Roll

Model vliegen: Perfectioneren de Roll

oorspronkelijk een artikel uit de RCM & E Magazine Peter Rondel praat ons door het uitvoeren van een spectaculaire roll met een model vliegtuig.Het broodje is een heel mooi manoeuvre die vele variaties heeft, en perfect standaardinteracties is een he
It's about time! horloge.

It's about time! horloge.

In den beginne was er het universum maar tijd niet had uitgevonden-niet genoeg tijd nog geweest. Dan het universum de uitvinder van de eerste mens (Homo Originalis) maar tijd nog steeds niet had uitgevonden. Evolutie begunstigde echter degenen die ni
COMPACT en robuust geautomatiseerde landbouw REMOTE

COMPACT en robuust geautomatiseerde landbouw REMOTE

Heya jongens... Deze hier is interessant en een van de cruciale projecten die we tot nu toe hebben gedaan. Het maakt gebruik van een breed scala en coolste van apparaten. We hebben opgeofferd vele een nachten slaap, bunked uur van klassen en gezwoegd
Expeditie licht

Expeditie licht

Hi all,Ik Toon u mijn zeer kleine expeditie licht.Ik gebruik hetzelfde circuit, zoals ik u in mijn Steampunk Plasma lamp met klok Gear weergeven.Als u wilt dat je kunt zeggen dat het is alleen een Mod maar ik denk dat het een volledig ander project.A
Controle van uw Robot met behulp van een Wii Nunchuck (en een Arduino)

Controle van uw Robot met behulp van een Wii Nunchuck (en een Arduino)

na het dragen van mezelf spelen van Wii Boksen, ik kreeg aan het denken zou het niet geweldig als ik zou kunnen dit gebruiken om te controleren mijn robot, (op zoek naar mijn linkerhand).Op zoek rond het internet vond ik een schare van mensen die soo
Eenvoudige LED-schakeling op de goedkope

Eenvoudige LED-schakeling op de goedkope

een kort overzicht video:Ik nodig had om 15 eenvoudige circuits met een licht, een batterij en een schakelaar die gemakkelijk kan worden gemonteerd en gedemonteerd meerdere keren voor een Cub Scout camp activiteit te maken. Het licht moet helder geno