偶然發現Arduino Uno的 D0-D13與A0-A5端均可以正常使用舵機


今天早上在做小實驗中,偶然發現Arduino的所有20個輸入輸出端口都能控制舵機(實驗中使用SG90 9g之180°舵機),原來的觀念是只有帶~ 符號的PWM引腳能夠控制舵機,而在實際測試中,發現數字端D0-D13,模擬端A0-A5均可以正常使用舵機。也就是說,Arduino有可能直接控制20路舵機。

實驗場景圖

/*
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗一:不用舵機庫,驅動舵機旋轉到不同角度
使用SG90 9g之180°舵機
實驗接線:舵機S端接Uno的D8,同時也接入LED作為有控制信號的指示燈
注意:上傳時盡量不要接入舵機,防止燒毀USB接口
*/

int servopin = 8; //定義舵機接口數字接口8 也就是舵機的橙色信號線。

void servopulse(int angle)//定義一個脈沖函數
{
int pulsewidth = (angle * 11) + 500; //將角度轉化為500-2480的脈寬值
digitalWrite(servopin, HIGH); //將舵機接口電平至高
delayMicroseconds(pulsewidth); //延時脈寬值的微秒數
digitalWrite(servopin, LOW); //將舵機接口電平至低
delayMicroseconds(20000 - pulsewidth);
}

void setup()
{
pinMode(servopin, OUTPUT); //設定舵機接口為輸出接口
}

void loop()
{
//把值的范圍映射到0到165左右
for ( int angle = 0; angle < 165; angle += 10) {
for (int i = 0; i < 50; i++) //發送50個脈沖
{
servopulse(angle); //引用脈沖函數
}
delay(1000);
}
}

使用D0端的實驗視頻(15秒)

https://v.youku.com/v_show/id_XNTExMDgxOTExMg==.html?spm=a2hzp.8244740.0.0

使用A5端的實驗視頻(15秒)

https://v.youku.com/v_show/id_XNTExMDgxODE4NA==.html?spm=a2hzp.8244740.0.0

實驗動態圖

動圖 https://mc.dfrobot.com.cn/data/attachment/forum/202102/26/080659gijj9srpnr53nsp6.gif

/*
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗二:輸入“1-9”串口命令控制舵機旋轉角度
使用SG90 9g之180°舵機
實驗接線:舵機S端接Uno的A0,同時也接入LED作為有控制信號的指示燈
*/

int servopin = A0; //定義舵機接口A0
int myangle;//定義角度變量
int pulsewidth;//定義脈寬變量
int val;

void servopulse(int servopin, int myangle) //定義一個脈沖函數
{
pulsewidth = (myangle * 11) + 500; //將角度轉化為500-2480的脈寬值
digitalWrite(servopin, HIGH); //將舵機接口電平至高
delayMicroseconds(pulsewidth);//延時脈寬值的微秒數
digitalWrite(servopin, LOW); //將舵機接口電平至低
delay(20 - pulsewidth / 1000);
}

void setup()
{
pinMode(servopin, OUTPUT); //設定舵機接口為輸出接口
Serial.begin(9600);//連接到串行端口,波特率為9600
Serial.println("舵機准備就緒,請輸入1-9" ) ;
}

void loop()//將0到9的數轉化為0到180角度
{
val = Serial.read(); //讀取串行端口的值
if (val > '0' && val <= '9')
{
val = val - '0'; //將特征量轉化為數值變量
val = val * (180 / 9); //將數字轉化為角度
Serial.print("舵機旋轉度數為: ");
Serial.print(val, DEC);
Serial.println();
for (int i = 0; i <= 50; i++) //給予舵機足夠的時間讓它轉到指定角度
{
servopulse(servopin, val); //引用脈沖函數
}
}
}

在串口輸入1-9的數字,舵機則轉動相對應的角度(實際測試A0-A5,D2-D13計18個端口都可使用)

嘗試在串口隨機輸入一組數字

舵機則按每個數字指定的角度,連續旋轉,直到結束


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM