Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

藍色小鋪, 數字管時鐘, 作品進化分享 (by 黃偉峻)

1,640 views

Published on

(2015/7/14) 黃偉峻在寶藏巖口丁分享他的數字管時鐘作品各版本的差異與進化.

Published in: Technology
  • Be the first to comment

藍色小鋪, 數字管時鐘, 作品進化分享 (by 黃偉峻)

  1. 1. 數字管時鐘
  2. 2. 大綱 •  介紹兩種數字管-­‐VFD&Nixie  tube   •  Project  Zero  –  IN-­‐14  Arduino  Clock   •  Project  One  –  IV-­‐18  Clock   •  Project  Two  –  IN-­‐17  Arduino  Clock   •  Alpha  Project  One  –  IN-­‐9  Temperature  display  
  3. 3. What is Nixie tube? •  比LED還早的時 代   •  大多顯示數字 符號   •  另外還有米字     hLp://www.oldcalculatormuseum.com/w-­‐anita1011.html  
  4. 4. 原理
  5. 5. Nixie種類-蘇聯管 •  市場量最大   •  相對便宜   •  種類多   •  有軍用版本可以選  
  6. 6. •  正視:   •  IN-­‐17     •  IN-­‐12A/B     •  IN-­‐15/A(符號)   •  側視:   •  IN-­‐8  (IN-­‐8-­‐2)   •  IN-­‐14   •  IN-­‐16   •  IN-­‐18   •  IN-­‐19(符號)     •  條狀:   •  IN-­‐9     •  IN-­‐13
  7. 7. Nixie 怎麼用? •  其實和LED差不多,只是電壓可能高達上百伏特     •  大致上分成兩種          1.直接驅動     a.撒一堆高壓電晶體     b.買有點貴的專用IC                          c.買沒有那麼貴的IC  
  8. 8. •  2.掃描式                     陽極:                                    1.高壓電晶體     2.高壓光耦合   陰極     a.一些些高壓電晶體                           b.買有點貴的專用IC                                    c.買沒有那麼貴的專用IC  
  9. 9. 高壓電晶體-陰極 •  MPSA42  
  10. 10. 高壓電晶體-陽極 MPSA42&92
  11. 11. 有點貴的專用IC •  74741-­‐Nixie  Driver  IC                BCD  to  DEC  è只需要4個Pin就能控制   •  Ti製:sn74141   •  è掏寶有看過有賣          (~30元)       •  蘇聯製:K155ID1  or  KM155ID1        è電壓較高(100V  V.S  60V)        è市場量大(Ebay)     (~30~60元)價錢其實有點亂..  
  12. 12. 有點貴非常貴的專用IC •  HV5522   •  貴(~上百元)   •  Shi_  Register   •  PLCC-­‐44,  PQFP-­‐44   •  最高可達300V   •  難買   http://www.webalice.it/giussdp/nixie2/ n2disp2_g.jpg
  13. 13. 沒那麼貴的IC •  Nixie  tube需要高壓電晶體的原因:   •  關閉的時候會出現高壓   •  但是如果已經點亮了一個è電壓會降下來   è現在許多~50V左右的IC就足以使用      舉例:   •  ULN2003  ~50V https://web.jfet.org/nixie-1/ 最好再接 個大電阻 到高壓
  14. 14. 限流電阻 •  需要查看真空管的   電流以及激發電壓   https://threeneurons.files.wordpress.com/ 2011/08/nixie-basics.gif
  15. 15. VFD 5V HV HV 0V 0V HV HV 0V
  16. 16. VFD怎麼用? 由於封裝的方式   使用上大都是掃描式的方式       控制閘:              1.高壓電晶體              2.專用IC      燈絲:     1.直流電     2.交流電   https://web.jfet.org/inGrid/
  17. 17. 燈絲 •  交流電:   •  直流電:  
  18. 18. Project Zero – IN-14 Clock
  19. 19. 架構: Arduino  UNO RTC Port   Expender I2C 74141  X  4 16條Output IN-­‐14  X  4 12V 180V   step-­‐up 5V   Step-­‐down
  20. 20. 軟體 抓RTC的時間 顯示時間 檢查Serial   Main  Program
  21. 21. 升壓模組 ⾼高壓⼩小⼼心 ㄟ •  NE555電路-­‐效果不錯,但是記得散熱   •  MC34063-­‐效率比較高一些   http://talkingelectronics.com/projects/50%20- %20555%20Circuits/images/170vSupply.gif https://threeneurons.files.wordpress.com/2011/08/ mc34063_mk15cm1.gif
  22. 22. •  MAX1771   •  Arduino  PWM  Step-­‐up From  PIC  APP  note
  23. 23. •  hLps://learn.adafruit.com/ice-­‐tube-­‐clock-­‐kit/design
  24. 24. •  hLp://gmewitharduino.blogspot.tw/2013/10/high-­‐ voltage-­‐power-­‐sources-­‐for-­‐tubes.html
  25. 25. 現成模組 •  NE555我的建議是自己做一個   •  但是如果有體積/電流的需求,去買個升壓模組就 好   •  台灣:        hLp://nixietubeclock.blogspot.tw/2014/07/np10-­‐ dc-­‐dc-­‐nixie-­‐tube-­‐part4.html  
  26. 26. •  hLp://nixietubeclock.blogspot.tw/2013/12/dc-­‐dc-­‐ nixie-­‐tube-­‐part1.html
  27. 27. •  掏寶   hLp://tw.taobao.com/item/22046131143.htm? fromSite=main&spm=a1z09.2.9.78.4Bok9u&_u=e1f5 oh4m7ee1  
  28. 28. 問題 •  外殼悲劇   •  PCB沒有派上非常大的用場   •  真空管難固定   •  沒必要使用I2C  port  expender   •  各種悲劇的走線   •  連個電源接頭都沒固定…..  
  29. 29. •  DS3231真的粉棒              1.一年下來完全沒有校時只誤差不到5s              2.內建溫控震盪器超棒的    
  30. 30. Project 2 – IN-17 Arduino
  31. 31. Display架構: Amny24 NPN-­‐PNP  Switch IN-­‐17  X  4 180V 74141  X  1 I2C 5V
  32. 32. Main board架構: Ver 1 Arduino   5V 溫溼度感 應器 RTC 藍芽模組 3.3V FM+AMP 電平轉換 電平轉換 I2C 5V UART 鋰電池 180V升壓 5V升壓 3.3V  LDO Amny 5V
  33. 33. 遇到的問題-電源 •  為了讀取電池電壓,把ADC接上電池   è關閉電池之後,電流從ADC倒灌到Arduino   •  為了避免USB電源和5V升壓撞在一起   è加了開關選擇5V的來源è操作上複雜   •  必須要接上鋰電池才能運作  
  34. 34. 遇到的問題-Layout •  180V升壓模組與5V升壓模組是從背後接上的   è增加非常多厚度   •  鋰電池的插座基本上沒辦法用   •  Micro  USB插座使用SMD版   è一扯就掉   •  nRF24l01的大小Lay錯了   •  耳機孔好難看..   •  藍芽模組造成PCB板突出一塊   •  因為電流倒灌,鋰電池關不掉
  35. 35. 遇到的問題-電源 •  為了讀取電池電壓,把ADC接上電池   è取消這功能   •  為了避免USB電源和5V升壓撞在一起   è增加自動控制的電路  
  36. 36. 遇到的問題-Layout •  180V升壓模組與5V升壓模組是從背後接上的   •  è切一塊PCB空間出來用   •  鋰電池的插座基本上沒辦法用è改到邊邊去   •  Micro  USB插座使用SMD版è換掉   •  nRF24l01的大小Lay錯了è沒空間了,拿掉   •  耳機孔好難看è沒空間了,拿掉   •  藍芽模組造成PCB板突出一塊è沒空間了,拿掉   •  因為電流倒灌,鋰電池關不掉è以解決  
  37. 37. 改良 •  增加USB  to  UART  IC   •  把5V升壓電路做上去   •    Charge  pump   •       Step-­‐up   •  加震動馬達控制器   •  加另一個溫濕度計   •  DS3231換成SSOP16  
  38. 38. Main board架構: Ver 2 Arduino   3.3V 溫溼度感 應器 RTC 3.3V FM+AMP I2C Amny 電平轉換 5V
  39. 39. Power 鋰電池 180V升壓 3.3V  LDO 5V升壓          USB Power   Path   Control            5V Power   Path   Control
  40. 40. FM出問題惹 •  AMP大小太大,塞不太下   è自己做個小的版本   •  天線也太大,而且線全部擠在殼內容易出狀況   èSMD天線(First  Try)   •  SMD天線接收度不佳   è加個LNA做放大  
  41. 41. FM出問題惹 •  結果耗電量爆增60mA   •  鋰電池:200mA   •  其他裝置加起來:20mA   è移除FM功能  
  42. 42. 遇到的問題 •  鋰電池接頭以及震動馬達在一排1.27”的排插   •  è靠的超近…..è熱熔膠固定,外加鋰電池保護板   •  ISP很佔空間   •  溫度感應器被加熱惹   •  開關的塑膠一直被我弄斷   •  有些地方離螺絲孔太近,會擋到螺絲   •  2.54”排插高度和大小都太大了   •  CR1220  有點占空間   •  沒有無線裝置…(è外掛模組)
  43. 43. 遇到的問題 •  要不是74141,整個板子用3.3V就好..  
  44. 44. 充電座 •   無線充電的問題:市面上的模組線圈大小太大(Qi 的模組),塞不下外殼   •  用接觸充電的方式,利用第一次Layout的PCB當作 彈簧針的底座  
  45. 45. 軟體:Simple loop •  Interupt  route:   •  RTC觸發Interrupt打開Flag   •  Main  Loop:   •  檢查按鈕+Flag   è進入不同的模式 •  1.計時   •  2.特效   •  A.0~9   •  B.波浪   •  C.亂數   •  3.倒數計時   •  4.溫溼度計
  46. 46. Scanning Nixie Tube •  Nixie  Tube  必須先關掉陽極è切換陰極è再開陽 極   •  Nixie  Tube  的電容特性會讓他持續發亮一段時間   如果這時候切換陰極,會點亮另外一個數字   •  而且陽極關閉等Nixie  Tube沒電,通常需要50us以 上,不然會出現Ghosgng    
  47. 47. Ghosting http://www.markbowers.org/nixie-clock-2012/
  48. 48. Attiny: •  專職掃描Nixie  Tube   •  讀I2C進來的訊號,四位數字+亮度  
  49. 49. Nixie Tube Cathode Poisoning http://www.tube-tester.com/sites/nixie/different/ cathode%20poisoning/cathode-poisoning.htm
  50. 50. •  原因:長期沒使用導致陰極有沉澱物   •  解決辦法:拿大電流通電一段時間(兩到十倍最高 電流,數分鐘到小時)   Nixie  Clock因為用不到的數字有點多,長期使用下來 會造成沒再使用的數字形成Cathode  Poisoning   •  預防:定時把每個數字都跑過一輪   •  Project  Zero的做法是è30分跑亂數,整點跑循序.
  51. 51. Time Sync – Python •  電腦端把時間組成CSV格式的字串用Serial送出   •  Arduino端用ParseInt從秒數讀到年   •  另外再將資料回傳確認
  52. 52. Project 3 – IV-18 Clock Ver 1 買到的套件 為Lunchpad設計的Shield  
  53. 53. 架構: MSP430 MAX6921 IO IV-­‐18 20條Output 5V 40V  step-­‐ up
  54. 54. 缺點 •  因為用的是MSP430外掛32.768kHz震盪器計時   è沒有斷電計時   •  Lunchpad沒有5V輸出,需要另外從板子上焊接出 來   •  按鈕好難用  
  55. 55. Ver 2 移動到Arduino
  56. 56. 架構: Arduino RTC IO IV-­‐18 20條Output 5V 40V  step-­‐ up MAX6921 I2C
  57. 57. 軟體 抓RTC的時間 顯示時間 檢查Serial   Main  Program
  58. 58. 遇到的問題 •  其實沒啥問題,就是板子Lay出來的有點難看   (回頭看的感覺)   •  CR2032占的空間太大   •  功能有點少   •  太亮  
  59. 59. 遇到的問題-軟體 •  真空管必須要用掃描式的方式顯示   è只要Code當中有任何一個Delay或時間較長的程 序,都會造成亮度的下降(因為掃描速度變慢)   •  舉例:   •  校正時間   •  DS18B20讀取   •  Serial.print  
  60. 60. 改裝: •  添加一個光敏電阻,去控制時鐘的開關   •  把DS1307的震盪器換成DS32KHZ的TXCO
  61. 61. Ver 3 •  原本想Layout一個新的Shield   •  但是,Arduino  Shield大小會超過5cm*5cm   •  PCB廠商會收另外一個級距的費用   •  而且Shield的零件通通換成SMD之後覺得有點空 虛   è乾脆全部都自己來,控制在5x5以內
  62. 62. 原本改良的Shield
  63. 63. Ver 3
  64. 64. Main Board 架構: Arduino  Leonardo RTC I2C Buzzer USB 3.3V  LDO To  Display   board Linkit  Connect   module UART 光敏 電阻 SD卡/ Flash SPI
  65. 65. 軟體會遇到的問題 •  Arduino如果正在處裡Wifi,會沒有辦法去刷新時 間和控制亮度   èInterrupt
  66. 66. 軟體 •  RTC  Interrupt                        èUpdate  Time  &  Check  Alarm   •  Timer  Interrupt                  èUpdate  Lux   •  Pinchange  Interrupt  èClose  Buzzer   •  Main  Loop                                  èSync  with  Internet
  67. 67. 軟體 啟動Interrupt 連網路 抓RTC的時間 (轉Unix  gme) 網路校時 抓時區 Mediatek  Cloud   Sandbox  Sync 讀光敏電阻 調整PWM Unix  gme  ++ 計算年月日,時 分秒 把資料傳到 Display  Board 顯示年月日,時 分秒,與動畫 Main  Program Timer  Interrupt   (10Hz) RTC  Interrupt   (1Hz) 關Buzzer Pinchange   Interrupt  
  68. 68. Wifi: Linkit Connect module
  69. 69. AT cmd firmeware •  hLps://github.com/will127534/7681-­‐ATcmd  
  70. 70. Software: Arduino Library •  LC7681Wifi  wifi(&Serial1);   •  Serial1.begin(115200);   •  wifi.connectAP(ssid,  key);   •  IPAddress  serverIp  =  wifi.nslookup(server);   •  wifi.connect(serverIp,  port);   •  wifi.print(buf,sizeof(buf));   •  wifi.process(callback);  
  71. 71. Callback •  會回傳發生的事件,以及收到的資料+長度   •  void  callback(int  event,  const  uint8_t*  data,  int   dataLen)          EVENT_NONE          EVENT_DATA_RECEIVED          EVENT_SOCKET_DISCONNECT          EVENT_MAX
  72. 72. Hardware: UART & 3.3V
  73. 73. NTP time sync •  準備好一個48byte的矩陣,開頭是0x1b,其他都是0   •  用UDP連線到Time  Server之後丟出去   •  收到的資料也是48byte,其中第41~44是 Timestamp  的4byte  資料
  74. 74. •  0x1b=0001  1011   •  LI  =  00   èno  warning     •  VN=011   èVersion  3     •  Mode  =  011   èClient  
  75. 75. •  Timestamp  :從1900年1月1日0點開始計算的秒數   •  Unix  gme:從1970年1月1日0點開始計算的秒數  
  76. 76. •  From  Unix  gme  to   Dategme   計算方式:用扣除的                            From  Adafruit  è  
  77. 77. Mediatek Cloud Sandbox
  78. 78. Cloud •  畢竟都加了Wifi  模組了,還用按鈕有點累   •  利用MCS顯示環境亮度   •  利用MCS去控制時鐘的各個設定   •  亮度   •  鬧鐘   •  顯示Style  
  79. 79. MCS Code •   wifi.print("GET  /mcs/v2/devices/{deviceID}/datachannels/"); •     wifi.print({channelID});   •     wifi.println("/datapoints.csv  HTTP/1.1");   •     wifi.println("Host:  api.mediatek.com");   •     wifi.println("deviceKey:  {deviceKey}");   •     wifi.println("Connecgon:  closen");
  80. 80. MCS Code •  wifi.println("POST  /mcs/v2/devices/{deviceID}/ datapoints.csv  HTTP/1.1");     •         wifi.println("Host:  api.mediatek.com");   •         wifi.println("deviceKey:  {deviceKey}");   •         wifi.print("Content-­‐Length:  ");   •         wifi.println({data  Length});   •         wifi.println("Content-­‐Type:  text/csv");   •         wifi.println("Connecgon:  closen");   •         int  _status  =  wifi.println(data);   •         return  _status;
  81. 81. Time zone •  ip-­‐api.com   •  使用方式:Get  hLp://ip-­‐api.com/csv/   •  success,Taiwan,TW,,Taipei,Taipei,, 25.0392,121.525,Asia/Taipei,"Chunghwa  Telecom   Co.","Chunghwa  Telecom","AS17421  Long  Distance   &  Mobile  Business  Group",223.136.78.146   •  經度/15  =  時區  
  82. 82. 遇到的問題-軟體(1) •  Arduino  內建的I2C  library有兩件事情會發生   •  1.會當掉   •  2.不能在Interrupt內跑  
  83. 83. 解決方法:換Library •  hLp://www.dsscircuits.com/argcles/arduino-­‐i2c-­‐ master-­‐library   •   Removed  the  use  of  interrupts  from  the  library  so   all  TWI  state  changes  are  polled   •  然後順便把原本的I2C  lib  加了個Timeout
  84. 84. 遇到的問題-軟體(2) •  RTC跑久了會卡死,用邏輯分析儀看的話,會發現 Arduino端是正常的,但是RTC沒有回應Address   è時間的來源改成Arduino自己算,利用RTC   Interrupt累加秒數     算是一種鋤草不除根的解決方式,目前這問題依然 存在    
  85. 85. 遇到的問題-軟體(3) •  Code  Size大爆炸   •  SD卡/Flash的Code放不下è移除功能  
  86. 86. IV-18 Display Board Ver1 Simple  Breakout
  87. 87. IV-18 Display Board Ver2
  88. 88. •  增加兩種MAX6921  以及 Amny做控制   •  但是電源需要外接   •  另外嘗試MC34063以外的Step-­‐up   •  LMR64010     •  UP  to  40V  
  89. 89. IV-18 Display Board Ver3 •  TSSOP的MAX6921  以及 Amny做控制   •  升壓電路整併   •  增加了RTC的空位   •  (Opgonal)使用MOS  Dirver  做到偽AC燈絲  
  90. 90. IV-18 Display Board Ver3
  91. 91. IV-18 Display Board Ver3
  92. 92. IV-18 Display Board Ver4 •  TSSOP封裝的MAX6291又貴又難買     è換成HV5812,但是因為體積變大,移除RTC與Mos   Dirver
  93. 93. IV-18 Display Board Ver4
  94. 94. IV-18 Display Board Ver4
  95. 95. IV-18 Display Board Ver5 - alpha •  Charge  pump!   •  因為這可以順便供應AC給燈絲   •  還沒送洗  
  96. 96. Alpha Project One
  97. 97. IN-9 Bargraph Nixie Tube •  利用電流量控制長度   •  使用方式:OPA+NPN做恆流源  
  98. 98. 硬體: •  LM34  è1度C  =  10mV   •  放大十一倍之後送給恆流源控制  
  99. 99. 遇到的問題: •  LM34被恆流源的NPN給加熱了   è用線接出來
  100. 100. IN-9 音量顯示器 •  一樣是放大電壓後送     給恆流源控制  

×