Arduino控制舵機(jī)詳解 附代碼
Arduino使用C/C++編寫程序,雖然C++兼容C語言,但不是C語言。C語言是Arduino語言的一種。早期的Arduino核心庫(kù)使用C語言編寫,后來引進(jìn)了面向?qū)ο蟮乃枷?,目前最新的Arduino核心庫(kù)采用C與C++混合編寫而成。
rduino是一款便捷靈活、方便上手的開源電子原型平臺(tái)。包含硬件(各種型號(hào)的Arduino板)和軟件(ArduinoIDE)。由一個(gè)歐洲開發(fā)團(tuán)隊(duì)于2005年冬季開發(fā)。其成員包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti等。
它構(gòu)建于開放原始碼simple I/O介面版,并且具有使用類似Java、C語言的Processing/Wiring開發(fā)環(huán)境。主要包含兩個(gè)的部分:硬件部分是可以用來做電路連接的Arduino電路板;另外一個(gè)則是Arduino IDE,你的計(jì)算機(jī)中的程序開發(fā)環(huán)境。你只要在IDE中編寫程序代碼,將程序上傳到Arduino電路板后,程序便會(huì)告訴Arduino電路板要做些什么了。
Arduino能通過各種各樣的傳感器來感知環(huán)境,通過控制燈光、馬達(dá)和其他的裝置來反饋、影響環(huán)境。板子上的微控制器可以通過Arduino的編程語言來編寫程序,編譯成二進(jìn)制文件,燒錄進(jìn)微控制器。對(duì)Arduino的編程是通過 Arduino編程語言 (基于 Wiring)和Arduino開發(fā)環(huán)境(基于 Processing)來實(shí)現(xiàn)的。基于Arduino的項(xiàng)目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上運(yùn)行的軟件,它們之間進(jìn)行通信 (比如 Flash, Processing, MaxMSP)來實(shí)現(xiàn)。
1. 舵機(jī)簡(jiǎn)介
舵機(jī)是一種位置(角度)伺服的驅(qū)動(dòng)器。舵機(jī)只是一種通俗的叫法,其實(shí)質(zhì)是一個(gè)伺服馬達(dá)。在需要角度不斷變化并可以保持的控制系統(tǒng)中應(yīng)用廣泛。如遙控機(jī)械人、飛機(jī)模型等。
舵機(jī)的轉(zhuǎn)動(dòng)角度為0~180°,其內(nèi)部結(jié)構(gòu)包括電機(jī),控制電路和機(jī)械結(jié)構(gòu)三部分。電機(jī)有三根線引出,分別接VCC、GNG和信號(hào)線。主要有兩種引出線的格式:
- 棕、紅、橙(棕色連接GND、紅色連接VCC、橙色連接信號(hào));
- 紅、黑、黃(紅色連接VCC、黑色連接GND、黃色連接信號(hào))。
圖1 舵機(jī)實(shí)物圖
2 硬件電路連線
Arduino
Arduino | 功能 | 舵機(jī) | 功能 |
VCC | 正極 | 紅色 | 正極 |
GND | 負(fù)極 | 棕色 | 負(fù)極 |
D9(PWM) | 數(shù)字引腳(PWM) | 橙色(信號(hào)傳輸) | 信號(hào)輸入 |
3 項(xiàng)目:舵機(jī)來回轉(zhuǎn)動(dòng)
實(shí)現(xiàn)功能:舵機(jī)0~180°來回轉(zhuǎn)動(dòng)。
3.1 控制代碼
#include <Servo.h> //加載文件庫(kù) int pos = 0; Servo myservo; void setup() { myservo.attach(9, 500, 2500); //修正脈沖寬度 } void loop() { for (pos = 0; pos <= 180; pos += 1) { //pos+=1等價(jià)于pos=pos+1 myservo.write(pos); delay(15); } for (pos = 180; pos >= 0; pos -= 1) { myservo.write(pos); delay(15); } }
3.2 仿真結(jié)果
圖2 舵機(jī)連線及仿真圖
4 項(xiàng)目2:光控舵機(jī)
實(shí)現(xiàn)功能:隨著光照強(qiáng)度增加,舵機(jī)跟著轉(zhuǎn)動(dòng)。A0產(chǎn)生的模擬值大于500時(shí),內(nèi)置的13引腳的可編程LED發(fā)光。
4.1硬件電路連線
Arduino
Arduino | 功能 | 舵機(jī) | 功能 |
VCC | 正極 | 紅色 | 正極 |
GND | 負(fù)極 | 棕色 | 負(fù)極 |
D9(PWM) | 數(shù)字引腳(PWM) | 橙色(信號(hào)傳輸) | 信號(hào)輸入 |
A0 | 模擬接口(光敏電阻) |
4.2 控制代碼
#include <Servo.h> const int sensorPin = A0; int led=13; int pos = 0; Servo myservo;//創(chuàng)建舵機(jī)對(duì)象 void setup(){ myservo.attach(9, 500, 2500); pinMode(led,OUTPUT); Serial.begin(9600); } void loop(){ int val=analogRead(sensorPin); if(val>500){ digitalWrite(led,HIGH); } else{ digitalWrite(led,LOW); } int yp=map(val,0,1023,0,180); //數(shù)值轉(zhuǎn)換,將[0,1023]產(chǎn)生的模擬值轉(zhuǎn)換成[0,180]中的值 Serial.println(yp); myservo.write(yp); delay(10); }
4.3 仿真結(jié)果
圖4 光控舵機(jī)仿真
5項(xiàng)目3:串口控制舵機(jī)和內(nèi)置LED燈
實(shí)現(xiàn)功能如下:
串口輸入2,led點(diǎn)亮,同時(shí)串口打印“ON”,舵機(jī)轉(zhuǎn)動(dòng)到90°。
串口輸入4,led熄滅,同時(shí)串口打印“OFF”,舵機(jī)轉(zhuǎn)動(dòng)到180°
#include <Servo.h> int led4=4; int led=13; Servo myservo;//創(chuàng)建舵機(jī)對(duì)象 void setup(){ myservo.attach(9, 500, 2500); pinMode(led,OUTPUT); pinMode(led4,OUTPUT); Serial.begin(9600); } void loop(){ if(Serial.available()>0){ char c=Serial.read(); if(c=='2'){ digitalWrite(led,HIGH); digitalWrite(led4,HIGH); myservo.write(90); Serial.println("ON"); } else if(c=='4'){ digitalWrite(led,LOW); digitalWrite(led4,LOW); myservo.write(180); Serial.println("OFF"); } } }
5.1仿真結(jié)果
圖4 串口控制舵機(jī)仿真
6 用到的函數(shù)解釋
- Serial.begin()是串口初始化函數(shù),設(shè)置傳輸速率。
- Serial.println()與Serial.print()的區(qū)別在于前者具備換行功能,后者不具備。
- Servo.h是舵機(jī)庫(kù)文件,直接在Aruidno IDE中可以加載。
- Servo myservo為創(chuàng)建對(duì)象,本質(zhì)就是一個(gè)名稱,myservo可自己命名。
- myservo.attach(9)表示控制舵機(jī)的引腳。
- myservo.write(45)表示舵機(jī)旋轉(zhuǎn)到45°的位置,而不是旋轉(zhuǎn)了45°。
- map()函數(shù)的使用率比較高,將某一區(qū)間的值轉(zhuǎn)換為另外區(qū)間的值。
語法格式為: val =map(value, fromLow, fromHigh, toLow, toHigh);
val,value為同類型變量,fromHigh與fromLow為變量a的最大與最小值,toHigh與toLow為val變量的最大與最小值。map()函數(shù)根據(jù)范圍比例即可將某一區(qū)間的值縮放至另外區(qū)間的值,并將值賦予val。
到此這篇關(guān)于Arduino控制舵機(jī)詳解(含代碼)的文章就介紹到這了,更多相關(guān)Arduino控制舵機(jī)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt5.9繼承QObject創(chuàng)建多線程實(shí)例
本文主要介紹了Qt5.9繼承QObject創(chuàng)建多線程實(shí)例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09C語言實(shí)現(xiàn)繪制南丁格爾玫瑰圖的示例代碼
玫瑰圖中有一種不等半徑的統(tǒng)計(jì)圖稱為南丁格爾玫瑰圖,網(wǎng)上很熱門,是一很有藝術(shù)感的漂亮的統(tǒng)計(jì)圖,下面我們就來看看如何使用C語言繪制它吧2024-03-03C++編程中將引用類型作為函數(shù)參數(shù)的方法指南
這篇文章主要介紹了C++編程中將引用類型作為函數(shù)參數(shù)的方法指南,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09C++動(dòng)態(tài)規(guī)劃之背包問題解決方法
這篇文章主要介紹了C++動(dòng)態(tài)規(guī)劃之背包問題解決方法,實(shí)例分析了背包問題的原理與C++實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04