Arduino Nanoで作る高周波対応周波数カウンター – 6.5MHzまで測定可能
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | |
| 16x2 LCDディスプレイ(白文字/青背景) | 1 | パラレル接続 |
| 汎用NPNトランジスタ | 1 | 入力信号整形用 |
| スライドスイッチ | 1 | 測定時間切替(0.1/1/10秒) |
| タクトスイッチ | 1 | モード切替用 |
| 抵抗・コンデンサ・ダイオード各種 | 1式 | 整形アンプ回路用 |
必要な工具・環境
- はんだごて
- Arduino IDE
FreqCountライブラリ(GitHub)
プロジェクト概要
Arduino NanoとFreqCountライブラリを使った周波数カウンターです。矩形波・正弦波・三角波に対応し、測定範囲は数Hz〜6.5MHz。測定ゲートタイムを0.1秒、1秒、10秒の3段階で切替可能です。矩形波のみなら整形アンプなしでデジタルピン5に直接入力できます。

構成
- Arduino Nanoマイコン
- 整形アンプ基板(正弦波/三角波を矩形波に変換)
- LCDディスプレイ
- 入力信号種別セレクター
- 入力ジャック
- ゲートタイム切替スイッチ(0.1s / 1s / 10s)
キャリブレーション方法
- Arduinoライブラリフォルダ内の
FreqCount.cppを開く - 以下の行を探す:
#if defined (TIMER_USE_TIMER2) && F_CPU == 12000000L float correct = count_output * 0.996155; - 以下のように書き換え(16MHz動作の場合):
#if defined (TIMER_USE_TIMER2) && F_CPU == 16000000L float correct = count_output * 1.000000; // ここを補正係数に - 1MHzの既知信号を入力し、表示値が1.000000MHzになるよう係数を調整
- 書き換え後、スケッチを再アップロード
スケッチ
#include <FreqCount.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 6, 4, 3, 2); // RS, E, D4, D5, D6, D7
void setup() {
lcd.begin(16, 2);
pinMode(7, INPUT); // モード切替スイッチ
FreqCount.begin(1000); // 初期ゲートタイム 1秒
}
unsigned long f;
float f0;
int x = 0, n = 3, r;
void loop() {
// モード切替スイッチ(タクトスイッチ)
if(digitalRead(7) == HIGH) {
n++; x = 0; delay(100);
}
// ゲートタイム設定
lcd.setCursor(0,1);
if(n == 1) { if(x==1){FreqCount.begin(100);} r=-1; lcd.print("T = 0.1 s "); }
if(n == 2) { if(x==1){FreqCount.begin(10000);} r=1; lcd.print("T = 10 s "); }
if(n == 3) { if(x==1){FreqCount.begin(1000);} r=0; lcd.print("T = 1 s "); }
if(n > 3) n = 1;
// 周波数表示
lcd.setCursor(0,0);
lcd.print("F = ");
if(FreqCount.available()) {
f = FreqCount.read();
lcd.setCursor(10,1); lcd.print("***");
}
// 単位と桁数の自動切替
if(n == 3) { // 1秒ゲート
if(f >= 1000000) { f0 = f/1000000.0; lcd.print(f0, 6+r); lcd.print(" MHz"); }
else { f0 = f/1000.0; lcd.print(f0, 3+r); lcd.print(" kHz"); }
}
else if(n == 1) { // 0.1秒ゲート
if(f >= 100000) { f0 = f/100000.0; lcd.print(f0, 6+r); lcd.print(" MHz"); }
else { f0 = f/100.0; lcd.print(f0, 3+r); lcd.print(" kHz"); }
}
else if(n == 2) { // 10秒ゲート
if(f >= 10000000) { f0 = f/10000000.0; lcd.print(f0, 6+r); lcd.print(" MHz"); }
else { f0 = f/10000.0; lcd.print(f0, 3+r); lcd.print(" kHz"); }
}
delay(200);
lcd.clear();
}
回路図

製造プロセス
- Arduinoで作るレトロNumitron管時計:シンプル、信頼性高く、省エネ
- Arduino Nanoで20kHzオシロスコープを自作:Nokia 5110 LCD搭載・簡易DIYガイド
- Arduino Nanoで37LEDルーレットゲームを自作:ヨーロピアンスタイル完全再現
- DIY ADXL335地震検知器 - 低消費電力3軸加速度センサープロジェクト
- 862D+はんだごて用DIY温度コントローラー:精度と信頼性を両立
- 自作16×8 LEDマトリックスでテトリスゲーム:Arduino Nano実装
- MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
- Never Ride Alone:サイクリストのためのスマート安全システム
- XORゲートとNORゲートによる4ビットコンビネーションロックの設計
- マルチメーター:アナログからデジタルまで包括ガイド
- AC電力システムにおける周波数と位相の測定