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);
}

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

2014年6月23日 星期一

PCM5122 with Raspberry Pi

 自從上次弄完Pcm5102 DAC之後,總是有點遺憾

因為他的輸出只有line out只能使用軟體控制音量


所以腦筋動到了他的近親-PCM5122,這基本上是Pcm5102加了mini DSP進去

然後還可以控制音量,控制方式也有三種,HW,I2C,SPI


不過我做完之後卡在要怎麼讓Raspberry Pi控制他

結果我發現已經有人做過了XDDD

那就是iqaudio出的RPI DAC
於是就直接用他的Driver驅動就可以了


然後進到設定頁面後點iqaudio

最後修改etc/mpd.conf 就可以用Pcm5122的音量控制
宇宙無敵精簡版 精簡到連LPF都先拿掉了

 基本上PCM5122用i2C控制,整體線路圖如下,想DIY的直接搭棚上吧~
 然後i2C,i2S接上RPI,SCK接地

接下來可以Layout一個Pcm5122 DAC給Rpi用了
最近又預購了一個"有機肥",想說拿來做一個Airplay的小喇叭XDDD


然後題外話,我好希望Smartconfig的功能可以出現在RPI上....
省的還得要先接有線網路才能設定
然後還有Volumio 1.4版改好大,變得更好用了