Arduinoで遊ぼう - 周波数カウンタ
Posted by arms22 on 2009年06月23日

テルミンの製作でハートレー発振回路の発振周波数を調節する必要がでてきた。何とかArduinoで測定出来ないかと、Arduinoで周波数カウンタを作れないか調べてみた。すると次のページで「Freq Counter」という高精度、高解像度の周波数カウンタライブラリが公開されていた。
Arduino Frequency Counter Library
入力はデジタル端子の5番に固定されていて、この端子はT1の16ビットハードウェアカウンタにマッピングされている。入力信号はデジタルレベルである必要があり、微弱信号はトランジスタか、74HC14インバータを使って増幅させる必要がある。
入力できる周波数は最大8MHz(デュティー50%時)。
使い方
1.上記のページからFreq Counterライブラリをダウンロード
2.ライブラリを解凍し、arduino-0016/hardware/librariesにコピー
3.新しいスケッチを開いて、Sketch->Import Library->FreqCounterを選択
プリアンプ回路図
※トランジスタは2SC1815でOK。
サンプルスケッチ
#include <FreqCounter.h>
void setup() {
Serial.begin(9600); // connect to the serial port
Serial.println("Frequency Counter");
}
long int frq;
void loop() {
FreqCounter::f_comp = 8; // Set compensation to 12
FreqCounter::start(100); // Start counting with gatetime of 100ms
while (FreqCounter::f_ready == 0); // wait until counter ready
frq = FreqCounter::f_freq; // read result
Serial.println(frq); // print result
delay(80);
}
Making Things Talk -Arduinoで作る「会話」するモノたち
posted with amazlet at 09.06.24
Tom Igoe
オライリージャパン
売り上げランキング: 15890
価格: ¥ 3,990
オライリージャパン
売り上げランキング: 15890
価格: ¥ 3,990
Ads by Google
9 Comments
はじめまして。
いつも勉強させて頂いております。
40MHz前後の周波数を計測したいのですが、Arduinoではどうしても無理でしょうか?何か外部回路を工夫して上記レベルの周波数をSDカードに流し込みたいのですが。もしお知恵が御座いましたらよろしく御教授お願い致します。
いつも勉強させて頂いております。
40MHz前後の周波数を計測したいのですが、Arduinoではどうしても無理でしょうか?何か外部回路を工夫して上記レベルの周波数をSDカードに流し込みたいのですが。もしお知恵が御座いましたらよろしく御教授お願い致します。
40MHzのアナログ波形をサンプリングしてSDカードに保存したい、ということ?
それはデジタルオシロスコープ買ったほうがいいんじゃないかと。。
40HzぐらいならADCぶん回して保存すればいいと思います。
ADCは割り込みで駆動で、サンプリングした値はある程度バッファリングさせて
一気にSDカードに書き込むようにすれば途切れなく保存できるんじゃないかな。たぶん。
ただSDカードへの書き込み速度が遅いのでちょっと厳しいかもしれません。
それはデジタルオシロスコープ買ったほうがいいんじゃないかと。。
40HzぐらいならADCぶん回して保存すればいいと思います。
ADCは割り込みで駆動で、サンプリングした値はある程度バッファリングさせて
一気にSDカードに書き込むようにすれば途切れなく保存できるんじゃないかな。たぶん。
ただSDカードへの書き込み速度が遅いのでちょっと厳しいかもしれません。
このブログで色々勉強しています。
発展途上国に電気部品を出荷していますが、電力事情が悪く現地の電圧のロガーを作ろうとしています。電圧に関しては電力計のスケッチを参考にして信号用のトランスでSDカードに記録しようと思います。周波数も変わるとの事で電力計のスケッチで波形を記録するとデータが大きくなるので、この周波数カウンタで記録しようと思いますが下記のエラーが出て上手く書き込み出来ません。IDE1.04です。
sketch_may01a.ino: In function 'void loop()':
sketch_may01a:10: error: 'FreqCounter' has not been declared
sketch_may01a:11: error: 'FreqCounter' has not been declared
sketch_may01a:12: error: 'FreqCounter' has not been declared
sketch_may01a:13: error: 'FreqCounter' has not been declared
夏場の瞬時停電を検出する為に1秒毎に電圧、周波数をSDに記録しようと思います。期間は1週間程度。
もしお手間で無ければご助言頂けると幸いです。
発展途上国に電気部品を出荷していますが、電力事情が悪く現地の電圧のロガーを作ろうとしています。電圧に関しては電力計のスケッチを参考にして信号用のトランスでSDカードに記録しようと思います。周波数も変わるとの事で電力計のスケッチで波形を記録するとデータが大きくなるので、この周波数カウンタで記録しようと思いますが下記のエラーが出て上手く書き込み出来ません。IDE1.04です。
sketch_may01a.ino: In function 'void loop()':
sketch_may01a:10: error: 'FreqCounter' has not been declared
sketch_may01a:11: error: 'FreqCounter' has not been declared
sketch_may01a:12: error: 'FreqCounter' has not been declared
sketch_may01a:13: error: 'FreqCounter' has not been declared
夏場の瞬時停電を検出する為に1秒毎に電圧、周波数をSDに記録しようと思います。期間は1週間程度。
もしお手間で無ければご助言頂けると幸いです。
こちらのURLからArduino 1.0に対応したライブラリをダウンロードして試してください。
最新版で正常にビルドできることを確認しました。
http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/
最新版で正常にビルドできることを確認しました。
http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/
おやすみのところご連絡ありがとうございます。
frequency counter lib exampleで同じエラーが出てしまいます。
他いろいろな情報も参照していますが良くわかりません。namespace等も調べてみましたが、どこかで手順を間違っているように思います。zipを展開してフォルダーをライブラリーにコピーすると同じタブが出ているのでファイルを消してみたりもしましたがどうも上手く行きません。他の人のブログを見る限り私のような事は起こっていないのでいろいろしてみました。
frequency counter lib exampleで同じエラーが出てしまいます。
他いろいろな情報も参照していますが良くわかりません。namespace等も調べてみましたが、どこかで手順を間違っているように思います。zipを展開してフォルダーをライブラリーにコピーすると同じタブが出ているのでファイルを消してみたりもしましたがどうも上手く行きません。他の人のブログを見る限り私のような事は起こっていないのでいろいろしてみました。
商用電源60hz位までなのでpulseInでパルスの長さで計算出来るので実験してみました。8000−8600位の数字が出ていたので参考位になります。周波数カウンターはまた後日挑戦してみます。電力計等もあわせて大変参考にりました。ありがとうございます。
何とか出来ました。他のページが参考になりました。ありがとうございました。取り敢えず今回の目的はpulseinで進めます。freqcounterも出来るようになりました。
このコメントは管理人のみ閲覧できます
使用できないというのはコンパイルエラーが発生するということでしょうか?
tone関数はArduinoのコアライブラリに組み込まれているので特別なライブラリは必要ないです。
もし正しく動作しないという場合、freccounterで使用しているタイマー1がtone関数でも使われている可能性があります。
tone関数はArduinoのコアライブラリに組み込まれているので特別なライブラリは必要ないです。
もし正しく動作しないという場合、freccounterで使用しているタイマー1がtone関数でも使われている可能性があります。
Leave a reply
該当の記事は見つかりませんでした。