ESP32 チュートリアル 55/55 - 12V、24V、または 100V の DC 電圧を測定する方法 | SunFounder の ESP32 IoT 学習キット
このチュートリアルでは、ESP32を使用して12V、24V、さらには100VまでのさまざまなDC電圧を測定する方法を学びます。2つの抵抗器で構成されたボルテージ・ディバイダー回路を利用することで、ESP32マイクロコントローラを損傷することなく高い電圧を安全に測定できます。このプロジェクトでは、これらの電圧を読み取り、シリアルモニタに表示する方法を示し、電源についての貴重な洞察を提供します。
ビデオを視聴して、包括的な説明を確認してください(ビデオの00:00)。今回はシンプルな電圧分割器の構成を使用して、ESP32の最大入力レベルを安全に超える電圧を測定できるようにします。このチュートリアルは、ESP32およびその機能についての知識を深めたい方に最適です。
電圧を計算するための公式
ハードウェアの説明
このプロジェクトの主要なコンポーネントには、ESP32マイクロコントローラー、電圧分割を形成する2つの抵抗、および測定したい電源が含まれています。ESP32は内蔵のWi-FiとBluetooth機能を備えており、IoTプロジェクトにとって多目的な選択肢となります。2つの抵抗で構成された電圧分割器は、ESP32が処理できる安全なレベルに電圧をスケールダウンすることを可能にします。
このセットアップでは、1つの抵抗器、R110kΩに固定されており、二番目の抵抗器、R2測定したい最大電圧によって異なる場合があります。電圧はR1ESP32のアナログ入力ピンを使用して読み取るものであり、これにより電源からの元の電圧を計算することができます。
- 抵抗器は正確な測定のために1%の公差であることを確認してください。
- ESP32の入力電圧定格を超えないように、ボルテージディバイダーを使用してください。
- 維持する
R110kΩで調整するR2電圧範囲に基づいて。 - 接続を確認して、誤った読み取りにつながる浮遊入力を避けてください。
- 一貫した電圧測定のために安定した電源を使用してください。
配線指示
回路を配線するには、まず一端を接続します。R1抵抗器(10kΩ)を電圧源に接続し、もう一方の端をESP32のGPIOピン35に接続します。このピンは電圧を読み取ります。R1. 次に、接続するR2ジャンクションポイントの間に抵抗器(必要に応じて100kΩまたは他の値にすることができます)R1そしてグラウンド。電源のグラウンドもESP32のグラウンドに接続されていることを確認してください。
例えば、24Vを測定する場合は、電源の正端子を接続します。R1その後、もう一方の端を接続します。R1ピン35と2つの抵抗器の接続点。自由端のR2接地する必要があります。この構成により、ESP32は安全にスケーリングされた電圧を読み取ることができます。
コードの例とウォークスルー
const int R1 = 10000; // Resistor 1 value
const int R2 = 100000; // Resistor 2 value
const int VinPin = 35; // Voltage input pin
この抜粋では、抵抗器の値を定義します。R1そしてR2およびアナログピンVinPin私たちが電圧を測定するために使用するこれらの定数は、電圧の計算にとって重要です。
void readVoltage() {
uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Read in millivolts
VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}
この関数は、指定されたピンからミリボルト単位の電圧を読み取り、実際の電圧を計算します。VB1電圧分圧回路の公式を使用します。これは、スケールダウンされた電圧を元の値に戻すために重要です。
void maxVoltage() {
float maxVoltage = (3.1) * (1 + (float)R2/(float)R1);
}
ここでは、抵抗値に基づいて安全に測定できる最大電圧を計算して印刷する関数を定義します。この関数は、ESP32の電圧制限を超えないようにするために重要です。
デモンストレーション / 期待されること
コードを実行すると、シリアルモニターに測定された電圧が表示されるはずです。入力電圧を調整すると、読み取り値がこれらの変化をリアルタイムで反映し、ESP32がさまざまなDC電圧を正確に測定できることを示します。読み取り値に変動がある場合は、より安定した結果を得るために複数のサンプルを平均化することを検討してください(ビデオの12:30で)。
動画のタイムスタンプ
- 00:00 開始
- 1:59 プロジェクトの紹介
- 5:45 ボルテージディバイダ
- 7:33 配線の説明
- 9:14 Arduinoコードの説明
- 14:45 Arduino IDEでESP32ボードとCOMポートを選択中
- 16:27 ESP32を使用した30Vの測定デモンストレーション
- 21:36 R2を330kオームに変更しました
- 22:33 最小電圧測定
/*
* ESP32で任意のDC電圧を測定するためのArduinoコード
* 著者: アーマド・シャムシリ
* ビデオの全編説明を見る https://youtu.be/znBiVlgV9JI
* www.robojax.com
* 2024年2月19日
*/
bool debug = false;
const int R1 = 10000; // この抵抗器にかかる電圧を読み取ります。
const int R2 = 100000;
const int VinPin = 35; // GPIO14に接続されたポテンショメータ
// PWM設定
const int freq = 5000; // PWM周波数
const int resolution = 12; // PWM解像度(ビット)
const int channel = 0; // PWMチャネル
float VB1;
int mV;
void setup() {
Serial.begin(115200);
// PWMを設定する
ledcSetup(channel, freq, resolution);
// 抵抗を計算する(R1, 24);//10000オームおよび35.0V
}
void loop() {
readVoltage();
Serial.print("VB1 Voltage: ");
Serial.print(VB1); // ミリボルトをボルトに換算する
Serial.println("V ");
delay(500);
}
void readVoltage()
{
uint32_t voltage_mV = analogReadMilliVolts(VinPin); // ミリボルトで電圧を読み取ります。
if(debug)
{
maxVoltage();
Serial.print("PinVoltage: ");
Serial.print(voltage_mV);
Serial.println("mV");
Serial.println(); // これにより新しい行が追加されます。
}
mV = voltage_mV;
VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}
/*
* 最大電圧を印刷します
*/
void maxVoltage()
{
float maxVoltage = ( 3.1) * (1 + (float)R2/(float)R1);
Serial.print("****Maximum Voltage: ");
Serial.print(maxVoltage);
Serial.println("V");
} // maxVoltage() 終了
void calculatResistor(int r1, float voltage)
{
Serial.print("Calculating R2 when R1 is :");
Serial.print(r1);
Serial.print(" Ohms and Maximum Input Voltage is ");
Serial.print(voltage);
Serial.println("V");
Serial.print("***** R2 Should Be ");
float r2 = (voltage - 3.1)/ (3.1/ (float)r1);
Serial.print(r2 / 1000.0);
Serial.println(" kilo Ohms");
while(1);
}
Common Course Links
Common Course Files
リソースと参考文献
まだリソースはありません。
ファイル📁
ファイルは利用できません。