2014年12月21日 星期日

LMX9838 USB stick

總之這次是把LMX9838做成一個USB的裝置,用的是CP2102做UART轉USB
架構上大致就是RX-TX TX-RX CTS-RTS RTS-CTS,把Flow control也補了上去
另外就是保留外接32.768khz震盪器的空間,應該勉強可以懸在空中啦XD
然後就是把LMX的LED燈拉出來兩個,

這東西的好處大概就是可以一次接7個dev了吧
PCB連結,我把這電路Share出來了

2014年12月9日 星期二

AFE4400 with Arduino

 總之這次來做個biosensor,
這是利用AFE4400做成的一個測血氧以及心跳的模組,利用一個波長的LED可以看出來心跳的波形,如果再用另一個波長的LED就可以透過比值計算血氧量,AFE4400的工作就是高速切換不同波長的LED以及讀取PN二極體的電流量經由內部類比迴路的處裡之後的電壓.

可以看到一個是發射兩種波長的LED,另一個是接收用的PN二極體

電路還算是有點多東西,而且是QFN....這是我第一次焊接測試成功這種封裝的IC,比起CC3000來說難的多,因為CC3000可以透過ㄉㄨㄞˉㄉㄨㄞˉ的感覺知道說已經焊在一起了,但是AFE體積不大,錫量也很少,基本上只能壓下去然後希望成功這樣QQ
幸好這IC有些輸出可以讓我知道他焊接正常,第一個是VCM以及BG會有電源輸出,附帶一提,VCM是作為接收器的遮蔽用,BG是Bandgap輸出
另外還有4Mhz的clock輸出,
至於LED以及PN有沒有接好,可以利用DIAG讀取狀態,他會檢測有沒有地方短路或是空接
確定完之後就可以開始讀資料了
我之前找到一個Library可以給Arduino用的,結果他竟然寫說這個Code不能用
所以改阿改的,拿LA出來看資料長怎麼樣真的好用,一下就看到問題點,總之改好的東西我放在這https://github.com/will127534/AFE4400


上面是raw,下面是平均10個資料後的輸出

基本上SPI介面長這樣
這是讀取六個ADC data的狀況,可以看到ADC_RDY觸發Interrupt,然後Arrduino先寫說我要讀資料,在讀取完六個後再寫說我不用讀資料惹,以上請參閱Datasheet.

接線的話SPI接SPI,CS接10,RDY接2,RST+PWN接3,4,其他就接電源

接下來就是要分析心跳和血氧量了

這東西搞了我一整個周末...先是改Library的各種bug,之後是改各種參數....從Led current到I-V轉換的參數,到放大器等等
Analog果然很難搞

2014年12月7日 星期日

HDC1000 + Arduino

最近Ti 出了一堆種類的ADC,從Capacitor 到 Inductor  到 Humidity sensor
上圖就是Humidity + Temperature Sensor HDC1000

原本是想要搞個pcb在用個熱風槍或啥的焊接,不過有點懶得在eagle做library所以就變成上圖那樣了....
還滿難搞的,尤其是第一隻腳,因為IC很難固定的住,黏上高溫膠帶之類的也只有一點幫助
線是從多心線拆下來的,手邊那麼細的線大概就只有這個了

總之接上Arduino 後(注意3.3V)
以下code

#include <Wire.h>

#define addr 0x41
uint16_t readingT,readingH;
void setup()
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("HDC1000 Test");
  sethdc();
}


void loop()
{
 readhdc();
 delay(1000);
}

void sethdc(){

   Wire.beginTransmission(addr);
   Wire.write(0x02);
   Wire.write(0x10);   //14 bit 14bit config MSB
   Wire.write(0x00);   //14 bit 14bit config LSB
   Wire.endTransmission();
   Wire.beginTransmission(addr) ; //check write success or not
   Wire.write(0x02);                      
   Wire.endTransmission();
   Wire.requestFrom(addr, 2);
if(2 <= Wire.available())  
{    
       readingT=0;
readingT = Wire.read();
readingT = readingT << 8;  
       Serial.print(" Config:");
Serial.println(readingT,BIN);  
}
   Wire.beginTransmission(addr);     //read ID
   Wire.write(0xFB);
   Wire.endTransmission();
   Wire.requestFrom(addr, 3);
if(3 <= Wire.available())  
{      
     readingT=0;
readingT = Wire.read();
readingT = readingT << 8;  
      Serial.print(" ID:");
Serial.print(readingT,BIN);
      Serial.println( Wire.read(),BIN);
}

}


void readhdc(){
        Wire.beginTransmission(addr);
        Wire.write(0x00);
        Wire.write(0x00);
        Wire.endTransmission();
        delay(20);

Wire.requestFrom(addr, 4);
if(4 <= Wire.available())  
{             readingT=0;
                readingH = 0;
readingT = (Wire.read()<<8);
                readingT+=Wire.read();
                readingH = (Wire.read()<<8);
                readingH+=Wire.read();
                Serial.print(" Temp:");
                Serial.print(readingT);
                Serial.print(" =>");
Serial.print(readingT/65536.0*165.0-40.0);  
Serial.print("  RH:");
                Serial.print(readingH);
                Serial.print(" =>");
Serial.println(readingH/65536.0*100.0);
}



}


2014年11月23日 星期日

自製USB to UART

 這其實是很久以前做好的,從這DIP混SMD的風格大概可以看的出來....
當然還有堆積的灰塵
總之,這是用Atmega32U2做成的USB轉UART,基本上就是UNO的那一個電路
連Fuse我也保留了
至於為啥那麼晚PO,主要的原因是因為當時我做完之後,發現出來的UART都是亂碼
那時候還沒有LA,所以找不到原因,用了之後就發現UART的時脈有問題,波形比正常的還要大三倍多然後就從震盪器開始追,最後發現了....AVR的FUSE沒有跟動過,當時燒錄的時候用的是Flip,沒有設定過新的,所以系統時脈有問題

基本上這個HEX檔案在Arduino的Hardware裡面有.也有附上FUSE設定的說明,之後用Avrdude+Arduino as ISP設定過就沒問題了

AVRDUDE(Arduino\hardware\tools\avr\bin)和他的config file(Arduino\hardware\tools\avr\etc\)
還有剛剛那個HEX file (Arduino\hardware\arduino\firmwares\atmegaxxu2\)copy到一個新的地方之後,就可以用CMD下指令
avrdude -p 改成你MCU的版本代號(m32u2,m16u2) -P Arduino的COMPORT -b 19200 -c avrisp -U flash:w:UNO-dfu_and_usbserial_combined.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m

2014年11月6日 星期四

Linkit one 電路解說


決定來把一些Linkit one的電路做一些介紹
   
        首先從供電電路來看,板子的正面供有兩組DC-DC,分別是5V降4.2V以及3.7V升5V
由於Linkit one 的主要SOC MT2502,其實是為了行動裝置用的,原先IC的設計上就是可以直接將鋰電池接進去,所以供電最高就是4.2V,因此電腦的5V接進來之後就需要經過降壓的DC-DC供電
給MT2502,

 又因為鋰電池運作的時候,為了5V的輸出,板子上另外有一個3.7V升壓到5V的DC-DC電路,

有意思的是鋰電池的充電其實是MT2502所控制的,並不需要一個獨立的IC去充鋰電池

       除了主要的供電迴路以外,其實還有兩個Backup的電池,就是左上角的兩個3V可充電鋰電池
一個是給MT2502做RTC,另一個是GPS的RTC,Seeedstudio應該是沒有上件,但是他所需要的一些限流電阻都有,所以可以直接拿一個3V的焊接上去,注意不能用3V鈕扣電池,因為這個電路接上電之後是會充電的,還有因為新的鋰電池需要充電,Seeedstudio設定的限流電阻還頗大的,所以需要一點時間充飽,好了之後內建的RTC就有斷電計時了

由左上角開始的IC:MT2502, 韌體存放的Flash, TXS0108與他快樂的MOS們, GSM RF IC ,WIFI IC,GPS IC

        在來就是最有意思的GPIO電路了,由於SOC的電平是2.8V準位,還有些是1.8V,所以需要準位轉換電路,最剛開始的時候用的是TXB系列,不過遇到Pull-up的電路就會失效,所以之後就改用TXS系列,剩下有另外一部分的IO是用MOS做電平轉換,好處就是其實每隻腳都是Pull-up的,所以對於一些按鈕的就不用另外設定或是外接上拉電阻,
        但是問題就是TXS的推力非常小,沒甚麼辦法供電給LED,如果你可以接受2.8V準位的話,其實是可以直接把TXS拿掉然後直接接到GPIO,他的供電電流就可以恢復變成15mA左右.不然的話就是直接用一個電晶體放大也是不錯的方案.而且在MCU直接接耗電量高的設備也是危險.

By the way,如果你想要5V的電平的話,其實也是可以把TXS的其中一個供電改成5V就成了,記得把別和3.3V的電線短路就好

    另外有趣的部分大概就是ADC電路了,其實MT2502內部的ADC準位是2.8V,而不是5V,為了能夠支援一些電壓可能會大於2.8V的狀況,所以電路板上其實是有一個分壓電阻的,直接將電壓除以2.也就是說,實際上1024位階對應到的是0~5.6V,但是又為了要支援Arduino的5V是1023的問題,於是就出現了底下這段程式碼:

他會將5V的重新MAP回去0~1024,所以對於需要精準ADC的人,可以將這段程式碼去掉,但是要注意他的電壓範圍將會變成0~5.6V

以上大概是Linkit one 的一些基本周邊電路的介紹了






2014年11月2日 星期日

升壓模組

摁,就只是個升壓模組,其實沒什麼特別的....

IV-18 真空管時鐘 beta2.0

總之這是第二版的試做,這是大概50%的beta版,主要是IV-18的holder加上他所需要的升壓板
這次我加了一個Attiny44來控制MAX6921,專門拿來掃描,這樣一來Arduino就不需要一直去掃描,使得程式速度不一樣而影響到亮度,
所以這次Holder就多了兩個IC,Attiny+MAX6921
不過下次應該還會再做一次,把升壓模組也放上去,因為空間還滿大的,不用白不用
另外就是應該有人發現了,這真空管亮度有點問題,這主要是燈絲的電壓造成的,我一來電阻搞太大,二來這又是用直流電,所以就悲劇了.下一版會用一個MAX628做燈絲電源的極性切換

LMX9838 breakout board

總之就是個藍芽模組

特色就是....底下這張圖
最高一對七,不過我手上的藍芽模組沒那麼多,和別人借了兩個測三個一起上
潮猛der,我還真沒看過可以同時一打七的藍芽2.0模組


不過我還在考慮它可以拿來做甚麼XD,想說要不把USB to UART放上去做一個超強的USB藍牙棒給Raspberry Pi 用

2014年10月11日 星期六

Attiny + PGA2311 音量控制器 第二版



突然發現好久沒發文了,作品生產率有點低,所以趕快把這個做完拿來貼
這次把耳機接頭的放回PCB板子上,佔了不少面積...
另外就是修正VR的線路沒接到的問題,還有就是這次VR的孔位特別預留了更大的位置,然後其他的部分不變,架構上一樣是一個OPA Buffer給PGA2311再用Attiny控制PGA2311這樣

至於為啥正負電壓產生器不放上去....
一來是沒啥地方放,二是就算把PCB加大面積,這種Charge pump的東西也是有一定的噪音在,要如何和OPA線路隔離也是種考驗,所以除非我找到一個迷你的Charge pump IC,而且夠力,還有好的小電容再說吧


#define PGA_ZCEN_PIN    3
#define PGA_CS_PIN      1
#define PGA_SDATA_PIN   0
#define PGA_SCK_PIN     2
#define VR              A2


int val;

int volume_left, old_l;
int volume_right, old_r;

void pga2311_init(void)
{
  pinMode(PGA_CS_PIN,    OUTPUT);    // pga-chipselect pin
  pinMode(PGA_SDATA_PIN, OUTPUT);    // pga-data-out (our data out to it) pin
  pinMode(PGA_SCK_PIN,   OUTPUT);    // pga-clock pin
  pinMode(PGA_ZCEN_PIN, OUTPUT);

}

void pga2311_enable_zero_crossing_detection()
{
  digitalWrite(PGA_ZCEN_PIN, HIGH);
}

void pga2311_disable_zero_crossing_detection()
{
  digitalWrite(PGA_ZCEN_PIN, LOW);
}

void SPI_write(uint8_t out_spi_byte )
{
  uint8_t  i;

  // loop thru each of the 8-bits in the byte
  for (i=0; i < 8; i++) {

    // strobe clock
    digitalWrite(PGA_SCK_PIN, LOW);

    // send the bit (we look at the high order bit and 'print' that to the remote device)
    if (0x80 & out_spi_byte) {  // MSB is set
      digitalWrite(PGA_SDATA_PIN, HIGH);
    }
    else {
      digitalWrite(PGA_SDATA_PIN, LOW);
    }

    // unstrobe the clock via local SPI
    digitalWrite(PGA_SCK_PIN, HIGH);

    // get the next bit
    out_spi_byte <<= 1;   // left-shift the byte by 1 bit
  }
}

void pga2311_mute()
{
  pga2311_set_volume(0, 0);
}


void pga2311_set_volume( uint8_t left, uint8_t right )
{
  // Gain (dB) = 31.5 − [0.5 * (255 − N)]

  digitalWrite(PGA_CS_PIN, LOW);     // assert CS

  SPI_write(left);    // left value (0..255)
  SPI_write(right);   // right value (0..255)

  digitalWrite(PGA_CS_PIN, HIGH);    // deassert CS
}



void setup()   {
  pga2311_init();
  pga2311_enable_zero_crossing_detection();

}

void loop()                  
{
 int Read =  analogRead(2);
 int val = map(Read, 0, 1023, 0, 255);
 pga2311_set_volume(val,val);
 delay(10);
 

}

2014年8月31日 星期日

Attiny + PGA2311 音量控制器

我知道這張照片看起來超醜......

總之,這次是把上次做的Arduino PGA2311音量控制器移動到Attiny去,Code基本上一樣,唯一變化的只有控制器改成用VR,電路基本上和之前的差不多,都是OPA Buffer完之後用PGA2311控制音量,最後由Attiny85控制.
Code Size基本上不到2K,所以其實是可以把85換成25or45,可能之後下一版出來我會把Attiny85挪作他用XD
至於為啥不用VR控制音量就好了這點在之前的作品就有說明了不再重複

然後就是為啥要有第二版?....因為這版悲劇的點不少
第一就是那條跳線很煩..仔細看的話會發現那條是接再VR的輸出,結果我剛接上去發現都沒聲音,還以為PGA2311壞了....
第二就是VR的大小,原先要用的是 比較小的版本,但是通常外面都不好買,所以下次要改成兩種版本都能用的
第三就是那個耳機接頭,真的___難搞,下次應該要把耳機接頭腳位也留在上面的
第四我還在考慮的就是要不要把正負電壓產生器也放上去,可能要先量一下整機的耗電量再來看吧

2014年8月10日 星期日

CC3000 Breakout board

首先是第一版:
這一版就是https://github.com/kuym/TICC3000Breakout
用的是PCB天線,而不是陶瓷天線,可以省下一些找料件的麻煩,但是這一版有很大的問題
那就是天線走線竟然有90度的直角出現 = =" 而且我沒注意到就直接送洗了....
第二版改成用u.fl直接接出來,省的麻煩,天線走線也改了一下
還有就是把I2C接腳拉出來
另外就是電源的部分,
CC3000需要兩個供電,一個是VBAT,是主要的供電,會輸入到內建的Step-down轉成1.8V左右
Input range 是2.7~4.8
另一個則是VIO,主要是供應內建的電平轉換IC將1.8V的通訊轉換成VIO的電平,Input range是1.8~3.6V
結果我看到一堆CC3000 breakout 都是兩個接再一起再用一個3.3V的LDO解決
問題是我現在的使用方式都是接上鋰電池使用,電壓在3~4.2V,那為啥不直接接到VBAT去就好了,還要經過LDO轉3.3V再用DC-DC轉成1.8V?這樣有點浪費了
所以我把3.3V的部分直接導到VBAT,再用一個LDO給VIO使用,中間留有一個Jumpper可以把兩個短接保留原先的電路設計
我想這次重點有兩個,第一個是天線走線的設計,
另外一個就是CC3000的焊接了,這次我買了一個熱風槍來焊接,
先在兩個零件都上錫,再用熱風槍吹阿吹的,融化了之後就會發現他沉下去,而且稍微一動一下還會回彈,這時候輕壓一下就焊接完了
重點是錫不能上太多,不然輕壓的時候就會溢到另外一隻腳就短路了
還有最後一個重點,有的時候CC3000沒辦法用不是因為他壞了,有的時候是線的問題......
這害我誤以為我焊接壞了...然後又拿去Rework...
最後一點...光華沒有U.FL的天線座不用找了 = =


2014年8月9日 星期六

PCM5122 DAC for Raspberry pi

這就是上次pcm5122 DAC with RPI的PCB版
首先就是這次把DVCC和電容幫浦的CPVCC接再一起,
而AVCC則是用一個LDO從5V降到3.3V供應
在來就是LDO這次的設計可以支援多種EN,BP的設計,要接VCC或是接GND都可以選擇
大概就只差5V進去的時候有沒有加電感了吧
還有就是PCM5122用I2C控制,所以可以看到板子上比之前的PCM5102a DAC多了兩個i2C的接點,
然後就是這次在i2S的線路上增加電阻damping

Driver直接用IQaudIO的,這樣就比之前的PCM5102a DAC多了音量控制

2014年7月24日 星期四

HDD POV prototype


最近東西買太多,所以回頭看看我手上有什麼沉積已久的東西可以搬出來玩一玩
拿了一個HDD出來,想說好久沒用了拿來跑一跑看看狀況,原本用的是HDD機板上讓硬碟轉起來
但是找到個Ti的三相馬達控制器,這樣我就可以用Arduino控制轉速,就只要給PWM訊號而已

3.5"需要外接12V電源,但是2.5"就不用了

再來就是剛好想到我以前做過一個LED燈條,原本就打算要做成POV的,但是因為那時候是打算用手,麻煩到爆,所以沒做,這時候剛好派上用場
所以把以前做的TLC5940 16 LED PCB拿來,和HDD一起做成POV


整台為了簡化線路(翻譯:Arduino mini pro用完惹,不太想拆新的來用),所以用的是Attiny85控制
但是目前的旋轉燈條還是太大個....大都是因為鋰電池和麵包版的關係,不然Attiny85+TLC5940 LED PCB,其實面積不大,之後打算是將鋰電池換成更小的,麵包版去掉,Attiny85直接接上去,連洞洞板都不要接了

2014年7月13日 星期日

正負電壓產生器

 如同標題,這張電路可以把正電壓轉換成正負電壓
原理就是用一個Charge-pump將正電壓轉換成負電壓,再將正負電壓都送到兩個LDO穩壓+去噪音,
接下來檢討一下....
首先是這那個Charge-pump用的電容,當初就該先找好零件,而不是Layout的時候想著說"阿0805怎麼可能沒有47uF的好電容",然後看著僅剩的Y5R想說到底該不該用....
最後當然還是沒買Y5R...只好回家找有沒有可以用的OS-CON可以用,結果就變上圖那樣...慶幸這位置還好焊接...
在來就是電容放在接頭以外實在是很蠢....
最後是Layout如果想用在麵包版上的話,除了插針的間隔要0.254mm的倍數以外,還得要把板子的長度限制在12*0.254mm....不然超過的話是要怎麼插   = =
這板子大概以後會常出現在我的其他電路中了,不然正負電壓實在是很難找,原本的線性正負電壓得要接室電,現在這個可以直接給5V就好了 = =+

2014年6月29日 星期日

IN-9 音量顯示器 試搭

 這東西很簡單,如題所示,就是個音量顯示器
所以用耳機接頭接進來之後,先用OPA放大,再用一對OPA控制恆流源
電路圖如下:
一個可變電阻控制放大倍率,一個調整恆流源
現在是搭在麵包版上,所以還滿亂的....
過陣子我可能會用一個Quad OPA和一個洞洞板搭起來

2014年6月24日 星期二

Arduino 氣象站 Ver4.2 WIFI

簡單來說,我之前做的WIFI氣象站都遇到了一個問題,那就是傳送時間太太太久了,
最初是直接修改Adafruit的Code,沿用.Json的格式,之後為了改進傳送速度,改成了.Csv的格式
但是之後就一直沒有辦法再壓低時間,啟動時間還是將近25s,算下來再耗電量貢獻了90%以上,
待機耗電量的影響幾乎消失,耗電量的主導權也在啟動時間上面,

之後FB上有人推薦用MQTT這個Protocol,可以顯著的壓低傳送的資料量,於是這次改版的重點就是將Xively的上傳資料方式從Http改成MQTT

首先是把程式先宣告
cc3000_PubSubClient mqttclient(ip, 1883, callback, client, cc3000);
再來就是用Adafruit的CC3000 library連上Xively的Server,他提供給MQTT的Port是1883
client = cc3000.connectTCP(ip,1883);
接下來是用MQTT library連接 Xively的HOST:
mqttclient.connect("隨便一個名子", "API_KEY填到這裡", "");
最後就可以用mqttclient.publish("/v2/feeds/FEED_ID填這裡.csv", buf);
要注意的是,檔案格式也有.JSON,.XML還有.CSV, Buf限定Char array
這樣就可以了

於是這樣一改,啟動時間從25s下降變成3~5s,顯著地降低耗電量,接下來就是另外一個問題了,
我的測試中,CC3000似乎不能直接用IP連結HOST,非得要先DNS Lookup才能上傳資料,這大概是接下來要研究的問題了

(Update這個問題,我發現是因為檢查有沒有連上AP的Flag在斷線後沒有清掉,導致還沒連線成功就開TCP Socket就失敗了


Arduino 蓋革計數器

 先解釋一下上圖好了,盒子內有Arduino Pro,一個i2C 1602LCD,蓋格管的電路板,SBM-20蓋格管
左邊的是PocketGeiger,拿來和Arduino蓋格計數器做比較


蓋革管是一種可以檢測輻射線的管子,通一個高壓電之後,如果有輻射線(看管子可以檢測哪幾種)進到管中,會電離內部的氣體,造成瞬間的導通,在另一端產生脈衝的信號,
蓋格計數器就是紀錄這些事件的次數,算出來當下的Count per minute (CPM)每分鐘事件數,就可以利用簡單的式子換算成輻射強度(uSv/h)
現在用的是SBM-20,還算滿普遍的蓋革管,便宜好用XD,可以檢測Beta和Gamma射線

我用http://brohogan.blogspot.tw/2010/02/geiger-counter.html這個人的電路圖,Layout出蓋革計數器最主要的電路板,重點就是,記得用CMOS的555(LM555 or TLC555),NE555是不能用的..Orz
我去光華買的時候到處都找不到QQ,有一家問完LM555拿NE555給我,最後乾脆去RS買TLC555,一個13塊還可以免運費,超棒的

另外就是校正的問題了,基本上這個電路板會產生400v的高壓,但是電流非常非常少,我被電到的感覺沒有Nixie的200v升壓板來的麻.但這也造成再測量電壓的時候需要考慮電表的內電阻,
首先就是先查出來或是量出來電表的內電阻是多少,我自己的電表是10M,
然後量輸出的電壓,量完之後,因為上圖的電路在末端還有兩個共5.7M的電阻,電路圖如下:
Vin是電路板的供應電壓,Vout是電表的電壓,Ra是5.7M歐姆,Rb是電表的內電阻,由此就可以算出來實際的Vin是多少了,蓋革管的電壓太高的話一下子就會故障的

這支SBM-20的建議電壓是400V,調整電路圖的R7就可以了

我自己送洗的電路板長的如下XD,對了,蓋革管千萬別用焊接的,這樣會讓他損壞,用兩個保險絲的Holder剛剛好(我買的是20mm直徑)

接下來就是利用Arduino的外部中斷(INT),當蓋革管有事件時,電路會輸出一的低電壓的脈衝,需要注意的是這張電路板的INT接上Arduino之後,需要一個Pullup才能正常運作
程式就簡單了,架構就是讓每一次INT腳的電壓下降的時候,讓計數器+1
等到一段時間之後計算輸出CPM,再利用下圖的公式計算uSv/h,需要注意的是每一種管子的常數都不一樣,SBM-20的話就用175
程式如下:


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x20,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

const int alpha = 175;
long count = 0;
long countPerMinute = 0;

void setup()  { 
  lcd.init();                    
  lcd.backlight();
  lcd.print("Sbm-20");
  digitalWrite(2,HIGH);
  attachInterrupt(0,countPulse,FALLING); 
  
  
  Serial.begin(9600); 

}

void loop()  { 
  
  delay(15000); 
  countPerMinute = 4*count; 
  float uSv = float(countPerMinute) / float(alpha);
  char charBuf[15];
  String uSvv = dtostrf(uSv, 5, 3, charBuf);

  Serial.println(countPerMinute,DEC);

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("CPM:");
  lcd.print(countPerMinute,DEC);
   lcd.setCursor(0,1);
  lcd.print("uSv/h:");
  lcd.print(uSvv);
  count=0;                  
}


void countPulse(){
  detachInterrupt(0);
  count++; 
  digitalWrite(13, HIGH);
  while(digitalRead(2)==0){
  }
  digitalWrite(13, LOW);
  attachInterrupt(0,countPulse,FALLING);
}

不知道為甚麼,這電路做出來有種老儀器老電路的感覺,不知道是不是因為電阻直立看起來滿密集的關係.