Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

horloge IV9 Numitron DIY la plus simple avec Arduino

Composants et fournitures

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ±5 ppm, horloge temps réel I2C
× 1
registre à décalage TPIC6C595
× 4
Tube IV9 Numitron
× 4
LED (générique)
× 2
Condensateur 100 nF
× 4
1N4007 – Diode haute tension et courant nominal élevé
× 2
Interrupteur à glissière
× 1
Résistance 1k ohm
× 1

Outils et machines nécessaires

Fer à souder (générique)
Fil à souder, sans plomb

Applications et services en ligne

Arduino IDE

À propos de ce projet

Cette fois, je vais vous montrer comment faire une belle horloge à tubes Numitron de style rétro. En plus de l'heure correcte, l'appareil affiche brièvement la date, l'année et la température actuelle toutes les 30 secondes.

J'ai eu l'idée de faire cette montre à partir de la page Github donnée :https://github.com/theremotheman/simple_numitron_clock_with_4_shift_registers_and_rtc3231.

J'ai d'abord fait le projet selon les instructions sur le site et j'ai trouvé qu'il contenait de nombreux défauts.

Voici à quoi ressemblait le premier prototype avec 74HC595

Pour le CI 74HC595 Le courant maximum total selon la fiche technique est de 70 milliampères, ce qui dans ce cas est plusieurs fois dépassé (environ 160 milliampères pour le chiffre 8), de sorte qu'au bout d'un certain temps le CI surchauffe et ne fonctionne pas correctement. Un autre manque est qu'il y a trop de retards dans la boucle de code, donc le temps n'est lu qu'une fois toutes les 60 secondes. Sur la photo, vous pouvez voir l'horloge finie fabriquée principalement selon les instructions de la page ci-dessus. Au début, cela fonctionne tout à fait normalement, mais après un certain temps, des segments aléatoires sont activés et les IC-s, les numitrons ou le microcontrôleur peuvent brûler très facilement. Dans le premier cas, le problème a été résolu en utilisant TPIC6C595 IC au lieu de 74HC595, qui est prévu pour des courants plus importants. Il faut également veiller à ce que ces deux circuits intégrés ne soient pas compatibles avec les broches.

-------------------------------------------------- --------------------------------

https://www.pcbgogo.com/promo/from_MirkoPavleskiMK

-------------------------------------------------- ---------------------------------

Et le nouveau code a été créé en utilisant millis () au lieu de la fonction delay (), donc maintenant l'horloge en temps réel est lue en permanence. J'ai également ajouté un interrupteur qui modifie l'intensité lumineuse des numitrons, et donc la durée de vie. Comme vous pouvez le voir, l'appareil est relativement simple à construire et je pense que c'est la façon la plus simple de fabriquer une horloge à tube. Les Numitrons sont peu coûteux, faciles à obtenir et n'utilisent pas d'alimentation haute tension supplémentaire.

Seuls quelques composants sont nécessaires pour fabriquer cette horloge :

- Quatre tubes Numitron IV9

- Quatre circuits intégrés TPIC6C595

- Microcontrôleur Arduino

- Module horloge temps réel DS3231

- Deux LED pendant des secondes

- Commutateur

- et quatre condensateurs de découplage

Le module temps réel contient également un thermomètre, donc pour un affichage plus précis de la température, il est situé à l'extérieur du boîtier, protégé par un grillage. Premièrement, il est souhaitable de synchroniser l'horloge temps réel avec l'horloge du PC, et nous le faisons à l'aide de la bibliothèque DS1307RTC. Ensuite, nous téléchargeons le code et avec cela l'appareil est prêt. Il reste à modifier le code pour pouvoir régler l'heure à l'aide de boutons et ce sera dans la prochaine période en tant que mise à jour du projet.

Enfin, l'horloge est montée dans une boîte appropriée et constitue une belle décoration dans chaque vitrine.

Code

  • Code Arduino
Code ArduinoC/C++
#include  //rtc avec température pour ds3231RTC_DS3231 rtc ; //définir quel module rtc est utilisé#include  //câblage#include  //time lib#include  //time function#include  //rtc #include #define led 7const int latchPin =13; //latchconst int clockPin =10; //clockconst int dataPin =11; //dataunsigned long previousMillis =0; // stocke la dernière fois que la Led a clignotélong intervalle =30000 ; // intervalle auquel clignoter (millisecondes) non signé long previousMillisDiode =0; // stocke la dernière fois que la Led a clignotélong intervalDiode =500; // intervalle auquel clignoter (millisecondes) const int nums[12] ={ // réglage du tableau d'affichage - selon la documentation :la broche 1 est commune, la broche 2 est un point (inutilisé dans le croquis), le reste doit être connecté aux registres à décalage un par un 0b10111110, //0 0b00000110, //1 0b01111010, //2 0b01101110, //3 0b11000110, //4 0b11101100, //5 0b11111100, //6 0b00001110, //7 0b11111110, //8 0b11101110, // 9 0b11010010, //st. 0b10111000 //celz.};int hour1; //heure premier nombreint heure2; //heure seconde nombreint minute1; //minutes first numberint minute2; //minutes seconde nombreint day1; //day first numberint day2; //jour deuxième nombreint mois1; //mois premier nombreint mois2; //mois deuxième nombreint année1; //année premier nombre - constante 2int année2 ; // deuxième numéro de l'année - constante 0 (vous voulez vivre aussi longtemps pour le changer ?) int year3; //année troisième nombreint année4; //année quatrième nombreint hourDecimal; //analyse décimale de hourint minuteDecimal; //analyse décimale de minuteint dayDecimal; //analyse décimale de dayint monthDecimal; //analyse décimale de monthint year70; //année après unix epochint temp1; //premier numéro de températureint temp2; //seconde température numberint tempDecimal; //analyse décimale de la température (deux premiers nombres) void setup() { pinMode (led,OUTPUT); pinMode(latchPin, SORTIE); //définir les broches à sortir afin que vous puissiez contrôler le registre à décalage pinMode(clockPin, OUTPUT); //définir les broches sur la sortie afin que vous puissiez contrôler le registre à décalage pinMode(dataPin, OUTPUT); //définir les broches sur la sortie afin que vous puissiez contrôler le registre à décalage Serial.begin(9600); // initialise SPI :SPI.begin(); // prenez la broche SS basse pour sélectionner la puce :digitalWrite(clockPin,LOW); }boucle vide() { tmElements_t tm; //nommage à partir de la bibliothèque DS1307RTC RTC.read(tm); // lecture rtc heure/date/année minuteDecimal =tm.Minute / 10; // analyse la sortie pour qu'elle soit lisible (plus courte) en divisant par dix heuresDecimal =tm.Hour / 10 ; // analyse la sortie pour qu'elle soit lisible (plus courte) en divisant par dix dayDecimal =tm.Day / 10 ; // analyse la sortie pour qu'elle soit lisible (plus courte) en divisant par dix moisDecimal =tm.Month / 10 ; // analyse la sortie pour qu'elle soit lisible (plus courte) en divisant par dix year70 =tm.Year - 30 ; // affiche l'année réelle en soustrayant de l'époque unix (1970) hour1 =hourDecimal; //simple comme ça hour2 =tm.Hour - 10 * hourDecimal; //faire des calculs pour afficher uniquement le deuxième nombre à partir de deux chiffres string minute1 =minuteDecimal; // simple minute2 =tm.Minute - 10 * minuteDecimal; //faire des calculs pour afficher uniquement le deuxième nombre à partir de la chaîne de deux chiffres day1 =dayDecimal; //simple day2 =tm.Day - 10 * dayDecimal; //faire des calculs pour afficher uniquement le deuxième nombre à partir d'une chaîne à deux chiffres mois1 =moisDecimal ; //simple mois2 =tm.Mois - 10 * moisDecimal; //faire des calculs pour afficher uniquement le deuxième nombre à partir de la chaîne à deux chiffres year1 =2; //numéro de première année, avez-vous vraiment besoin de changer cela ? vous avez des voitures volantes et etc? année2 =0 ; //numéro de la deuxième année, si vous devez changer cela, vous devriez plutôt jouer avec vos petits-enfants year3 =year70 / 10; // analyse la sortie pour qu'elle soit lisible (plus courte) en divisant par dix year4 =year70 - 10 * year3; //faire des calculs pour afficher uniquement le deuxième nombre à partir de la chaîne à deux chiffres tempDecimal =rtc.getTemperature()/10; // analyse la sortie pour qu'elle soit lisible (plus courte) en divisant par dix temp1 =tempDecimal; // simple temp2 =rtc.getTemperature() - 10 * tempDecimal; //faire des calculs pour afficher uniquement le deuxième nombre à partir d'une chaîne à deux chiffres if (millis() - previousMillisDiode>=intervalDiode) { previousMillisDiode =millis(); digitalWrite(led, !digitalRead(led)); //changer l'état de la led}if (millis() - previousMillis>=intervalle) { previousMillis =millis(); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); retard (500); //numitron désactivé pendant 0,5 seconde pour créer un effet de « respiration » digitalWrite (clockPin, LOW); SPI.transfer (nums[mois2]); SPI.transfer (nums[mois1]); SPI.transfer (nums[day2]); SPI.transfer (nums[day1]); digitalWrite (clockPin, HIGH); retard(1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); retard (500); //numitron désactivé pendant 0,5 seconde pour créer un effet de « respiration » digitalWrite (clockPin, LOW); SPI.transfer (nums[year4]); SPI.transfer (nums[year3]); SPI.transfer (nums[year2]); SPI.transfer (nums[year1]); digitalWrite (clockPin, HIGH); retard(1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); retard (500); //numitron désactivé pendant 0,5 seconde pour créer un effet de « respiration » digitalWrite (clockPin, LOW); SPI.transfer (0b10111000); SPI.transfer (0b11001010) ; SPI.transfer (nums[temp2]); SPI.transfer (nums[temp1]); digitalWrite (clockPin, HIGH); retard(1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); retard (500); //numitron s'est éteint pendant 0,5 seconde pour créer un effet de « respiration » } else { digitalWrite (clockPin, LOW); SPI.transfer (nums[minute2]); SPI.transfer (nums[minute1]); SPI.transfer (nums[heure2]); SPI.transfer (nums[hour1]); digitalWrite (clockPin, HIGH); }}

Schémas


Processus de fabrication

  1. Jeu de gyroscope Arduino avec MPU-6050
  2. Horloge Arduino avec heures de prière islamique
  3. horloge maîtresse
  4. Arduino Temp. Moniteur et horloge en temps réel avec affichage 3.2
  5. Voltmètre DIY avec Arduino et un écran Nokia 5110
  6. MobBob :Robot Arduino DIY contrôlé par smartphone Android
  7. Roue de mesure simple bricolage avec encodeur rotatif
  8. Jauge IoT avec Arduino, Yaler et IFTTT
  9. Réveil simple avec DS1302 RTC