Arduino工作クイズに挑戦!アナログ入出力、通信プロトコル、タイミング制御など、Arduinoボードをフル活用するために必要な基本知識が試されるクイズ10問をご用意しました。Arduinoの仕組みや活用方法をさらに理解を深めるチャンスです。初心者からベテランまで、Arduinoユーザーなら誰でも楽しめる内容となっています。さあ、クイズに挑戦して、Arduinoの基礎を振り返ってみましょう!
Q1 : Arduino UnoでSPI通信におけるMISO(Master In Slave Out)が割り当てられているデジタルピンはどれか?
Arduino UnoのハードウェアSPIピンはデジタル11がMOSI、デジタル12がMISO、デジタル13がSCK、デジタル10がSS(スレーブセレクト、マスター時は出力)です。MOSI/MISO/SCKはICSPヘッダにも同等の信号が出ているためシールドや別基板で利用されることが多いです。ピン配置を間違えると通信が成立しないため正しい割り当てが重要です。
Q2 : Arduinoで内部プルアップ抵抗を有効にする標準的な記述はどれか?
内部プルアップを有効にする標準的で推奨される書き方はpinMode(pin, INPUT_PULLUP)です。これによりピンは入力でプルアップ有効となり、スイッチをGNDに接続して押下でLOWを検知するような回路が簡単に組めます。digitalWrite(pin, HIGH)をINPUT状態で行うと内部プルアップが動作する古いテクニックもありますが、可読性と互換性のためINPUT_PULLUPが推奨されます。
Q3 : 機械式スイッチのチャタリング対策として一般的に推奨されるソフトウェアでのデバウンスタイムの範囲として最も適切なのはどれか?
機械式スイッチのチャタリングは通常数ミリ秒から数十ミリ秒の範囲で発生するため、ソフトウェアデバウンスとしては約10〜50ミリ秒程度の待ち時間を入れるのが一般的で、安全側に取って約20ミリ秒とすることが多いです。短すぎるとチャタリングを取り切れず誤検出、長すぎると応答性が悪くなります。より堅牢にはタイムスタンプ比較や状態遷移カウント、ハードウェアRCフィルタの併用が有効です。
Q4 : Arduinoのmillis()関数が返す値(unsigned long)はオーバーフローしてリセットされるのは大体どれくらい経過した時か?
millis()は32ビット符号なし整数(unsigned long)でミリ秒を返すため、2^32ミリ秒(約4,294,967,296ms)で0に巻き戻ります。これは約49.7日(正確には約49.710278日)に相当します。オーバーフローを考慮したコード設計(例:unsigned long差分を用いた比較)を行えば巻き戻しを安全に扱えます。
Q5 : Arduino UnoなどのデジタルI/Oピンからの推奨持続電流(1ピンあたりの連続使用上の目安)はどれか?
Arduino Unoの各デジタルピンはデータシート上の絶対最大定格で40mA程度ですが、長期的に安全かつ確実に使う上での推奨連続電流は約20mA程度です。複数ピンでの合計電流制限やVccレギュレータ、USB供給能力も考慮する必要があります。高電流が必要な場合はトランジスタやドライバを使うべきです。
Q6 : 遅延させずにタイミング処理を行いたいときに一般的に使う方法はどれか?
delay()は処理をブロックするため複数の并行処理が必要な場合には不向きです。非ブロッキングにする一般的な手法はmillis()で現在時刻を取得し、前回の時刻との差分を計算して一定時間経過したら処理を行う方法です(いわゆるタイマー判定パターン)。これにより他の処理や入出力監視を継続しつつ定期処理が可能になります。
Q7 : Arduinoの10ビットADCで読み取った値を基に電圧に変換する標準的な式はどれか?(Vrefを基準電圧とする)
10ビットADC(0〜1023)の場合、AD変換値を電圧に直す標準式は「電圧=読み値×Vref/1023」です。ゼロが0V、最大1023がほぼVrefに対応するため分母は1023になります。実用上は1024で割る近似を使うこともありますが、理論的には1023が正確です。Vrefが5VやAREFで設定されているか、電圧分圧やリファレンス安定性を考慮することが重要です。}
Q8 : ArduinoでPWM出力を行う際に値を設定するために使う関数はどれか?
analogWrite関数はArduinoのデジタルPWMピンに疑似アナログ出力を与える際に使います。多くのボードでは0〜255の範囲でデューティ比を指定し、Unoでは約490Hz(特定ピンでは約980Hz)の周波数でPWMが生成されます。digitalWriteは単純なHIGH/LOW、analogReadはアナログ入力の読み取り、pinModeはピンの入出力設定なのでPWM値設定にはanalogWriteを使うのが正解です。
Q9 : Arduinoの標準的な10ビットADCを持つボード(例:Uno)でanalogRead関数が返す値の範囲はどれか?
Arduino Unoなどの10ビットADCは0〜1023の整数値を返します。これは2の10乗である1024段階を0から1023で表すためです。返された値に基づき参照電圧(通常は5VまたはAREFに設定した値)を対応させて電圧を計算します(例:電圧=読み値×Vref/1023)。12ビットADCを持つボード(例:Due)は0〜4095を返す点に注意してください。
Q10 : I2C通信でArduino Unoの標準的なSDAとSCLピンに割り当てられているアナログピンはどれか?
Arduino UnoのハードウェアI2C(TWI)はアナログピンのA4がSDA、A5がSCLに割り当てられています。近年のボードではヘッダにSDA/SCLラベルが付くこともありますが、基板上ではA4/A5に接続されています。I2Cではラインにプルアップ抵抗が必要であり、複数デバイス接続時にアドレス競合や電圧レベルに注意する必要があります。