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

Construire une horloge à tubes Nixie simple avec Arduino – Guide pas à pas

Composants et fournitures

Composant Quantité
Arduino UNO 1
Composants électroniques UTSOURCE 1

À propos de ce projet

Introduction

Après de longues heures de travail, j'ai réussi à réaliser une horloge Nixie avec Arduino et un circuit d'isolement optique, sans avoir besoin de driver Nixie dédié (difficile à trouver).

Regardez la vidéo pour les instructions complètes :

Liste du matériel

  1. Arduino UNO – lien Amazon
  2. Tubes Nixie (6 pièces) – lien Amazon
  3. Optocoupleur TLP627
  4. Module élévateur DC 12V vers 390V DC – lien Amazon
  5. Plaque d'essai (breadboard) – lien Amazon
  6. Module horloge temps réel DS3231 – lien Amazon
  7. Composants électroniques sur utsource.net

Étape 1 : Conception du circuit

Construire une horloge à tubes Nixie simple avec Arduino – Guide pas à pas

Le circuit utilise un optocoupleur pour piloter les tubes Nixie (150 V DC) depuis l'Arduino (5 V DC). Grâce à une connexion en matrice, seulement 16 sorties Arduino suffisent pour contrôler les 60 cathodes des 6 tubes Nixie. Le module DS3231 maintient l'heure (même hors tension) via liaison I2C. L'Arduino lit l'heure, puis allume/éteint les cathodes en multiplexage à haute fréquence pour créer l'illusion d'un affichage continu des 6 chiffres.

Étape 2 : Code Arduino

// Chaîne Youtube : engineer2you
#include <Wire.h>
#include "DS3231.h"
RTClib RTC;
DS3231 Clock;
int hour;
int minute;
int second;
const int nixie_0 = 2;
const int nixie_1 = 3;
const int nixie_2 = 4;
const int nixie_3 = 5;
const int nixie_4 = 6;
const int nixie_5 = 7;
const int nixie_6 = 8;
const int nixie_7 = 9;
const int nixie_8 = 10;
const int nixie_9 = 11;
const int row_1 = 0;
const int row_2 = 1;
const int row_3 = 14;
const int row_4 = 15;
const int row_5 = 16;
const int row_6 = 17;
const int time_on = 2;

void setup() {
  pinMode(nixie_0, OUTPUT);
  pinMode(nixie_1, OUTPUT);
  pinMode(nixie_2, OUTPUT);
  pinMode(nixie_3, OUTPUT);
  pinMode(nixie_4, OUTPUT);
  pinMode(nixie_5, OUTPUT);
  pinMode(nixie_6, OUTPUT);
  pinMode(nixie_7, OUTPUT);
  pinMode(nixie_8, OUTPUT);
  pinMode(nixie_9, OUTPUT);
  pinMode(row_1, OUTPUT);
  pinMode(row_2, OUTPUT);
  pinMode(row_3, OUTPUT);
  pinMode(row_4, OUTPUT);
  pinMode(row_5, OUTPUT);
  pinMode(row_6, OUTPUT);
  // Serial.begin(9600); // NE PAS utiliser Serial.print, cela perturbe les broches D0 et D1
  Wire.begin();
}

void loop() {
  // --- Récupération de l'heure ---
  DateTime now = RTC.now();
  hour = now.hour();
  minute = now.minute();
  second = now.second();

  // --- Affichage des chiffres ---
  int j; // chiffre des dizaines
  int k; // chiffre des unités

  // Secondes
  j = second / 10;
  k = second % 10;
  off_all(); on_number(0, k + 2); delay(time_on);
  off_all(); on_number(1, j + 2); delay(time_on);

  // Minutes
  j = minute / 10;
  k = minute % 10;
  off_all(); on_number(14, k + 2); delay(time_on);
  off_all(); on_number(15, j + 2); delay(time_on);

  // Heures
  j = hour / 10;
  k = hour % 10;
  off_all(); on_number(16, k + 2); delay(time_on);
  off_all(); on_number(17, j + 2); delay(time_on);
}

void on_number(int row, int nixie) {
  digitalWrite(row, HIGH);
  digitalWrite(nixie, HIGH);
}

void off_all() {
  digitalWrite(row_1, LOW);
  digitalWrite(row_2, LOW);
  digitalWrite(row_3, LOW);
  digitalWrite(row_4, LOW);
  digitalWrite(row_5, LOW);
  digitalWrite(row_6, LOW);
  digitalWrite(nixie_0, LOW);
  digitalWrite(nixie_1, LOW);
  digitalWrite(nixie_2, LOW);
  digitalWrite(nixie_3, LOW);
  digitalWrite(nixie_4, LOW);
  digitalWrite(nixie_5, LOW);
  digitalWrite(nixie_6, LOW);
  digitalWrite(nixie_7, LOW);
  digitalWrite(nixie_8, LOW);
  digitalWrite(nixie_9, LOW);
  delayMicroseconds(400); // évite l'effet "fantôme" sur les autres tubes
}

Le code récupère l'heure du module DS3231 et l'affiche sur les 6 tubes Nixie via les optocoupleurs.

Étape 3 : Assemblage du circuit

Construire une horloge à tubes Nixie simple avec Arduino – Guide pas à pas
Construire une horloge à tubes Nixie simple avec Arduino – Guide pas à pas
Construire une horloge à tubes Nixie simple avec Arduino – Guide pas à pas
Construire une horloge à tubes Nixie simple avec Arduino – Guide pas à pas
Construire une horloge à tubes Nixie simple avec Arduino – Guide pas à pas

Tout est monté sur breadboard pour l'expérimentation. Heureusement, cela a fonctionné du premier coup sans aucun problème.

Prochaine étape : réaliser un boîtier en MDF avec une finition soignée pour l'installer dans ma chambre.

Code

Extrait de code #1
//Youtube channel: engineer2you
#include <Wire.h>
#include "DS3231.h"
RTClib RTC;
DS3231 Clock;
int hour;
int minute;
int second;
const int nixie_0 = 2;
const int nixie_1 = 3;
const int nixie_2 = 4;
const int nixie_3 = 5;
const int nixie_4 = 6;
const int nixie_5 = 7;
const int nixie_6 = 8;
const int nixie_7 = 9;
const int nixie_8 = 10;
const int nixie_9 = 11;
const int row_1 = 0;
const int row_2 = 1;
const int row_3 = 14;
const int row_4 = 15;
const int row_5 = 16;
const int row_6 = 17;
const int time_on = 2;

void setup() {
  pinMode(nixie_0, OUTPUT);
  pinMode(nixie_1, OUTPUT);
  pinMode(nixie_2, OUTPUT);
  pinMode(nixie_3, OUTPUT);
  pinMode(nixie_4, OUTPUT);
  pinMode(nixie_5, OUTPUT);
  pinMode(nixie_6, OUTPUT);
  pinMode(nixie_7, OUTPUT);
  pinMode(nixie_8, OUTPUT);
  pinMode(nixie_9, OUTPUT);
  pinMode(row_1, OUTPUT);
  pinMode(row_2, OUTPUT);
  pinMode(row_3, OUTPUT);
  pinMode(row_4, OUTPUT);
  pinMode(row_5, OUTPUT);
  pinMode(row_6, OUTPUT);
  //Serial.begin(9600); //should NOT use seiral println, it will effect to output pin D0 & D1
  Wire.begin();
}

void loop() {
  //-------------------get clock value---------------------------
  DateTime now = RTC.now();
  hour = now.hour();
  minute = now.minute();
  second = now.second();
  //-------------------show clock number ----------------------
  int j; //second number from right
  int k; //first number from right
  j = second/10;
  k = second%10;
  //-----------show first number of second
  off_all();
  on_number(0,k+2);
  delay(time_on);
  //-----------show second number of second
  off_all();
  on_number(1,j+2);
  delay(time_on);

  j = minute/10;
  k = minute%10;
  //-----------show first number of minute
  off_all();
  on_number(14,k+2);
  delay(time_on);
  //-----------show second number of minute
  off_all();
  on_number(15,j+2);
  delay(time_on);
  j = hour/10;
  k = hour%10;
  //-----------show first number of hour
  off_all();
  on_number(16,k+2);
  delay(time_on);
  //-----------show second number of hour
  off_all();
  on_number(17,j+2);
  delay(time_on);
}

void on_number(int row, int nixie){
  digitalWrite(row, HIGH);
  digitalWrite(nixie, HIGH);
}

void off_all(){
  digitalWrite(row_1, LOW);
  digitalWrite(row_2, LOW);
  digitalWrite(row_3, LOW);
  digitalWrite(row_4, LOW);
  digitalWrite(row_5, LOW);
  digitalWrite(row_6, LOW);
  digitalWrite(nixie_0, LOW);
  digitalWrite(nixie_1, LOW);
  digitalWrite(nixie_2, LOW);
  digitalWrite(nixie_3, LOW);
  digitalWrite(nixie_4, LOW);
  digitalWrite(nixie_5, LOW);
  digitalWrite(nixie_6, LOW);
  digitalWrite(nixie_7, LOW);
  digitalWrite(nixie_8, LOW);
  digitalWrite(nixie_9, LOW);
  delayMicroseconds(400); //to prevent "ghost" effect to other tube
}

Processus de fabrication

  1. Horloge POV Arduino : Construire un affichage LED à persistance rétinienne
  2. Construire une horloge Numitron rétro avec Arduino : simple, fiable et économe en énergie
  3. Optimiser la conception de faisceaux électriques avec E3.series
  4. Horloge à Mots DIY Arduino – Afficheur Temps Réel Élégant et Personnalisable
  5. Horloge Arduino temps réel pour les heures de prière islamiques
  6. Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
  7. Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
  8. Moniteur de Température et Horloge Temps Réel Arduino avec Écran TFT 3.2"
  9. Construire un Réveil Fiable avec RTC DS1302 et Arduino UNO