5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

アマゾンでVFDを購入したので時計にした

Last updated at Posted at 2021-11-29

 アマゾンでVFDを売っていたので、時計にしてみた。
   日本語取説付き 蛍光表示管 4桁 時計用 VFD IVL2-7/5 ソビエト ロシア ビンテージパーツ USSR
 ヒータは2.5V、点灯電圧は24Vです。実験途中で電源がおかしくなりました。24Vは高めの電圧ですから慎重に扱ってください。

###マイコン・ボード
 Arduino UNO Wifi Rev.2のモデルは、Arduino UNOと同じくAVRマイコンを使っていますが、世代が新しいATMega4809を搭載しています。Arduino UNO用シールドにWi-Fiが利用できる製品がリリースされなくなって数年が経過しています。
 このモデルでは、Wi-FiデバイスにU-bloxのNINA-W102が搭載され、従来のEthernet とWiFiのライブラリと同じように使えるWiFiNINA libraryが用意されました。NINA-W102は2018年6月15日に技適(204-810001)に登録されています。
 最初のプログラムはUNOで動かしました。2番目の時計はArduino UNO Wifi Rev.2を利用しました。

IMG_0674.png

###回路
 電圧レベルの変換は東芝のTBD62783を2個使いました。秋月電子通商で購入しました。Vihは2Vなので、3.3V系のマイコンボードでも駆動できるでしょう。
 1個目でアノードを制御します。2個目はグリッドで、桁の制御です。3番目はコロン(二つのドット)です。
 入力はArduinoのディジタル端子0~12をつなぎました。
IMGP0889.png

###プログラム
 表示のプログラムです。どうやって点灯するのか最初はわからなかったので、確認しながら作ったので、べたなセグメント・データの記述になっています。

#define Grid1 8
#define Grid2 9
#define Grid3 10
#define Grid4 11
#define Grid5 12

#define anodeA 0
#define anodeB 1
#define anodeC 2
#define anodeD 3
#define anodeE 4
#define anodeF 5
#define anodeG 6
#define anodeDot 7

void digit1(){  // 1 ..  5
    digitalWrite(Grid1, HIGH);
  digitalWrite(Grid2, LOW);
  digitalWrite(Grid3, LOW);
  digitalWrite(Grid4, LOW);
  digitalWrite(Grid5, LOW);
}

void digit2(){  // 1 ..  5
    digitalWrite(Grid1, LOW);
  digitalWrite(Grid2, HIGH);
  digitalWrite(Grid3, LOW);
  digitalWrite(Grid4, LOW);
  digitalWrite(Grid5, LOW);
}

void digit3(){  // 1 ..  5
    digitalWrite(Grid1, LOW);
  digitalWrite(Grid2, LOW);
  digitalWrite(Grid3, HIGH);
  digitalWrite(Grid4, LOW);
  digitalWrite(Grid5, LOW);
}

void digit4(){  // 1 ..  5
    digitalWrite(Grid1, LOW);
  digitalWrite(Grid2, LOW);
  digitalWrite(Grid3, LOW);
  digitalWrite(Grid4, HIGH);
  digitalWrite(Grid5, LOW);
}

void digit5(){  // 1 ..  5
    digitalWrite(Grid1, LOW);
  digitalWrite(Grid2, LOW);
  digitalWrite(Grid3, LOW);
  digitalWrite(Grid4, LOW);
  digitalWrite(Grid5, HIGH);
}

void _1(){  //
  digitalWrite(anodeA, LOW);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, LOW);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, LOW);
  digitalWrite(anodeG, LOW);
}

void _2(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, LOW);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, HIGH);
  digitalWrite(anodeF, LOW);
  digitalWrite(anodeG, HIGH);
}

void _3(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, LOW);
  digitalWrite(anodeG, HIGH);
}

void _4(){  //
  digitalWrite(anodeA, LOW);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, LOW);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, HIGH);
}
void _5(){  //
  digitalWrite(anodeA, LOW);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, HIGH);
}
void _6(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, LOW);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, HIGH);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, HIGH);
}
void _7(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, LOW);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, LOW);
  digitalWrite(anodeG, LOW);
}
void _8(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, HIGH);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, HIGH);
}
void _9(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, LOW);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, HIGH);
}
void _0(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, HIGH);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, LOW);
}

void setup() {
  for (int i=0; i<14; i++) pinMode(i, OUTPUT);
  digitalWrite(Grid1, LOW);
  digitalWrite(Grid2, LOW);
  digitalWrite(Grid3, LOW);
  digitalWrite(Grid4, LOW);
  digitalWrite(Grid5, LOW);
}

void disp(int _1,int _2,int _3,int _4){
  VFD(_1);
  digit1();  delay(5);
  VFD(_2);
  digit2();  delay(5);
  digitalWrite(anodeDot, HIGH);
  digit3();  delay(5);
  VFD(_3);
  digit4();  delay(5);
  VFD(_4);
  digit5();  delay(5);
}

void VFD(int dispFig){
  switch (dispFig){
  case 0: //?
    _0() ;break;
  case 1:
    _1();break;
  case 2:
    _2();break;
  case 3:
    _3();break;
  case 4:
    _4();break;
  case 5:
    _5();break;
  case 6:
    _6();break;
  case 7:
    _7();break;
  case 8:
    _8();break;
  case 9:
    _9();break;
  }
}

void loop() {
  disp(2,3,8,0);
}

 ntpライブラリを追加して、時計にしました。
 Wi-Fiの部分はArduino.ccのWiFiNINAライブラリです。ここのntpは複雑だったので、M5Stamp C3で時計 で使ったNTPClientライブラリを利用しました。
 Wi-Fiルータへの接続に必要なSSIDとパスワードはarduino_secrets.h(別ファイル、同じディレクトリ)に記述しています。記述方法はWiFiNINAライブラリのサンプルを参照してください。

#include <WiFiNINA.h>
#include <NTPClient.h>

#include "arduino_secrets.h" 
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = SECRET_SSID;        // your network SSID (name)
char pass[] = SECRET_PASS;    // your network password (use for WPA, or use as key for WEP)
int status = WL_IDLE_STATUS;

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp.nict.jp", 3600*9, 60000);

#define Grid1 8
#define Grid2 9
#define Grid3 10
#define Grid4 11
#define Grid5 12

#define anodeA 0
#define anodeB 1
#define anodeC 2
#define anodeD 3
#define anodeE 4
#define anodeF 5
#define anodeG 6
#define anodeDot 7

void digit1(){  // 1 ..  5
    digitalWrite(Grid1, HIGH);
  digitalWrite(Grid2, LOW);
  digitalWrite(Grid3, LOW);
  digitalWrite(Grid4, LOW);
  digitalWrite(Grid5, LOW);
}

void digit2(){  // 1 ..  5
    digitalWrite(Grid1, LOW);
  digitalWrite(Grid2, HIGH);
  digitalWrite(Grid3, LOW);
  digitalWrite(Grid4, LOW);
  digitalWrite(Grid5, LOW);
}

void digit3(){  // 1 ..  5
    digitalWrite(Grid1, LOW);
  digitalWrite(Grid2, LOW);
  digitalWrite(Grid3, HIGH);
  digitalWrite(Grid4, LOW);
  digitalWrite(Grid5, LOW);
}

void digit4(){  // 1 ..  5
    digitalWrite(Grid1, LOW);
  digitalWrite(Grid2, LOW);
  digitalWrite(Grid3, LOW);
  digitalWrite(Grid4, HIGH);
  digitalWrite(Grid5, LOW);
}

void digit5(){  // 1 ..  5
    digitalWrite(Grid1, LOW);
  digitalWrite(Grid2, LOW);
  digitalWrite(Grid3, LOW);
  digitalWrite(Grid4, LOW);
  digitalWrite(Grid5, HIGH);
}

void _1(){  //
  digitalWrite(anodeA, LOW);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, LOW);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, LOW);
  digitalWrite(anodeG, LOW);
}

void _2(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, LOW);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, HIGH);
  digitalWrite(anodeF, LOW);
  digitalWrite(anodeG, HIGH);
}

void _3(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, LOW);
  digitalWrite(anodeG, HIGH);
}

void _4(){  //
  digitalWrite(anodeA, LOW);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, LOW);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, HIGH);
}
void _5(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, LOW);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, HIGH);
}
void _6(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, LOW);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, HIGH);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, HIGH);
}
void _7(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, LOW);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, LOW);
  digitalWrite(anodeG, LOW);
}
void _8(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, HIGH);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, HIGH);
}
void _9(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, LOW);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, HIGH);
}
void _0(){  //
  digitalWrite(anodeA, HIGH);
  digitalWrite(anodeB, HIGH);
  digitalWrite(anodeC, HIGH);
  digitalWrite(anodeD, HIGH);
  digitalWrite(anodeE, HIGH);
  digitalWrite(anodeF, HIGH);
  digitalWrite(anodeG, LOW);
}
void _111(){  // blank
  digitalWrite(anodeA, LOW);
  digitalWrite(anodeB, LOW);
  digitalWrite(anodeC, LOW);
  digitalWrite(anodeD, LOW);
  digitalWrite(anodeE, LOW);
  digitalWrite(anodeF, LOW);
  digitalWrite(anodeG, LOW);
}

void disp(int _1,int _2,int _3,int _4){
  VFD(_1);
  digit1();  delay(4);
  VFD(_2);
  digit2();  delay(4);
  digitalWrite(anodeDot, HIGH);
  digit3();  delay(4);
  VFD(_3);
  digit4();  delay(4);
  VFD(_4);
  digit5();  delay(4);
}

void VFD(int dispFig){
  switch (dispFig){
  case 0: //?
    _0() ;break;
  case 1:
    _1();break;
  case 2:
    _2();break;
  case 3:
    _3();break;
  case 4:
    _4();break;
  case 5:
    _5();break;
  case 6:
    _6();break;
  case 7:
    _7();break;
  case 8:
    _8();break;
  case 9:
    _9();break;
  case 111:
    _111();break;
  }
}

void setup() {
  for (int i=0; i<14; i++) pinMode(i, OUTPUT);
  digitalWrite(Grid1, LOW);
  digitalWrite(Grid2, LOW);
  digitalWrite(Grid3, LOW);
  digitalWrite(Grid4, LOW);
  digitalWrite(Grid5, LOW);

  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // check for the WiFi module:
  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println("Communication with WiFi module failed!");
    // don't continue
    while (true);
  }

  String fv = WiFi.firmwareVersion();
  if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
    Serial.println("Please upgrade the firmware");
  }

  // attempt to connect to WiFi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }

  Serial.println("Connected to WiFi");

  Serial.println("\nStarting connection to server...");
  timeClient.begin(); 
  delay(500);
}

void loop(){
  //delay(1000);
  timeClient.update();

  String TIME = timeClient.getFormattedTime();
  // Serial.println(TIME);
  String Hr_high = TIME.substring(0, 1);
  String Hr_low = TIME.substring(1, 2);
  String Mini_high   = TIME.substring(3, 4);
  String Mini_low  = TIME.substring(4, 5);
  if (Hr_high=="0") { 
    disp(111,Hr_low.toInt(),Mini_high.toInt(),Mini_low.toInt());
  } else {
    disp(Hr_high.toInt(),Hr_low.toInt(),Mini_high.toInt(),Mini_low.toInt());
  }
}

###製作中の様子
 プリント基板もアマゾンで入手しました。
   KEYESTUDIO 10個 プロトタイプ プリント 回路基板 ブレイクアウトPCBボード シールド スターターキット for Arduino UNO R3 アルドゥイーノ アルデュイーノ アルディーノ ブレッドボード セット 電子工作
 部品を置いただけ
IMGP0866s.png

 24V側の配線が終わった
IMGP0868.png
 裏面
IMGP0870.png

表示例
IMGP0887.png

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?