ESP32的類比訊號 < >
類比讀取(analogRead)是MCU非常重要單元,依照不同晶片有不同的解析度,
如10位元解析度可將電壓分成 0~1023個刻度,
如12位元解析度可將電壓分成 0~4095個刻度,ESP32
//analog0.ino
#include <analogWrite.h>
void setup() {
Serial.begin(9600);
pinMode(36, INPUT);//宣告GPIO 36作為輸入
}
void loop() {
int Value;//宣告變數LightValue
Value = analogRead(36); //讀取的GPIO 36讀取的數值放在Value
Serial.println(Value); //Value顯示在序列視窗
delay(100);
}
可變電阻分壓類比訊號 >> LED PWM輸出
//analogRead1.ino 使用可變電阻調整電壓大(12位元),並由PWM輸出對應出電壓電位變化(8位元)
#include <analogWrite.h>
int VRpin=36;
int Ledpin=23;
int val=0;
void setup()
{
pinMode(Ledpin,OUTPUT);
Serial.begin(9600);
}
void loop()
{
val=analogRead(VRpin);
Serial.println(val);
analogWrite(Ledpin,val/16);
delay(10);
}
以ESP32測量3.3電壓表 >> 電壓表設計
// analogRead2.ino 電壓表3.3V 可能有誤差 電源並非3.3V
#include <analogWrite.h>
void setup() {
Serial.begin(9600);
pinMode(36, INPUT);//宣告GPIO 36作為輸入(光敏電阻)
}
void loop() {
int Value;//宣告變數LightValue
Value = analogRead(36); //讀取的GPIO 36讀取的數值放在LightValue
float Vol=Value*(3.12/4095.0);//float Vol=Value*(3.3/4095.0);電壓/解析,須測量實際電,因為有壓降問題
Serial.print("0~3.3 Voltage = ");
Serial.print(Vol); //Value顯示在序列視窗
Serial.println("V");
delay(100);
}
提高偵測的穩定度
// analogRead3.ino ,提高輸出的穩定,電壓表3.3V 可能有誤差 電源並非3.3V
#include <analogWrite.h>
void setup() {
Serial.begin(9600);
pinMode(36, INPUT);//宣告GPIO 36作為輸入(光敏電阻)
}
float temp;//輸出佔存檔
void loop() {
int Value;//宣告變數LightValue
Value = analogRead(36); //讀取的GPIO 36讀取的數值放在LightValue
float Vol=Value*(3.24/4095.0);//float Vol=Value*(3.3/4095.0);電壓/解析,須測量實際電,因為有壓降問題
if (Vol==temp) delay(100); //如果電壓相同 則不輸出
else {
Serial.print("0~3.3 Voltage = ");
Serial.print(Vol); //Value顯示在序列視窗
Serial.println("V");
delay(100);
temp=Vol;
}
//delay(100);
}
模擬電壓表(1000、250、50、10、2.5V之檔位測量方法)
相關資料:https://zh.wikipedia.org/wiki/%E5%A4%9A%E7%94%A8%E8%A1%A8
試想一下,實習課中使用的指針型三用電表,可以測量電壓、電流、電阻但卻共用一個錶頭設計,使用一個動圈型的錶頭卻可以測量如此多的電壓檔位,主要是確認錶頭可以承受的最大電流(指針滿刻度)或最大電壓(數位型滿刻度)後,電壓表則採串聯電阻分壓方式,已串聯電組的方式擴大電壓的測量範圍。