小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Arduino極簡教程

 新用戶0118F7lQ 2021-11-13

前言

呃呃,為啥寫這個教程呢~俺也不知道!唉,說多了都是淚,心酸,卷啊~

以下內(nèi)容是我的個人理解,專業(yè)名詞解釋可能存在錯誤,望廣大讀者指出,萬分感謝!

基礎(chǔ)概念

回歸內(nèi)容,今天在這里用一篇博文,帶領(lǐng)大家玩轉(zhuǎn)Arduino、入門數(shù)電模電、入門傳感驅(qū)動設(shè)計!

圖片

這些是我準(zhǔn)備的東西,一把杜邦線、一些傳感器、一塊板子!

杜邦線就是導(dǎo)線,把傳感器模塊和單片機(jī)(Arduino板)連接起來。這里的Arduino板是我之前在雙臂機(jī)械臂課程用到的板子,其實也就是一塊Arduino Nano的擴(kuò)展板,將所有的IO口引出(D13引腳除外),D13引腳接到了蜂鳴器上面,同時有個LM2596S-5.0的模塊實現(xiàn)12V轉(zhuǎn)5V 3A(最大3A輸出)的調(diào)壓功能。

玩單片機(jī)呢,大家玩的就是IO口,也就是引腳!這些引腳具備輸入(Input)和輸出(Output)兩種形態(tài),所以被稱為IO口。

玩電子的呢,大家經(jīng)常聽到的就是數(shù)電模電,而單片機(jī)的引腳呢,也分為數(shù)字(digital)和模擬(analog)兩種。

玩單片機(jī)的話,ADC和DAC兩個名詞,是跳不掉的!ADC,Analog Digital Change,模擬轉(zhuǎn)數(shù)字,模數(shù)轉(zhuǎn)換,AD模擬量采集。

DAC,Digital Analog Change,數(shù)字轉(zhuǎn)模擬,數(shù)模轉(zhuǎn)換,DA數(shù)字量輸出。

所以,Arduino編程就有了以下四個函數(shù):

圖片

那么什么是數(shù)字,什么是模擬呢?數(shù)電是什么,模電又是什么呢?

我們拿燈來做一個栗子。我們通過開關(guān)來控制燈的亮和滅,我們規(guī)定燈亮為1,燈滅為0,這種符合正常人類邏輯的方式,被稱為正邏輯;也有規(guī)定燈亮為0,燈滅為1,這種被稱為負(fù)邏輯。正邏輯和負(fù)邏輯本質(zhì)上沒有什么差別,因為我們習(xí)慣了有就是1,無就是0這樣的邏輯方式(推薦閱讀《編程珠璣》)。

我們將信號分為有和無、或者是當(dāng)前的電壓值是HIGH或低、或者是當(dāng)前的狀態(tài)是0或1,這就是數(shù)字量——只有0和1兩種狀態(tài)的的量。這在我們的單片機(jī)里面,也就對應(yīng)了IO引腳輸出一個高電平或者輸出一個低電平、檢測當(dāng)該IO引腳是高電平還是低電平!

那么模擬量呢!我們還是拿燈來做一個栗子。數(shù)字量可以用來表示燈開了沒有,那么燈的亮度呢?我們可以控制開和關(guān),那么我們能不能控制亮度呢?答案是可以的!這里用來表示一定程度的量,就是模擬量!我們通過單片機(jī)的引腳輸出一個模擬量,可以實現(xiàn)控制對“程度(燈的亮度、聲音的響度等等)”的控制,這就是DAC;同理,我們通過單片機(jī)的引腳獲取傳感器的“程度(溫度、濕度、電壓值)”的數(shù)值,這就是ADC!

那么ADC采集和DAC輸出是怎么實現(xiàn)的呢!我們這里使用的是Arduino Nano,它有A0~A7共計8個ADC模擬量讀取的引腳,這些引腳也可以當(dāng)成普通的IO來使用,順序為A0~A7對應(yīng)14~21。其中A4、A5引腳復(fù)用為IIC通訊引腳(聽不懂沒關(guān)系,后面會學(xué)到)

Arduino的ADC采集精度是10位,所以讀取到的數(shù)值為0~1024(210),這里的ADC數(shù)值其實就是電壓值,Arduino的模擬量基準(zhǔn)電壓(Aref)默認(rèn)是5V,也就是說,在ADC采集這里,是將0~5V的電壓值,進(jìn)行讀取,轉(zhuǎn)成0~1024的數(shù)值進(jìn)行輸出。

而Arduino Nano的DAC輸出呢,是通過PWM(脈沖寬度調(diào)制技術(shù))來實現(xiàn)的,具備PWM的引腳為D3、D5、D6、D9、D10、D11六個引腳。

要說PWM啊,我們先來聊兩個概念——頻率和占空比!

頻率這個詞大家應(yīng)該都不會陌生,是指單位時間內(nèi)完成周期性變化的次數(shù),這個單位時間我們大多默認(rèn)的就是1秒鐘。比如說我在1秒鐘執(zhí)行了20次,那么我就可以說頻率是20Hz,頻率=1/單位時間。

占空比這個概念呢,大家可能會陌生一些。我先做個假設(shè),假如單片機(jī)的一個引腳輸出20Hz的頻率,那么產(chǎn)生1Hz的頻率需要的時間是多久呢?答案是1s/20=0.05s=50ms!

也就是說,我控制單片機(jī)的引腳每50ms完成一次高低電平的變化,實現(xiàn)這個引腳在1s的時間內(nèi)可以產(chǎn)生20次高低電平的變化,這就是控制單片機(jī)的引腳輸出20Hz的頻率。

我在20ms的時間內(nèi),保持引腳處于高電平10ms,處于低電平10ms,那么此時的占空比就是50%;如果我保持引腳處于高電平5ms,處于低電平15ms,那么此時的占空比就是25%,所以占空比就是在一次周期性的電平變化中,所處于高電平的時間與周期時間的比值。

PWM產(chǎn)生的是方波信號(還正弦波、三角波等等,后續(xù)我們再聊),Arduino的PWM精度是8位,所以輸出的PWM值為0~255(28),默認(rèn)的頻率是490Hz(基本認(rèn)為是500Hz),這里給大家一個參考資料:

https://www.cnblogs.com/lulipro/p/6092264.html

圖太多了,不想畫,人家做的挺好的!

數(shù)字輸入,就是引腳讀取傳感器過來的信號,這個信號可能是高電平也可能是低電平,比如按鍵模塊。

數(shù)字輸出,通過引腳對外輸出一個高電平或者輸出一個低電平,比如單片機(jī)引腳點亮一個LED。模擬輸入,通過引腳感應(yīng)得到一個電壓值,將電壓值等比轉(zhuǎn)成一個數(shù)值,比如讀取一個溫度傳感器的溫度值。

模擬輸出,通過引腳輸出一個電壓值,Arduino的模擬輸出范圍0~255,也就是說將0~5V的電壓值分成255分,我們通過調(diào)控電壓值就可以來控制引腳輸出的程度(這里理解為功率吧)。

這四個,是單片機(jī)的基本概念。如果你是資深單片機(jī)玩家的話,也會聽說過推挽、開漏、浮空、上拉、下拉五個名詞!這些內(nèi)容我們稍后來處理。

上面我們聊了,模擬輸出是通過PWM來實現(xiàn)的,而PWM說開了就是通過引腳高低電平的快速切換實現(xiàn)的,那么這個為什么能控制引腳輸出的程度呢?這個問題留個大家思考,給大家一個提示:結(jié)合LED的閃爍來分析,如果讓LED閃爍的頻率增加會發(fā)現(xiàn)什么呢?調(diào)整閃爍頻率的占空比又會發(fā)生什么呢?留給大家思考+嘗試!

基礎(chǔ)概念的補(bǔ)充到這里就結(jié)束了,接下來開始我們實戰(zhàn)的內(nèi)容!

實踐

在文章剛開始的地方,我就貼出來一張圖,這些是我現(xiàn)在手頭有的零件,接下來我會用這些零件類為大家展現(xiàn)Arduino編程!

這段時間我在古月學(xué)院的兩門課程——PCB設(shè)計和CAD設(shè)計,應(yīng)該就是這兩天上線了吧,公開課,免費的不要錢,課程都是一個多小時那種吧!我這里用的板子是自己設(shè)計的,現(xiàn)在立創(chuàng)打板不要錢,還是挺方便的!

如果你手上沒有這些東西也沒關(guān)系,你們可以去這個網(wǎng)站進(jìn)行仿真,效果是一樣的,記得網(wǎng)絡(luò)環(huán)境好點!Arduino在線仿真:

https://www./

我這里使用的是Arduino Nano開發(fā)板 + LM2596S-5.0降壓模塊,這里我把Arduino Nano的引腳全部按照Sign Vcc Gnd的順序留出,避免出現(xiàn)Vcc和Gnd引腳不夠用的情況。

同時使用了一個DC 5.5-2.1(外徑5.5mm,內(nèi)徑2.1mm)的座子,這個算是常見的型號,LM2596S-5.0實現(xiàn)了5~40輸出,5V 3A(Max)輸出的性能,引腳按照SVG的順序留出,可以直插舵機(jī),也就是說,這塊板子可以直接用來玩機(jī)械臂!這里插進(jìn)來一個我之前的博客《基于Firmata協(xié)議的ROS Moveit六軸機(jī)械臂設(shè)計》:

https://www./bubble/detail/id/39

板子不一樣其他的一樣!博文看不懂的可以去古月學(xué)院購買一下我的課程《軟硬結(jié)合帶你玩轉(zhuǎn)ROS機(jī)械臂》、《MoveIt玩轉(zhuǎn)雙臂機(jī)器人》任意一個都可以上手!板子是這樣的!

圖片

哦對了,D13引腳我沒有引出,這個引腳在所有的Arduino板子上面,接有一個LED燈,在上傳程序或者上電、掉電的時候會出現(xiàn)電平的變化。這里我把D13引腳接到蜂鳴器上面,在上傳程序或者上電、掉電的時候蜂鳴器會發(fā)出聲音,算是一個提示音吧!

圖片

原理圖十分簡單,就是引腳留出!蜂鳴器那里的話,用了一個三極管來控制。當(dāng)基極處于高電平的時候,三極管導(dǎo)通,5V過三極管、過蜂鳴器,流向GND,蜂鳴器發(fā)出聲音;當(dāng)基極處于低電平的時候,三極管處于截止?fàn)顟B(tài)造成短路,電流無法流過、蜂鳴器無法發(fā)出聲音!

其他的也就沒啥了,挺簡單的!成本的話,Arduino Nano不超過20塊錢,LM2596S-5.0不超過5塊錢,30塊錢以內(nèi)可以搞定,傳感器和杜邦線的話,去學(xué)校實驗室嫖吧!

代碼

硬件聊完了,我們來聊聊軟件的代碼!Arduino環(huán)境啊、怎么下載程序啊,大家自行百度吧,那玩意寫著簡直要命,不介意的可以等幾天,我這幾天打算做這部分的公開課程!

Arduino語法基礎(chǔ)的話,給大家個傳送門,大家可以去參考一下!Arduino語法教程:

https://www./category/arduino-language/

Arduino的語法是C語言和C++都有,我是C語言用的多,畢竟簡簡單單的功能分得面向?qū)ο髮憘€類,秀操作沒啥意思,實用才是正道!當(dāng)然,你要是做類庫的話,建議你還是用C++,不然會被噴(個人觀點,我可以寫屎一樣的代碼,但是你不行。因為我要Crtl C+Ctrl V你的代碼)。

我們先來看個Arduino的實例程序——閃爍的LED,代碼如下。

//定義LED所在的引腳#define LED 13 #初始化函數(shù),程序從這里開始,setup函數(shù)的內(nèi)容只執(zhí)行一次void setup(){    pinMode(LED,OUTPUT);    //設(shè)置LED引腳為輸出模式    digitalWrite(LED,LOW);     //設(shè)置LED引腳為低電平} //在執(zhí)行結(jié)束setup函數(shù)后,循環(huán)執(zhí)行l(wèi)oop函數(shù)的內(nèi)容void loop(){    digitalWrite(LED,HIGH);    //設(shè)置LED引腳為高電平    delay(1000);                      //延時1000ms    digitalWrite(LED,LOW);    //設(shè)置LED引腳為低電平    delay(10000);                   //延時1000ms}

這里增加了兩個新的函數(shù)——pinMode和delay。

pinMode是設(shè)置引腳模式的,我們在使用引腳前,需要指定該引腳的模式(模擬輸入無需指定,因為模擬輸入口是指定了的)。

pinMode(uint_8 pin,uint_8 mode)    //參數(shù)pin為引腳序號,mode為模式,有OUTPUT和INPUT兩個數(shù)值delay(unsigned long ms)          //參數(shù)ms為延時的時間,單位ms

這里的邏輯如果換成C語言的話,如下,大家可以比對理解一下!

void setup(){    //執(zhí)行初始化} void loop(){    //執(zhí)行功能主體} int main(){    setup();    while(1)    {        loop();    }    return 0;}

呃,反正大概就這個意思吧!

大致Arduino的介紹有了,接下來就是如何來玩這些傳感器,等我接下來的博客吧!

總結(jié)

以上的概念,不僅僅是Arduino,它對于所有的單片機(jī)和嵌入式都是通用的,在學(xué)習(xí)不同的單片機(jī),大家可以來比對一下!

圖片

《MATLAB玩轉(zhuǎn)深度學(xué)習(xí)和無人駕駛· 同濟(jì)子豪兄對自動駕駛感興趣、熟悉MATLAB并且了解最基本的深度學(xué)習(xí)、計算機(jī)視覺、激光雷達(dá)、傳感器融合技術(shù)的小伙伴們,這次就該戳戳下面的二維碼報名學(xué)習(xí)啦!

(掃描二維碼查看詳情)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多