Steampunk jauge Moonphase horloge (8 / 11 étapes)

Etape 8: Utilisez le CCF pour piloter les jauges

Maintenant nous avons besoin lire les données du CCF et les convertir en nombres qui peuvent être envoyés aux jauges pour afficher l’heure (et la date!). C’est effectivement très facile en raison de la grande routine pour le DS3231 de l’étape 6. La routine déjà convertit les données BCD le 3231 décimal donc tout ce que nous devons faire est de multiplier les heures de 10 et les minutes et les secondes par 4 (dans le cas de mon jauges, vôtre peut varier) et envoyer les nouvelles valeurs pwm aux jauges.
Il faut un code pour faire progresser les minutes et les heures et retourner les jauges à zéro lorsqu’ils max. C’est vraiment simple, mais je suis tombé sur un petit problème. Lorsque les aiguilles reviennent à zéro depuis leur voyage complet, ils le font avec assez de force. Assez pour faire une préoccupation de bruit et de la cause en cliquant sur la longévité des mouvements d’Arsonval dans les jauges. Je voulais mettre en place une routine retour douce dans le logiciel qui semblait à première vue assez facile à faire.  J’ai finalement obtenir cela fonctionne et je vais vous montrer comment. Certains d'entre vous, les gourous de l’électronique pourraient être en mesure de déterminer une solution matérielle pour ce (frais de cap et les drains dans le cadre d’une diode résistance lorsque le PWM passe à zéro ou quelque chose). Dans l’affirmative, s’il vous plaît laissez-moi savoir. J’ai pris le chemin d’accès du logiciel et n’avez pas dépensé tout plus de temps à réfléchir à ce sujet.

Une petite vidéo du code ci-dessous en cours d’exécution. La trace de la O'scope est l’onde carrée du CCF. Avis chaque fois qu’il se lève, les incréments de main de secondes.

Voici un programme qui lit le CCF issu d’une interruption générée par l’onde carrée CCF attaché à la broche 2 de l’arduino et générer la valeur de secondes sur la broche 5 (PWM).
Cette routine ne comprend pas le retour de l’aiguille.

#include < Wire.h >

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

secondes de l’octet, minutes, heures, jour, date, mois, année ;
secpos octet ;
jour de semaine Char [4] ;
Boolean int_tick ;
tMSB octet, tLSB ;
float temp3231 ;

void setup()
{
Wire.Begin() ;
Serial.Begin(9600) ;
Wire.beginTransmission(DS3231_I2C_ADDRESS) ; 104 est l’adresse du périphérique DS3231
Wire.Send(0x0E) ; //
Wire.Send(B00000000) ;
Wire.endTransmission() ;
pinMode (int_pin, entrée) ;
digitalWrite(2,HIGH) ; Montez sur l’arrachage de la broche 2
attachInterrupt (0, int0handler, RISING) ; fixer l’interruption zéro à la broche 2 et appeler la fonction int0handler chaque fois que la broche 2 voit une tension croissante
secpos = 0 ;
}

void loop()
{

Si {(int_tick)
updategauge() ;
}

watchConsole() ;  utilisé pour modifier l’heure et la date

}

void int0handler() {}
int_tick = 1 ;
}

void updategauge() {}
Serial.println("int") ;
get3231Date() ;
Serial.Print(weekDay) ; Serial.Print (",") ; Serial.Print (mois, DEC) ; Serial.Print("/") ; Serial.Print (date, DEC) ; Serial.Print("/") ; Serial.Print (année, DEC) ; Serial.Print ("-") ;
Serial.Print (heures, DEC) ; Serial.Print(":") ; Serial.Print (minutes, DEC) ; Serial.Print(":") ; Serial.Print (secondes, DEC) ;

Serial.Print ("température:") ; Serial.println(get3231Temp()) ;
secpos = secondes * 4 ;
Si (secpos > = 240) secpos = 0 ; Ceci renverra la deuxième aiguille à la fin du voyage
analogWrite (gauge_pin, secpos) ;
int_tick = 0 ;  réinitialiser l’indicateur de tique int
}

Convertir des nombres décimaux normales en décimale codée en binaire
decToBcd(byte val) octets
{
Return ((val/10 * 16) + (10 % de val)) ;
}

Sub watchConsole()
{
Si (Serial.available()) {/ / Look de char dans la file d’attente de série et les processus si trouvé
Si (Serial.read() == 84) {//If command = « T » régler la Date
set3231Date() ;
get3231Date() ;
Serial.println("") ;
}
}
}

Sub set3231Date()
{
T(sec)(min)(Hour)(DayOfWeek)(DayOfMonth)(month)(Year)
T(00-59)(00-59)(00-23)(1-7)(01-31)(01-12)(00-99)
Exemple: 2 février 09 @ 19:57:11 pour le 3e jour de la semaine -> T1157193020209

secondes = (octets) ((Serial.read()-48) * 10 + (Serial.read() - 48)) ; Utilisation de mathématique de coulée et ascii de type (octet) pour atteindre le résultat.
minutes = (octets) ((Serial.read()-48) * 10 + (Serial.read() - 48)) ;
heures = (octets) ((Serial.read()-48) * 10 + (Serial.read() - 48)) ;
jour = (octets) (Serial.read() - 48) ;
Date = (octets) ((Serial.read()-48) * 10 + (Serial.read() - 48)) ;
mois = (octets) ((Serial.read()-48) * 10 + (Serial.read() - 48)) ;
an = (octets) ((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() ;
}

Sub get3231Date()
{
Envoyer demande de recevoir des données à partir de Registre 0
Wire.beginTransmission(DS3231_I2C_ADDRESS) ; 104 est l’adresse du périphérique DS3231
Wire.Send(0x00) ; commencer au registre 0
Wire.endTransmission() ;
Wire.requestFrom (DS3231_I2C_ADDRESS, 7) ; demande sept octets

{if(Wire.available())}
secondes = Wire.receive() ; Obtenez secondes
minutes = Wire.receive() ; obtenir des minutes
heures = Wire.receive() ;   Obtenez heures
jour = Wire.receive() ;
Date = Wire.receive() ;
mois = Wire.receive() ; mois de Temp
an = Wire.receive() ;

secondes = (((seconds & B11110000) >> 4) * 10 + (secondes & B00001111)) ; convertir BCD décimal
minutes = (((minutes & B11110000) >> 4) * 10 + (minutes & B00001111)) ; convertir BCD décimal
heures = (((hours & B00110000) >> 4) * 10 + (heures & B00001111)) ; convertir BCD décimal (suppose que le mode 24 heures)
jour = (jour & B00000111) ; 1-7
Date = (((date & B00110000) >> 4) * 10 + (date & B00001111)) ; 1-31
mois = (((month & B00010000) >> 4) * 10 + (mois & B00001111)) ; msb7 est le débordement de siècle
an = (((year & B11110000) >> 4) * 10 + (an & B00001111)) ;
}
else {}
oh noes, aucune donnée !
}

commutateur (jour) {}
cas 1 :
strcpy (jours de la semaine, « Le soleil ») ;
rupture ;
cas 2 :
strcpy (jours de la semaine, « Mon ») ;
rupture ;
cas 3 :
strcpy (jours de la semaine, « Mar ») ;
rupture ;
cas 4 :
strcpy (jours de la semaine, "mercredi") ;
rupture ;
cas no 5 :
strcpy (jours de la semaine, « Jeu ») ;
rupture ;
cas 6 :
strcpy (jours de la semaine, « Fri ») ;
rupture ;
cas 7 :
strcpy (jours de la semaine, "assis") ;
rupture ;
}
}

flotteur get3231Temp()
{
registres de Temp (11h - 12h) obtenir mis à jour automatiquement chaque 64 s
Wire.beginTransmission(DS3231_I2C_ADDRESS) ;
Wire.Send(0x11) ;
Wire.endTransmission() ;
Wire.requestFrom (DS3231_I2C_ADDRESS, 2) ;

{if(Wire.available())}
tMSB = Wire.receive() ; 2 compléter la partie int
tLSB = Wire.receive() ; partie de la fraction

temp3231 = (tMSB & B01111111) ; 2 math sur Tmsb
temp3231 += ((tLSB >> 6) * 0,25) ; seulement se soucient de bits 7 & 8
}
else {}
oh noes, aucune donnée !
}

Return temp3231 ;
}

Articles Liés

Steampunk, jauge analogique Moonphase horloge

Steampunk, jauge analogique Moonphase horloge

Découvrez la photo instructable pour cette horloge. J'inclus une courte vidéo et détails sur la construction, composants et logiciels. A bientôt !Une horloge que j'ai construit pour un de mes amis dans le style steampunk ; réalisé avec une vieille bo
Miroir de Steampunk / lumière / horloge

Miroir de Steampunk / lumière / horloge

il s'agit d'un projet, j'ai travaillé sur les dernières semaines, elle est faite majoritairement de Morado (bois de rose bolivien)mais j'ai aussi utilisé quelques gauche sur cerisier et noyer, les bulbes peu d'accent, j'ai trouvé dans un magasin de s
Nixie Tube horloge n ° 2

Nixie Tube horloge n ° 2

En février 2015, j'ai construit une énorme lampe Steampunk avec une horloge de Tube Nixie IN-12 a pour l'anniversaire de ma fille (photo dans la section électronique et maintenant une Instructable!) et depuis lors, j'ai voulu faire une autre horloge
L’incroyable Plasma Binary Clock, style Steampunk.

L’incroyable Plasma Binary Clock, style Steampunk.

Quelques mois auparavant, M. Longwinters m'envoyer quelques ampoules plasma (NEON) wit enroulements E-27 européen.M. Junophor m'a offert une grande paix de bois acajou. J'ai donc dû le matériel de base pour une horloge binaire steampunked.L'horloge e
Il est grand temps ! regarder.

Il est grand temps ! regarder.

Au début, il y avait l'univers mais le temps n'avait pas été inventé, pas assez de temps encore. Puis l'univers inventé les premiers humains (Homo Originalis), mais le temps n'avait pas encore été inventé. Cependant, évolution favorise ceux qui n'a p
Horloge LED steampunk

Horloge LED steampunk

Je me suis inspiré pour créer une horloge steampunk il y a quelques temps après en parcourant beaucoup de Instructables sur différentes horloges. Il a commencé avec une idée assez vague de ce que je voulais accomplir et il a vraiment évolué comme je
Jauge de steampunk fait maison (entièrement fonctionnel) à partir de zéro

Jauge de steampunk fait maison (entièrement fonctionnel) à partir de zéro

Salut, ceci est un aperçu rapide d'un indicateur/jauge analogique électrique que j'ai fais pour un projet d'horloge Steampunk.Voici les photos iPhone rapide du produit presque fini. J'ai utilisé Papier imprimante (crème de couleur, pour personnes âgé
Steampunk VFD horloge

Steampunk VFD horloge

SalutVoici une horloge Steampunk avec des Tubes de VFD. J'ai utilisé un Kit de bricolage de Günther Rother, Allemagne. Beaucoup salue ici lui;)Etape 1: Le commencement Nous avons besoin :Tubes de cuivre 60mm et 8mmDivise des lampes en laitonUn Kit de
Horloge à l’aide de l’IDE Arduino connecté à Internet de ESP8266 de Steampunk

Horloge à l’aide de l’IDE Arduino connecté à Internet de ESP8266 de Steampunk

Ce que vous obtenez quand un anneau de NeoPixel, un Comité d'Arduino Wifi peu coûteux et un coupe au laser marche dans un Steam Punk Saloon ?Un Steampunk mode connecté à Internet conçu d'horloge à l'aide de la puce ESP8266 et l'IDE Arduino bien sûr !
Théâtre d’horloge steampunk Prop

Théâtre d’horloge steampunk Prop

Cette horloge de style steampunk a été construite pour une adaptation théâtrale de tour du monde en 80 jours, produites par Tous pour One Productions en avril et en mai de 2015. L'horloge mesure 5 pieds de diamètre et les fonctionnalités des contrôle
Piston de rouage d’horloge (Steampunk)

Piston de rouage d’horloge (Steampunk)

faire sortir une boîte à cigares, les pièces de l'horloge et balle usé votre piston de steampunk très propres coquilles ! Recyclez vos vieilles pièces horloge pour faire un engin qui alimente elle-même !Étape 1: Horloge Guts D'abord au loin, trouver
Steampunk Pocket-horloge

Steampunk Pocket-horloge

Bonjour tout le mondeBonnes choses ne doivent pas toujours être compliqués :Bloquer à ce gadget de steampunk petit pour votre poche. C'est le doe en deux heures (après l'obtention de l'idée;-))Étape 1: Comment faire : j'ai juste pris une vieille affa
Horloge steampunk

Horloge steampunk

tout en explorant le vaste labyrinthe d'IKEA (le plus grand du Canada: P), j'ai découvert l'horloge « Rusch », un élément de bon marché qui crie juste « modifier moi!! ».Eh bien, M. Clock, vous obtiendrez votre souhait.La chose gentille au sujet de c
Fabrication RetroTech : Un Steampunk / horloge / engins Font

Fabrication RetroTech : Un Steampunk / horloge / engins Font

Vous souhaitez ajouter une sensation RetroTech à votre gravure laser ou le travail graphique ? Lire la suite !Je fais beaucoup de laser gravure sur l'Epilog laser graveur trilames à TechShop SJ (trois lasers de 60W!) et je souhaite utiliser des polic