ここで配布されているライブラリを使用
http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/
周波数をカウントするためのピンはデジタルの5番で固定されているので、LCDのピン配置をちょっと変則的に移動。
LCDがあるならシリアルモニタに出力はなくてもいいだろう。
#include <LiquidCrystal.h> #include <FreqCounter.h> LiquidCrystal lcd(12, 11, 10, 6, 4, 3, 2); void setup() { // put your setup code here, to run once: // Serial.begin(9600); // connect to the serial port // Serial.println("Frequency Counter"); lcd.begin(2,16); lcd.clear(); lcd.print("Frequency Counter"); delay(200); } long int frq; void loop() { // put your main code here, to run repeatedly: 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 lcd.clear(); lcd.print(frq); lcd.print(" Hz"); delay(80); }
なお矩形波の発生にはオペアンプのコンパレータ機能を使った回路を組んでみた。
コンデンサに0.1µFの積層コンデンサを使い、半固定抵抗に5kΩを使った。
抵抗値を5kΩに振り切って125 HzなのでFreq=0.625/CRって感じかな?
理論値0.7215とずれているのは半固定抵抗の精度が低い?