「初識Arduino - 3」PWM控制LED燈

2021-01-10 雜學實驗室

準備器材:

開發板(Arduino UNO)麵包板1塊麵包板跳線LED燈:1個220Ω電阻:1個電位器:1個(可選)

PWM

脈衝寬度調製(Pulse Width Modulation,PWM),簡稱脈寬調製。是將模擬信號變為脈衝的一種技術(用數字來控制模擬輸出的一種手段)。PWM可以控制LED亮度、控制馬達速度、控制直流電動機的速度等

正弦波、方波、三角波與鋸齒波

Arduino數字引腳給我們提供了5V(高電平)和0V(低電平),輸出是方波信號。我們無法得到0-5V之間的電壓(串聯電阻可以),但是我們可以通過改變信號的開關時間來改變LED亮度(即控制佔空比)

PWM是一種方波控制信號,方波高電平的寬度在一個周期裡的佔比被稱為佔空比(Duty Cycle)。改變PWM的佔空比,可以改變輸出信號的平均電壓,實現模擬電壓的輸出。

在Arduino UNO中,可以看到板上有指明`PWN~`,也就是帶波浪號的3, 5, 6, 9, 10, 11這些數字接口是支持PWM的,我們可以通過analogWrite(pin, value)來設置佔空比,value的取值在0-255之間(255表是100%佔空比,即LED燈最亮)。(值得注意的是,也可以使用digitalWrite和delayMicroseconds來手動重複打開和關閉引腳以達到PWM的效果,這樣就不需要一定接入帶波浪號的PWM接口了,但是這種方法一旦有其他進程幹擾CPU會導致輸出的信號頻率不準)

接線

跟之前一樣,常規的LED接線圖

在Arduino中,我們只需要不斷改變analogWrite的value(0-255),就能改變佔空比進而改變LED燈的亮度,實現呼吸燈的效果

代碼 & 效果

接好線檢查一下,然後打開Arduino IDE敲代碼

int ledPin = 6;void setup() {pinMode(ledPin, OUTPUT);}void loop() { for(int i=0; i<255; i++) { analogWrite(ledPin, i); delay(5); } for(int i=255; i>0; i--) { analogWrite(ledPin, i); delay(5); }}

這邊兩個for循環,是的analogWrite輸出的value從0變到255,再從255變到0,這樣就有呼吸燈的效果(當執行analogWrite後,埠會輸出一個穩定佔空比的方波,直到下一個命令來改變它)。值得注意的是這邊每次analogWrite之後都要有一個短暫的delay(不設置的話看不到效果,LED燈會常亮,設置大呼吸就慢,設置小呼吸就快)

效果如下:

因百家號只能放一個視頻,這邊用照片代

電位器

電位器是可調電阻、可變電阻(VR,Variable Resistor),就是能動態調整電阻阻值大小的一種元器件。電位器有三個針腳,其中兩個(兩邊針腳)是固定的,一個(中間針腳)是滑動可變的。電位器不分正負極,只要將兩邊引腳分別接入正負極,中間接入元器件即可

擴展

我們將接入電位器(接入電位器可能要稍微用一點點力氣將3個針腳壓入),實現使用電位器來控制LED燈的亮度(當然也可以通過電位器改變LED燈的呼吸頻率)

接好線檢查一下,然後打開Arduino IDE敲代碼

// led接入數字針腳int ledPin = 6;// 電位器接入模擬針腳int potPin = A0;// 從電位器讀取到int readValue;// 輸出到led的佔空比的值int ledValue;void setup() {pinMode(ledPin, OUTPUT);}void loop() { // 從電位器讀取模擬信號 readValue = analogRead(potPin); // 等比映射,將位於[0, 1023]之間的readValue映射到[0, 255]. ledValue = map(readValue, 0, 1023, 0, 255); analogWrite(ledPin, ledValue);// delay(1);}

因為analogRead從模擬引腳讀取的值的範圍為0-1023之間,但是analogWrite的模擬值範圍為0-255之間,因此需要用map函數來進行等比映射,將0-1023之間的值映射成0-255之間的值,當然你也可以自己用除法去轉換。

實驗效果如下:

相關焦點

  • arduino從零開始(4)PWM與呼吸燈
    即:使用數字控制產生佔空比不同的方波(一個不停在開與關之間切換的信號)來控制模擬輸出。我們要在數字電路中輸出模擬信號,就可以使用PWM技術實現。在arduino中,我們常用PWM來驅動LED的暗亮程度,電機的轉速等。我們知道,在數字電路中,電壓信號是離散的: 不是 0(0V)  就是 1(5V或者3.3V), 那麼如何輸出介於 0v 和  5V之間的某個電壓值呢?
  • 「初識Arduino - 2」LED燈
    準備器材:開發板(Arduino UNO)麵包板1塊麵包板跳線LED燈:8個(幾個都行)220Ω電阻:8個(跟LED數量一樣即可)LED燈LED燈其實就是一個發光二極體,二極體有正負極差別(流只允許由單一方向流過二極體),正嚮導通時兩個電極(陽極和陰極
  • 用Arduino剖析PWM脈寬調製
    即:使用數字控制產生佔空比不同的方波(一個不停在開與關之間切換的信號)來控制模擬輸出。我們要在數字電路中輸出模擬信號,就可以使用PWM技術實現。在嵌入式開發中,我們常用PWM來驅動LED的暗亮程度,電機的轉速等。原理 我們知道,在數字電路中,電壓信號是離散的:不是 0(0V)  就是 1(5V或者3.3V), 那麼如何輸出介於 0v 和  5V之間的某個電壓值呢?
  • 【E電路】pwm脈衝寬度調製led驅動控制電路圖
    本文主要對pwm脈衝寬度調製led驅動控制電路圖進行了分析說明。本文引用地址:http://www.eepw.com.cn/article/201605/291314.htm  1、開機輸入浪湧電流限制電阻;  2、為一款逐流無源功率因數校正(PPFC)電路,通過擴展交流輸入市電整流二極體的導通角來改善電路的功率因數,較有源功率因數校正電路(APFC)具有造價低的優點;  3、濾波電容,當整流交流輸入接近零交越時,存儲電容
  • 萬能超的arduino學習日記(一)
    本科時候有接觸過arduino,但是由於導師方向原因,轉做了3D列印和動力學分析,所以這裡是啥都會一點點的萬能超,希望能夠和大家一起學習討論。最近由於興趣原因,決定重新撿起arduino,所以決定寫這個萬能超的arduino學習日記跟大家一起重新學習。最開始的入門學習,我選擇跟B站太極創客的學習視頻,因為有基礎,選擇二倍速觀看學習。
  • 智能家居控制-arduino紅外遙控控制燈
    上一篇文章介紹了 arduino接受智能家具系統中的紅外遙控的解碼在此基礎上,今天就做一個遙控器控制的燈,我們可以將燈換成繼電器,這樣的話就實現了,用紅外遙控機,控制家裡的電器開關,比如燈,電視,插座,洗衣機等接線圖幾原理圖如上,一個板子一個紅外接收器,一個燈(可以換成你想控制的任何設備
  • 搭建第一個程序控制電路LED燈,體會C語言的魅力
    一、首先,介紹一下arduino UNO控制器內部電壓的問題。v 高電平(5V):對應數值是1,輸入狀態3.5V-5.5V。v 低電平(0V):對應數值是0,輸入狀態-0.5V-1.5V。二、Mixly程序:三、代碼程序編寫:void setup()//當Arduino板起動,setup()函數會被調用。
  • PWM控制MOSFET搭建的H橋電路驅動直流電機仿真與單片機源碼
    推薦閱讀 PWM控制led漸變 為「1"。該模式下不能產生 0%的 PWM 波形。圖 3-2給出了一些中央對齊的PWM波形的例子 · TIM1_ARR=8 ; · PWM模式 1; · TIM1_CR1 寄存器中的 CMS=01,在中央對齊模式 1 時,當計數器向下計數時標誌被設置。
  • pwm輸出波形的特點
    PWM,即脈寬調製,工作原理如下:   控制方式就是對逆變電路開關器件的通斷進行控制,使輸出端得到一系列幅值相等的脈衝,電流響應快;   ③不用載波,輸出電壓波形中不含特定頻率的諧波分量;   ④與計算法和調製法相比,相同開關頻率時輸出電流中高次諧波含量較多;   ⑤採用閉環控制。
  • Arduino在嵌入式開發中應用案例之arduino點亮LED
    本分享一個通過arduino點亮LED的案例。 初識Arduino硬體     我們的核心是Arduino Uno開發板,下面這張圖是Arduino的電路圖。我把它的幾個大塊標記出來,下面我一一來說明下。 Voltage Regulator: 它的任務是為系統提供穩定的3.3V和5V的電壓。
  • 工程師教你如何通過LED燈串調光實現照明器調色
    要生成更多的色彩,就可以調整每個LED通道的亮度,這一步又可以通過調整流經每個 LED燈串的電流來實現。從根本上說,實現LED調光的方式有兩種:模擬/線性電流控制,和脈衝寬度調製(PWM)。二者都是通過控制流經每個LED燈串的平均電流來調整LED的亮度,且都可以應用到開關電源或線性LED驅動器。圖1顯示的是一個基於TPS92660的雙燈串LED驅動器,包含一個巴克切換器和一個線性調節器。兩個LED燈串均可利用模擬或PWM技術進行調光,這兩項技術各有優劣勢。在大多數應用中,調光方式的選擇一般基於色彩混合性能要求。
  • Arduino教程┃3步搞定用按鈕控制LED燈亮度
    一、前言昨天分享了如何使用PWM調節LED燈的亮度,頗受大家喜歡。今天繼續分享學習使用按鈕控制LED燈亮度的過程,增強互動效果。這裡「控制」是指以下兩個方面:一是按下、鬆開按鈕開關可以開關LED燈;二是按住按鈕開關不放可以調節LED燈的亮度,鬆手後可以保持當前選擇的亮度。請對照觀看下面的視頻就更容易理解了。
  • 一起學Arduino:點亮第一盞LED燈
    Arduino Uno 引腳功能圖Arduino Uno板子的工作原理大概就是設置數字埠的高/低電平、根據傳感器反饋的高/低電平,然後再指定另外的埠輸出高/低電平控制外設執行預設的動作。如果板子上的電源LED燈亮和另外有一顆LED燈在閃爍的話,你就不用怕怕了,說明板子正常,正在運行預載的BLINK例程,就是點亮一盞LED燈!(這顆LED燈就是D13口在板子上自帶的LED,廠家免費送的)現在我們學習外接LED燈,讓它一閃一閃的。LED燈很好,建議買一堆回來,包郵那種。如何分LED管腳?led引腳長的一端為正極,短的一端為負極。
  • LED燈加上全環境控制種植系統,植物也能在太空生長了
    透過全環境控制種植(CEA)系統,能用最少的水和能源,用LED燈泡代替日光,可無視氣候、地點或季節,在任何地方種植植株,不僅可以緩解越來越急迫的農糧問題,也可以應用在太空站,讓航天員可以食用新鮮的蔬菜。
  • 12w的led燈有多亮 LED燈優點有哪些
    不少家庭中現在使用的燈具都是LED燈,led作為新型的燈具,優點增加了不少,最為明顯的點就是在亮度方面,亮度增加的同時還節約了許多能源,而有些人家中安裝的燈具其實也不用太亮,畢竟太亮了對於人的眼睛來說也會有很多的損傷,那麼12w的led燈有多亮?LED燈優點有哪些?
  • led燈打開只發弱光不亮是怎麼回事?不外乎以下這兩種情況
    一修房屋快修處理led燈具不亮led燈打開只發弱光不亮原因一:先檢查家裡的電壓是否穩定,如果遇到用電高峰期一修房屋快修處理led燈具不亮led燈打開只發弱光不亮原因二:一般來說燈具本身的配件或者線路出現問題
  • 如何使用Qt為arduino製作圖形界面
    如何使用Qt為arduino製作圖形界面 網絡整理 發表於 2019-11-13 11:11:39 步驟1:安裝Qt
  • led燈接線分零火線嗎 led燈的光源
    除了節能燈比較受歡迎之外,就是led燈了,它起到了一個裝飾的作用,而且它的顏色也是分為很多種的,那麼,在這裡我們要看一下led燈接線分零火線嗎,如果想要使用這種燈的話,必須要自己接線,所以一定要清楚這個問題,如果接不對的話就不能用,除此之外led燈的光源有什麼。
  • 微軟放棄的遊戲被他們復活了:Windows經典「三維彈球」現實版,CAD建模、Arduino編程、數控工具機打造,硬核致敬童年
    別著急,KSU的4位小哥寫了份超詳細教程,手把手教你如何打造現實版「三維彈球」。9步,手把手教你打造現實版「三維彈球」彈球機的主要功能模塊包括追蹤得分系統,多球彈珠機,還有自主啟動開關。上方有一個USB攝像頭,在自動運行模式下會持續地監測彈球的位置,並根據球的位置指揮擊打器。
  • led燈過亮怎麼降低亮度 led燈是什麼燈具
    燈具方面的一些情況多少人掌握的比較少,因為在於很多物品上,人們只要一開始在使用,之後都只會去使用,並不會做一些詳細的理解調查,但有時若遇到了問題,確實還得要在重新的理解,所以就不如一開始就弄明白一些狀況,這樣對自己也會有好處,那麼led燈過亮怎麼降低亮度?led燈是什麼燈具?