Splendid Small World

Splendid Small World

Some people feel the rain. Others just get wet.
- Bob Marley -

という訳で。
好きにに生きて、趣味とかやって、酒飲んで。
たまに雨を感じられる人生が最高な訳です

Amebaでブログを始めよう!
 

こっちでもこっそりやってますので、よろしければどーぞ

管球自在

 

===============
 
 
基板がやってきたので、とりあえずバラックで組み立ててみることにしました。
結論から言えば、驚くほどあっさりと回路が動いてくれました。
 
すげぇ、PCB基板すげえ。
超楽じゃん。
手配線とか空中配線とかまじで不要じゃん!
 
という気分。
 
こんな感じでバラックで組んで、動かしてみました。
 
おぉ、なんだかすごくそれっぽくなってきたぞ。
 
スタティック駆動なので、表示はめっちゃ綺麗です。
スーパースローモーション撮影をしても表示は点滅しません(当たり前だw)
 
さて、コイツに色々と付属品をつけていきます。
 
===============

 

つづく

 

 

 

 

 

 

 

 

 

こっちでもこっそりやってますので、よろしければどーぞ

管球自在

 

===============
 
 
さて、試作回路でニキシー管のドライブはどうにかできました。
とりあえず、時計としての動作も確認できたので、試作品としてはOKとなります。
 
ん?写真?
それは、撮り忘れた。
 
撮り忘れたったら撮り忘れたの!
ごちゃごちゃしてて見せらんないとかじゃないんだからね。
 
 
 
 
1本あたり、14本の足が出ていて、そのうち少なくとも12本に配線しなければいけないIN-18のニキシー管を、スタティック点灯で制御しようとすると、ドライバICも6個必要ですし、Arduinoからの出力をパラで行う場合、それだけで出力線は24本になります。
 
さらにコロンを表示させたり、GPSにRTCを接続して、LCDまでつけちゃうよ、となると、どうやっても配線の数が多くなってしまいます。
 
正直いって、かなりその作業は面倒です。
今回、試作基板を作ってみて思いました。
 
こりゃ、飽きるわw って。
 
ならばダイナミック点灯にすでばいいではないか。
とも思うのですが、スタティック点灯の表示の美しさはやはり捨てがたいのです。
というか、ダイナミック点灯でいいならわざわざ自分で作ってないです。その辺のキット買って来て改造した方がよっぽど楽です。
 
ならばシフトレジスタを使えばいいではないか。
これは正直、ちょっと考えました。
 
Arduinoのシフトレジスタ用ライブラリの使い方とか、32bitのシフトレジスタ2つ使ったらうまくいくんじゃね?(高耐圧で64bitなシフトレジスタを見つけられなかった)というのは考えました。

HV4622とか、使えそうなシフトレジスタの型番まで調べちゃうくらい考えましたが、Arduino側のプログラムが少しめんどくさそうだったのと、表面実装部品をうまいこと扱える自信がなかったので、一旦これは次回作以降に持ち越しにすることにしました。

 

 
そんなわけで、結論としては配線大変だよねー、となったわけです。
 
 
大変だねぇと言っていれば、勝手に何かが出来上がるわけでもないので、仕方なくプリント基板の作成にチェレンジしてみることにしました。
 
まずはお試しなので、ニキシー管用のドライブ回路基板と、ニキシー管を組み付ける表示用基板の2枚を設計します。
 
設計には、EAGLEというCADソフトを使うことにしました。
 
理由は、自動配線とかを無料で使えること。
回路と実装面積を考えると、無料の枠では収まらない感じなので、どこかで課金してサブスクリプションを買わなきゃいけないのですが、まずは自動配線とかをお試しできるのは大きいよね、ということでこれにしました。
まずはこれの使い方に慣れて、基板設計するところまでをやってみました。
 
 
こんな感じで、回路図を引いて
 
 
これを基板の設計に起こして自動配線します。
なんと行ってもこの機能が面白い。
一日中自動配線見てて飽きない気がします。
 
 
 
さらにそれを、実際に基板を作るときに必要になるガーバーデータに起こして中国の基板メーカーであるpcbgogo.jpさんへ発注
 
 
10日間ほどで基板が届きました
 
 
 
思っていたよりハイクオリティです
 
 
 
これで、配線作業が一気に楽になる・・・かな?
 
 
 
===============

 

つづく

 

 

 

 

 

 

 

 

こっちでもこっそりやってますので、よろしければどーぞ

管球自在

 
 
ベランダで栽培中の唐辛子の品種が判明しました。
どうやら、ブート・ジョロキアみたいです。
 
コイツが
 
 
 
こんな実をつけて
 
こうなりました

ベランダ産の生物兵器。

オーリオピカンテ作ろうっと。

 

 

 

 

===============
 
 
さて
ニキシー管のドライブ回路を試作します。
 
作る回路(という程のものでもないのですけど)は、これ。
 
 
4ピンの入力用コネクタから、SN74141Nの入力ピンに接続して、出力ピンを10ピンの出力用コネクタに接続します。
パスコンをICの電源系に仕込んだら設計おしまいです。
これを6個並べたら、スタティックドライブ用の回路が出来上がります。
 
とりあえず試作なので、これを手配線でちまちま作っていくわけでなのですが
 
こんな感じで、部品を配置した基板の裏に配線を
 
ちまちま。
ちまちま。
 
 
 
うん、めんどくさくなってきた。
パスコンと1個目のICへの配線ができたところです。
 
この時点でスタティックドライブで作ろうと思ったことをちょっと後悔し始めました。

 

どうにか配線を終わらせた時にはすでにぐったり。 

 

 

 
 

 

で、コイツを、Arduinoに接続してニキシー管をドライブしてみると

 

 

こんな感じになります。

 

お。

 

いいかんじです。

 

 

 

===============

 

つづく

 

 

 

 

 

 

 

 

 

 

「諸君 私はLチカが好きだ

 諸君 私はLチカが大好きだ

 

 狙い通りの点滅を繰り返すLEDが大好きだ

 電源を切るまで点滅を続けるLチカが好きだ

 

 たった1つのLEDが寂しく光る姿も大好きだ

 たくさんのLEDが連携して輝く姿には感動すら覚える

 

 諸君 さらなるLチカを望むか? 嵐の様なLチカを望むか?」

 

「Lチカ! Lチカ! Lチカ!」

 

「よろしい ならばLチカだ

 Lチカを! さらなるLチカを!」

 

 

===============

 

 

 

という訳で、Lチカ(LEDをArduinoでチカチカさせるんだぜ、の略)です。

 

RTCで時間をシリアルモニタに出力することができることはわかりました。

同じようにして、GPSからの信号を受信してシリアルに出すことにも成功しました。

 

こんな感じで、GPSからのデータを受信してます。

ってか、GPSってこんなに大量のデータを送ってきてたんだねぇ、知らなかったよ。

衛星番号なんかをよーく見ると、日本の打ち上げたGPS衛星、みちびきのデータも入っていることがわかります。

 

 

 

さて、詳細なところはまた別な機会に書くとして・・・

 

 

時刻のデータはでに入りました。

その出力を、数字6桁に変換して各GPIOのピンに出力します。

 

今回は、ニキシー管1桁あたりGPIO4本を使ってBCD出力というやつをやります。

 

数字の表記に使用するのは0〜9までの数字です。

なので、これを2進数で表すと

0000--------0

0001--------1

0010--------2

0011--------3

0100--------4

0101--------5

0110--------6

0111--------7

1000--------8

1001--------9

となります。

 

これは、1桁あたり4ビット、GPIOのピンが4本必要になることを示しています。

これを配列に入れて、該当の数字がヒットしたら呼び出す様にプログラムを書いてっと。

 

他にも必要なものを取り付けたいので、いったん今考えている最低限必要な機能を実現するために、ピンの割り当てを設計します。

こんな感じのピン割り当てになりました。

 

 

まず、LCDのパラレル接続用に、

2,3,4,5,6,7

の6ピンを確保。

 

GPS用のシリアル通信用に、

16,17

の2ピン

 

RTCのI2C通信用に、

20,21

の2ピン

 

将来的にコロン表示が欲しくなって、かつコロンを1個ずつ制御できる様に、コロン用のピンとして

46,47,48,49

の4ピンをコロン用として確保します。
 

さらに、

ニキシー管のON/OFF用に、50

GPSとRTCの切り替え用に、51

GPSとRTCの手動同期とデバック用に、52

の各ピンを割り当てます

 

最後に、ニキシー管としては、

数字1桁目  22,23,24,25

数字2桁目  26,27,28,29

数字3桁目  30,31,32,33

数字4桁目  34,35,36,37

数字5桁目  38.39.40.41

数字6桁目  42,43,44,45

の24ピンを割り当てました。

 

これをそれぞれSN74141NドライバICの入力に入れて、ニキシー管のカソード制御を行います

いわゆるスタティック点灯、という方式です

 

つまり6桁のニキシー管の表示に、24本のGPIOを使い、6個の74141ドライバICを使用するという、なんとも対艦巨砲的な設計になります。

 

ダイナミック点灯制御?シフトレジスタでピン節約?ドライバICの節約?回路規模の小型化?

 

何を言ってるんですか

 

そもそもニキシー管を使って時計を作るっていう行為自体がロマンなのですよ。

ならば、全部ロマンで行こうじゃありませんか。

 

まぁ、こんな理由で、GPIOの数が多いArduinoMegaを選択した訳です。

 

これをLチカとして動かすと、こんな感じになります。

 

わかりにくいですが、左からLED4個1組で時計の数字を2進数表記しています。

時刻情報はGPSから取得して、変数に入れたあと各桁にバラして、それをBCD出力して、LEDに接続してみました。

 

 

 

 

LEDがいっぱい。

Lチカわーい♪

 

この4本で1桁分になっているArduinoからの出力を、ドライバICに投入してやれば、とりあえずニキシー管は点灯できるはずです。

 

つづく

 

 

 

 

 

こっちでもこっそりやってますので、よろしければどーぞ

管球自在

 

 

 

 

5月某日。

 

引っ越した部屋は、築50年のマンションで、設備が古いです。まぁとにかく古いです。

なので、実は色々手を加えています。

もちろん、賃貸なので、現状復帰ができる様にしておくことが前提なのでけど。

 

いつかそのうち、その辺りのことも書けたらとは思っています。

ざっと挙げると

・トイレのウォシュレット化

・インターフォンをカメラ付きに変更

・キッチン手元灯を蛍光灯からLEDリボンを使った照明に変更

・玄関の電灯を人感センサーで自動点灯する様に変更

・キッチン天井照明の変更

・キッチンカウンターの自作

・キッチン換気扇の配線変更

・キッチン換気扇と照明の操作パネル自作

・脱衣所に壁面棚の自作と設置

なんてことをやっています。

 

ニキシー管時計がなかなか完成しない亀の歩みなのは、そんなことをやりながら空き時間で作っているからでもあります。

(the!言い訳)

 

==========

 

ArduinoにRTCを接続して、時計として動かすために、

「RTClib.h」と「Wire.h」のライブラリを追加しました。

 

基本的には、初期化して、RTCに時間をセットして、シリアルモニタで読み出せば、時刻が表示されるはずです。

 

便利なことに、ライブラリにはサンプルプログラムがついていますので、それを使って時刻を表示させるところまではすんなり行きました。

 

RTClib.hに付属のDS3231用サンプルプログラム

「ds3231.ino」

====================

 

#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {

#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif

  Serial.begin(9600);

  delay(3000); // wait for console opening

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
}

void loop () {
    DateTime now = rtc.now();

    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");

    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now + TimeSpan(7,12,30,6));

    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();

    Serial.print("Temperature: ");
    Serial.print(rtc.getTemperature());
    Serial.println(" C");

    Serial.println();
    delay(3000);
}

====================

こいつを動かすと、シリアルモニタ上に時間とか温度とかが表示されます。

 
実際、何もしないでコピペだけで動かしても、おぉー、すげー。なんて感動します。

 

すげー

 

 

 

ところが!

 

 

 

なんということでしょう、RTCで表示している時間が、1時間に60秒以上ズレてしまいます。

 

DS3231のRTCモジュールには、温度計センサーも搭載されていて、室温を表示できるのですが、室温が摂氏220度だって言ってますよ、こいつ。

 

試しにモジュールに実装されているICを触ってみると

「あッつっっ!!」

ってくらい、熱くなってます。

 

なんだ?なにがあった?

接続を間違えたのか、プログラムを間違えたのか?いやサンプルコードそのまんまだぞおい。

 

色々と調べてみましたが、接続もプログラムも問題はありません。

 

この問題はしばらくの間、頭を悩ませることになります。

 

解決したのは、念のためと別なDS3231RTCモジュールを接続してから。

安いからと3個セットを2個で合計6個ものRTCを買っていたことが功を奏しました。

 

そう。

ただの初期不良でした。

 

違うRTCを接続すると、あっさり正常に動き出しました。

 

こうなると全部確認したくなるものです。

 

その結果。

 

手元にある6個のRTCのうち、2個について、時間や温度のズレが激しく、使い物にならないことがわかったのです。

 

中国製のクオリティを舐めていました。

不良品率が高いシロモノだった、それも6個中2個、つまり不良品率33.3%!

 

首位打者も驚きの打率です。

 

 

とりあえずこの日は、これで力尽きました。

 

 

つづく

 

 

こっちでもこっそりやってますので、よろしければどーぞ

管球自在