2014年12月30日 星期二

Lab10-ARDUINO回授伺服機SERVO-Knob第10個實驗


這個用的是  Tower Pro 的 micro servo99 之 SG90 伺服機 ,不知道買到的是不是盜版,因為感覺有點澳
ARDUINO UNO R3 版
開發環境 1.5.8 IDE 

材料
要幾條線
跟一個伺服機
麵包版
可變電阻旋鈕
ARDUINO UNO 版(別的應該也可以)
USB 線連 ARDUINO 版
原始 範例程式碼 來自 Arduino 開發環境 FILE\EXAMPLES\SERVO\KNOB ==>以下程式後來進行了修改
1.限制轉動角度MAPPING不超過1015,不小於10
2.輸出到監控畫面 val and volt(計算過後的電壓) Angle(計算過後的絕對角度)

/* 
 Controlling a servo position using a potentiometer (variable resistor) 
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> 

 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://arduino.cc/en/Tutorial/Knob
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

/////////////////////////////
float volt ; //   additional -2014-dec-30th -Monitoring voltage
float Angle; //  additional -2014-dec-30th -Monitoring voltage
///////////////////////////////

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
///////////////
  Serial.begin(9600);  //  2014-dec-30th -Monitoring voltage
///////////
}

void loop() 
{ 
  val = analogRead(potpin);   // reads the value of the potentiometer (value between 0 and 1023) 
  
  ////////below added 2014 DEC 30th
  volt=val*(5.0/1023.0) ; //cal the voltage ,
  //must use float and 5.0 digital point 
   Angle=val*(180.0/1023.0) ; //cal the angle
   Serial.print(val);
  Serial.print("   Voltage : ");
  Serial.print(volt);
  Serial.print("  Angle:   ");
  Serial.println(Angle);
  /////above added 2014 DEC 30th
  
  if ((val>10) && (val<1015)){
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                  // sets the servo position according to the scaled value 
  delay(15);                  // waits for the servo to get there 
  }
  
  //////  below additional -2014-dec-30th -Monitoring voltage
  if (val<10) {
    Serial.println(" below 10"); //safe control
  }
  if (val>1015) {
   Serial.println("  over 1015"); //safe control
    }
 //////////////////////////above
遇到問題

1.計算電壓與角度變數要用浮點數 float宣告,計算式的數字要加小數點且加個0,所以起初值都是0,改了就好了
2.很奇怪的是,選鈕一直轉 ,analog read 讀到的180後直接跳1023,估計應該是被map過後,所以改了一下
3.改來改去又忘了接USB線
4.新增 SERIAL監控 忘了 用 Serial.begin(9600) 開啟,所以起初沒有輸出到監控畫面
5.一直切換到簿同開發畫面(其他開啟的程式視窗)會產生異常,可見編譯與燒錄時,IDE都會取得作用中的視窗 




結果畫面




結果錄影







沒有留言:

張貼留言