精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Arduino的PWM與紅外信號處理

CHANBAEK ? 來源:編程圈子 ? 作者:編程圈子 ? 2023-03-14 11:35 ? 次閱讀

一、基本概念

1. 脈寬調制

PWM(Pulse Width Modulation)即脈寬調制,是一種通過調節信號的占空比來控制電路的技術。 在 PWM 技術中,信號的周期保持不變,但是信號的占空比可以隨時間變化而改變。 當信號的占空比為 0% 時,表示信號一直處于低電平狀態; 當占空比為 100% 時,表示信號一直處于高電平狀態; 而在占空比為中間值時,信號將以一定的頻率在低電平和高電平之間切換。

在電路應用中,PWM 技術常用于控制電機的轉速、控制 LED 的亮度和顏色、實現音頻數字化等方面。 例如,在控制 LED 亮度時,可以通過調節 PWM 信號的占空比來控制 LED 的亮度,占空比越大,LED 燈亮度越高,反之亦然。

微控制器中,通過定時器和計數器等硬件模塊,可以實現高精度的 PWM 信號輸出。 許多單片機嵌入式系統都提供了 PWM 功能,并且在軟件層面提供了相應的 API 和庫函數,方便開發者使用。 在使用 PWM 技術時,需要根據具體的應用場景選擇合適的 PWM 頻率和分辨率,以及合適的占空比范圍和切換速率,以達到最優的控制效果。

2. ESP8266 的 PWM功能

ESP8266 是一款高度集成的 Wi-Fi SoC 芯片,內部集成了許多硬件模塊,其中包括一個靈活的 PWM 控制器,即 LEDC(LED 控制器)。 LEDC 可以用于實現高精度的 PWM 輸出,適用于控制 LED 的亮度、顏色和閃爍等效果。

ESP8266 的 LEDC 控制器可實現同頻率、不同占空比的PWM波形輸出。 LEDC 模塊的主要特點包括:

  • 高精度:LEDC 支持高達 20 位的 PWM 分辨率,可實現非常精細的 PWM 控制。
  • 多路輸出:LEDC 可以同時控制多達 16 個 PWM 通道,滿足多路 PWM 輸出的需求。
  • 靈活配置:LEDC 可以配置不同的 PWM 頻率和分辨率,以適應不同的應用場景。
  • 低成本:LEDC 是 ESP8266 芯片內置的硬件模塊,使用 LEDC 功能無需外接任何外部元器件,節省了硬件成本。

在使用 ESP8266 的 PWM 功能時,可以使用 ESP8266 的官方庫文件 ESP8266WiFi.h 中提供的 LEDC 相關函數進行配置和控制。 例如,可以使用 ledcSetup() 函數來初始化 PWM 通道,并使用 ledcWrite() 函數來設置 PWM 占空比。 此外,ESP8266 的開發環境也提供了豐富的示例代碼和庫函數,方便開發者快速上手使用 PWM 功能。

要注意的是,GPIO1和GPIO3作為調試串口的TX和RX,一般不做PWM使用。

3. node-mcu 引腳圖

4. 模擬寫入

(1)模擬寫入

要實現輸出PWM信號,可以使用analogWrite()函數:

analogWrite(pin,value)
1
  • pin:GPIO引腳
  • value:默認0-1023
    當值為0時,該引腳禁用PWM。 值為1023時 占空比100%。

(2)修改頻率 analogWriteFreq

analogWriteFreq(new_frequency);

(3)調節分辨率

可以用于調節模擬輸出的 PWM 范圍。
在 ESP8266 中,analogWriteRange() 函數用于設置 PWM 的分辨率。 默認情況下,ESP8266 的 PWM 分辨率為 10 位,即占空比范圍為 0~1023。 通過調用 analogWriteRange() 函數,可以將 PWM 分辨率調節為 8 位或 9 位,以擴大或縮小 PWM 占空比范圍。

二、使用analogWrite實現PWM

const int ledPin = 2; 

void setup() {
  
}

void loop() {
  // 增加LED亮度
  for(int dutyCycle = 0; dutyCycle < 1023; dutyCycle++){   
    // 通過PWM改變LED亮度
    analogWrite(ledPin, dutyCycle);
    delay(10);
  }

  // 降低LED亮度
  for(int dutyCycle = 1023; dutyCycle > 0; dutyCycle--){
    // 通過PWM改變LED亮度
    analogWrite(ledPin, dutyCycle);
    delay(10);
  }
}

三、發送紅外信號

1. 紅外通信原理

紅外通信是一種無線通信方式,它通過發射紅外線來傳輸數據或控制信號,通常用于紅外遙控器、紅外傳感器等場景。

紅外信號是一種電磁輻射,其頻率在可見光波和微波之間,一般波長為0.75至1000微米,其中,可見光波長為0.38至0.78微米。 紅外線被稱為"熱線",因為物體溫度越高,發射的紅外線輻射就越多。

在紅外通信中,通過對載波信號進行調制,將數字信號轉換為紅外信號,從而實現數據或控制信號的傳輸。 調制方式主要有兩種:幅度調制和頻率調制。

  • 幅度調制:通過改變載波信號的幅度,將數字信號轉換為紅外信號。 在幅度調制中,通常用一個二進制信號來控制紅外發射器的開關狀態,從而實現傳輸數據。
  • 頻率調制:通過改變載波信號的頻率,將數字信號轉換為紅外信號。 在頻率調制中,常用的方式是將數字信號和一個固定的載波信號進行異或運算,從而得到一個頻率變化的信號,用來控制紅外發射器的開關狀態,實現傳輸數據。

接收端通過紅外接收器接收到紅外信號,然后通過解調的方式提取出攜帶的數據或控制信號。 解調的過程就是將紅外信號轉化為電信號,然后提取出載波信號,再將其與一個固定的頻率進行比較,從而恢復出原始的數字信號。

2. 載波頻率

紅外信號的載波頻率(Carrier Frequency)指的是紅外信號中用于攜帶信息的載波波形的頻率。 在紅外通信中,常用的載波頻率一般在 20 kHz 到 50 kHz 之間。

將信息信號和載波信號進行調制后,就可以通過紅外發射器將帶有載波信號的紅外信號發送出去。 接收器可以通過解調過程,將攜帶的信息信號提取出來。

在紅外遙控器中,一般使用一定的載波頻率進行通信。 這樣可以提高通信的可靠性,同時也可以避免干擾,因為很少有其他的設備會使用相同的載波頻率進行通信。

3. 發送周期

紅外信號的發送周期是指一個完整的紅外信號周期所需的時間。 在紅外通信中,為了確保通信的可靠性,每一個紅外信號周期中一般包含多個載波周期。 具體來說,發送周期包括兩部分時間:載波周期和調制周期。

  1. 載波周期:指載波信號一個完整的波形所需的時間,它是紅外信號的基本單位。 在紅外通信中,載波周期通常為一個固定的時間,一般在38kHz左右。
  2. 調制周期:指一個完整的紅外信號周期所需的時間,它包括了載波周期和數字信號的調制。 在紅外通信中,調制周期的長度取決于傳輸的數據長度和傳輸速率。 一般來說,調制周期越長,傳輸速率就越慢,但是數據傳輸的可靠性會更高。

在紅外遙控器中,每一個按鍵通常對應一個特定的紅外信號,這個紅外信號的發送周期一般是固定的,以確保遙控器能夠正確地發送信號,并且接收器能夠正確地解碼信號。

4. 使用

(1)安裝庫

庫開源地址:

https://github.com/crankyoldgit/IRremoteESP8266

(2)代碼實現

#include 
#include 

IRsend irsend(4); // 初始化IRsend對象并設置輸出引腳,GPIO4=D2

void setup()
{
  Serial.begin(115200);
  delay(1000);
}

void loop()
{
  Serial.println("Sending IR signal...");
  irsend.sendSony(0xA90, 12); // 發送SONY紅外信號,傳輸數據為0xA90,數據長度為12位
  delay(1000); // 等待1秒鐘
}

5. 紅外接收示例

#include 
#include 
#include 
#include 

// An IR detector/demodulator is connected to GPIO pin 14(D5 on a NodeMCU
// board).
// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts.
// Note: GPIO 14 won't work on the ESP32-C3 as it causes the board to reboot.
#ifdef ARDUINO_ESP32C3_DEV
const uint16_t kRecvPin = 10;  // 14 on a ESP32-C3 causes a boot loop.
#else  // ARDUINO_ESP32C3_DEV
const uint16_t kRecvPin = 14;
#endif  // ARDUINO_ESP32C3_DEV

IRrecv irrecv(kRecvPin);

decode_results results;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();  // Start the receiver
  while (!Serial)  // Wait for the serial connection to be establised.
    delay(50);
  Serial.println();
  Serial.print("IRrecvDemo is now running and waiting for IR message on Pin ");
  Serial.println(kRecvPin);
}

void loop() {
  if (irrecv.decode(&results)) {
    // print() & println() can't handle printing long longs. (uint64_t)
    serialPrintUint64(results.value, HEX);
    Serial.println("");
    irrecv.resume();  // Receive the next value
  }
  delay(100);
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    242

    文章

    23153

    瀏覽量

    658617
  • PWM
    PWM
    +關注

    關注

    114

    文章

    5153

    瀏覽量

    213454
  • 脈寬調制
    +關注

    關注

    3

    文章

    216

    瀏覽量

    38289
  • Arduino
    +關注

    關注

    187

    文章

    6464

    瀏覽量

    186677
  • ESP8266
    +關注

    關注

    50

    文章

    962

    瀏覽量

    44852
收藏 人收藏

    評論

    相關推薦

    arduino學習筆記7 - PWM控制LED實驗 PWM講解

    ~當然。。。這和真實的連續輸出還是有差別的,單位時間內輸出的0,1信號越多,控制的就越精確。在下圖中,綠線之間代表一個周期,其值也是PWM頻率的倒數。換句話說,如果arduino PWM
    發表于 10-23 17:34

    詳解基于ArduinoPWM輸出

    理解Arduino的模擬輸入A0~A5。本篇深入討論Arduino的模擬信號輸出(PWM)引子Arduino Uno是單片機,其內部
    發表于 08-03 21:57

    Arduino如何利用紅外感應控制舵機

    實現功能:當紅外感應到人時,控制舵機轉動180度參考:基于Arduino的多種方式控制舵機(舵機、電位器、藍牙).硬件連接:舵機連接:ArduinoMicro Servo 9g5V紅線GND棕色
    發表于 06-28 11:17

    ArduinoPWM控制代碼

    如果你需要一個具體的代碼示例,我可以為你提供一個ArduinoPWM控制代碼。Arduino是一款常用的開源電子原型平臺,它提供了PWM功能。以下是一個簡單的
    發表于 09-21 08:57

    如何使用Arduino紅外控制進行智能機械手的設計資料和程序免費下載

    等。通過 Arduino紅外控制功能,借助紅外遙控器向 Arduino 發送信號,再利用 Ardui
    發表于 05-13 08:00 ?5次下載
    如何使用<b class='flag-5'>Arduino</b><b class='flag-5'>紅外</b>控制進行智能機械手的設計資料和程序免費下載

    dfrobot數字紅外信號發射模塊介紹

    IR Transmitter Module是一款Arduino兼容的38KHz紅外線發射傳感器,可發射標準38KHz的調制信號,通過對Arduino進行編程,即可實現對38KHzIR
    的頭像 發表于 12-13 15:38 ?2351次閱讀
    dfrobot數字<b class='flag-5'>紅外</b><b class='flag-5'>信號</b>發射模塊介紹

    Arduino的實驗例程之紅外遙控實驗

    本文檔的主要內容詳細介紹的是Arduino的實驗例程之紅外遙控實驗。
    發表于 02-25 16:36 ?49次下載
    <b class='flag-5'>Arduino</b>的實驗例程之<b class='flag-5'>紅外</b>遙控實驗

    如何在Arduino中簡單實現PWM?

    Q A 在Arduino中輕松實現脈寬調制(PWM) 脈寬調制( PWM信號基本上是一個方波,可在導通(高)和關斷(低)狀態之間切換。PWM
    的頭像 發表于 05-21 10:37 ?1.7w次閱讀
    如何在<b class='flag-5'>Arduino</b>中簡單實現<b class='flag-5'>PWM</b>?

    使用紅外傳感器構建一個Arduino計數機

    在這個項目中,我們正在使用紅外傳感器構建一個Arduino 計數機。這臺機器在紅外傳感器的幫助下對不同部分的硬幣進行計數和分類。在這里,布置了紅外傳感器以感應不同的硬幣,
    的頭像 發表于 08-17 15:59 ?4326次閱讀
    使用<b class='flag-5'>紅外</b>傳感器構建一個<b class='flag-5'>Arduino</b>計數機

    如何使用Arduino生成的PWM來控制交流風扇的速度

    在這個項目中,我們將演示使用 TRIAC 的 Arduino 交流風扇速度控制。這里使用交流信號的相位控制方法來控制交流風扇的速度,使用 Arduino 生成的 PWM
    的頭像 發表于 08-18 16:26 ?1.1w次閱讀
    如何使用<b class='flag-5'>Arduino</b>生成的<b class='flag-5'>PWM</b>來控制交流風扇的速度

    使用Arduino解碼任何遙控器的紅外遙控信號

    電子發燒友網站提供《使用Arduino解碼任何遙控器的紅外遙控信號.zip》資料免費下載
    發表于 10-27 11:51 ?4次下載
    使用<b class='flag-5'>Arduino</b>解碼任何遙控器的<b class='flag-5'>紅外</b>遙控<b class='flag-5'>信號</b>

    Arduino PWM控制的對稱電源

    電子發燒友網站提供《Arduino PWM控制的對稱電源.zip》資料免費下載
    發表于 11-01 14:22 ?0次下載
    <b class='flag-5'>Arduino</b> <b class='flag-5'>PWM</b>控制的對稱電源

    使用Arduino進行脈沖寬度調制(PWM)并觀察示波器信號

    電子發燒友網站提供《使用Arduino進行脈沖寬度調制(PWM)并觀察示波器信號.zip》資料免費下載
    發表于 06-27 09:15 ?0次下載
    使用<b class='flag-5'>Arduino</b>進行脈沖寬度調制(<b class='flag-5'>PWM</b>)并觀察示波器<b class='flag-5'>信號</b>

    Arduino紅外遙控器

    電子發燒友網站提供《帶Arduino紅外遙控器.zip》資料免費下載
    發表于 07-06 10:51 ?0次下載
    帶<b class='flag-5'>Arduino</b>的<b class='flag-5'>紅外</b>遙控器

    PWM信號的濾波和處理方法

    PWM(脈沖寬度調制)信號的濾波和處理是電子設計中常見的任務,旨在將PWM信號轉換為更平滑的直流信號
    的頭像 發表于 11-18 17:41 ?632次閱讀