Tentang proyek ini
Setelah seharian bekerja, akhirnya saya berhasil membuat jam Nixie dengan Arduino dan chip opto-isolation, tidak perlu driver Nixie yang sulit dibeli.
Tonton video untuk instruksi lengkapnya:
Daftar bagian untuk membuat proyek:
1. Arduino UNO https://amzn.to/2P58O7s
2. Tabung Nixie 6 pcs https://amzn.to/3aHyJvX
3. Chip coupler Opto TLP627
4. Modul peningkatan DC dari 12VDC ke 390VDC https://amzn.to/30kpdK9
5. Papan tempat memotong roti https://amzn.to/2uCrnsW
6. Modul jam waktu nyata DS3231 https://amzn.to/2SIyEzI
Beli komponen elektronik di utsource.net
Langkah 1. Desain sirkuit
Rangkaian ini menggunakan chip opto-isolasi untuk mengontrol tabung Nixie (menggunakan 150VDC) oleh Arduino (menggunakan 5VDC). Dengan koneksi matriks, jadi kami hanya membutuhkan 16 output dari Arduino untuk mengontrol 60 lampu dari 6 tabung nixie. Modul jam real-time DS3231 digunakan untuk menjaga waktu (bahkan mematikan daya), dikomunikasikan dengan Arduino melalui jaringan I2C. Arduino akan membaca secara real-time, kemudian menyalakan/mematikan lampu nixie secara berurutan dalam frekuensi tinggi untuk membuat mata manusia melihat 6 angka secara permanen
Langkah 2. Kode Arduino //Youtube channel:engineer2you
#include
#include "DS3231.h"
RTClib RTC;
DS3231 Clock;
int jam;
int menit;
int detik;
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 baris_1 =0;
const int baris_2 =1;
const int baris_3 =14;
const int baris_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); //JANGAN menggunakan seiral println, ini akan mempengaruhi output pin D0 &D1
Wire.begin();
}
void loop() {
//--- ----------------dapatkan nilai jam-----------------------
TanggalWaktu sekarang =RTC.sekarang();
jam =sekarang.jam();
menit =sekarang.menit();
detik =sekarang.detik();
/ //------------------tampilkan nomor jam -----------------------
int J; //angka kedua dari kanan
int k; //angka pertama dari kanan
j =detik/10;
k =detik%10;
//-----------tampilkan angka pertama detik
off_all();
on_number(0,k+2);
delay(time_on);
//-----------tampilkan angka detik kedua
off_all();
on_number(1,j+2);
delay(time_on);
j =menit/10;
k =menit%10;
//------------tampilkan angka menit pertama
off_all();
on_number(14,k+2);
delay(time_on);
//-----------tampilkan detik detik
off_all();
on_number(15,j+2 );
delay(time_on);
j =hour/10;
k =hour%10;
//-----------tunjukkan dulu jumlah jam
off_all();
on_number(16,k+2);
delay(time_on);
//-----------tampilkan jumlah jam kedua
off_all();
on_number(17,j+2 );
delay(time_on);
}
void on_number(int baris, int nixie){
digitalWrite(baris, 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 , RENDAH);
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); //untuk mencegah efek "hantu" ke tube lain
}
Pada dasarnya, kode akan mendapatkan real-time dari modul DS3231 dan ditampilkan ke 6 tabung nixie melalui chip opto-isolasi.
Langkah 3. Bangun sirkuitnya
Ini hanya percobaan, jadi saya membuat semuanya di papan tempat memotong roti. Untungnya, ini berfungsi pertama kali, tidak ada masalah
Pada langkah selanjutnya, Saya akan mencoba membuat jam tangan nixie dalam wadah MDF dengan dekorasi yang bagus, sehingga saya dapat meletakkannya di kamar saya.
Kode
Cuplikan kode #1Teks biasa
//Saluran Youtube:engineer2you#include #include "DS3231.h"RTClib RTC;DS3231 Jam;int jam;int menit;int detik;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 baris_1 =0;const int baris_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(baris_1, OUTPUT); pinMode(baris_2, OUTPUT); pinMode(row_3, OUTPUT); pinMode(row_4, OUTPUT); pinMode(row_5, OUTPUT); pinMode(row_6, OUTPUT); //Serial.begin(9600); //JANGAN menggunakan seiral println, ini akan mempengaruhi output pin D0 &D1 Wire.begin();}void loop() { //------------------- dapatkan nilai jam--------------------------- DateTime now =RTC.now(); jam =sekarang.jam(); menit =sekarang.menit(); detik =sekarang.detik(); //-------------------tampilkan nomor jam ---------------------- int j; //angka kedua dari int k kanan; //angka pertama dari kanan j =detik/10; k =detik%10; //-----------tampilkan angka pertama off_all(); pada_angka(0,k+2); penundaan(waktu_on); //-----------tampilkan angka kedua dari off_all(); pada_angka(1,j+2); penundaan(waktu_on); j =menit/10; k =menit%10; //-----------tampilkan nomor menit pertama off_all(); pada_angka(14,k+2); penundaan(waktu_on); //-----------tampilkan detik detik off_all(); pada_angka(15,j+2); penundaan(waktu_on); j =jam/10; k =jam%10; //-----------tampilkan jumlah jam pertama off_all(); pada_angka(16,k+2); penundaan(waktu_on); //-----------tampilkan jumlah jam kedua off_all(); pada_angka(17,j+2); delay(time_on);}void on_number(int baris, int nixie){ digitalWrite(baris, TINGGI); digitalWrite(nixie, HIGH);}kosongkan semua(){ digitalWrite(row_1, LOW); digitalWrite(baris_2, RENDAH); digitalWrite(baris_3, RENDAH); digitalWrite(row_4, RENDAH); digitalWrite(row_5, RENDAH); digitalWrite(row_6, RENDAH); digitalWrite(nixie_0, RENDAH); digitalWrite(nixie_1, RENDAH); digitalWrite(nixie_2, RENDAH); digitalWrite(nixie_3, RENDAH); digitalWrite(nixie_4, RENDAH); digitalWrite(nixie_5, RENDAH); digitalWrite(nixie_6, RENDAH); digitalWrite(nixie_7, RENDAH); digitalWrite(nixie_8, RENDAH); digitalWrite(nixie_9, RENDAH); delayMicroseconds(400); //untuk mencegah efek "hantu" ke tabung lain}