這東西很簡單,如題所示,就是個音量顯示器
所以用耳機接頭接進來之後,先用OPA放大,再用一對OPA控制恆流源
電路圖如下:
一個可變電阻控制放大倍率,一個調整恆流源
現在是搭在麵包版上,所以還滿亂的....
過陣子我可能會用一個Quad OPA和一個洞洞板搭起來
2014年6月29日 星期日
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就失敗了
最初是直接修改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直徑)
不知道為甚麼,這電路做出來有種老儀器老電路的感覺,不知道是不是因為電阻直立看起來滿密集的關係.
左邊的是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