2016年1月30日 星期六

ROSA 系統開發 23 ─ mBot 程式庫的引用

http://4rdp.blogspot.com/2016/01/rosa-23-mbot.html

已經有一些網友陸陸續續開始參考我的網誌,以複製 P&B Spider 組裝步驟,因此本文進一步說明如何將 ROSA 安裝到 Arduino Uno 中。

當你購買 P&B Spider 後,就會獲得程式下載網址,下載檔案後就請解壓縮 rar,裡面有 ino 程式及 zip 程式庫。ROSA_Spider.ino 是 ROSA 的主程式,這個版本適合使用於 P&B Spider,程式編譯前請從 Arduino IDE 的 menu bar 的草稿碼,點選 Include Library > Add .ZIP Library,將 mBot.zip 程式庫加入,這個動作只要做一次,Arduino 就會永久加入。

mBot.zip 是 Makeblock 所開發的程式庫,ROSA 在這程式庫裡再加入一個紅外線副程式 ir.key(),請參考 http://4rdp.blogspot.tw/2015/09/rosa-4.html 說明。

ROSA 為什麼要使用 mBot 的程式庫?

2016年1月27日 星期三

P&B Spider 的 Arduino 接線

http://4rdp.blogspot.com/2016/01/p-spider-arduino.html

今天貼出 P&B Spider 電路接線的方法,將 Arduino Shield V5 接到 Arduino Uno 上方,然後紅外線接收模組接在 D2,USB 轉 TTL 傳輸線 (也可以自製 USB 電源線) 的紅線接在 V,黑線接在 G,綠及白線未使用。

然後 SG-90 分別接到 4, 5, 6, 7, 9, 10, 11, 12。

2016年1月23日 星期六

ROSA 系統開發 22 ─ 伺服馬達方向調整

http://4rdp.blogspot.com/2016/01/rosa-22.html

因應 Pizg 釋出 P&B Spider 組裝圖,下載網址 https://www.facebook.com/groups/1675689226030778/1680624992203868/, ROSA 系統程式也需要些微調動,由於這隻機器蜘蛛設計的很不錯,可以有四種腳位組裝方式,可因應各類不同需求,示意圖如下:


組裝一
組裝二

2016年1月20日 星期三

訓練數學感 85 ─ 東西多快速度會傷人?

http://4rdp.blogspot.com/2016/01/85_20.html

圖片來自 https://pixabay.com/
假設某物體質量 1 kg,請問多快速度撞到人,會讓人體受傷?

2016年1月16日 星期六

ROSA 系統開發 21 ─ HC-05 藍牙連線

http://4rdp.blogspot.com/2016/01/rosa-21-hc-05.html

今天起開始進入 ROSA 系統另一個專業主題,有關於通訊控制方面問題,這裡就是接續以前一篇 ROSA 的通訊與建議接腳 專文所提及的藍牙連線,ROSA 除了可以透過 USB 與 PC 連線外,藍牙是一個經濟實惠無線通訊的解決方案,一般適用於無障礙十米內遙控,電腦、平板、手機皆可。








// (C) 2015-2016, Bridan Wang, CC BY-NC-SA 3.0 TW
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)

void setup(void) {
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available())
    Serial.write(Serial.read());
}

2016年1月13日 星期三

訓練數學感 84 ─ 負數票

http://4rdp.blogspot.com/2016/01/84.html

圖片來源  維基百科
今年 1/16 即將舉行第十四屆總統選舉,希望當天大家都能去投票選出自己心目中理想的人選,在這次的選舉議題中,有人提出負數票的想法,個人對這個制度並無好惡,這裡只純數學討論可能的情形。

假設某項選舉有三人參選,僅一人能當選,選民共有一萬人,每人都有一張贊成票及一張反對票,候選人獲得的贊成票數減掉反對票數,最後算出「淨贊成票數」,票數最高者才當選。請問要達到多少「淨贊成票數」才能篤定當選?

2016年1月9日 星期六

ROSA 系統開發 20 ─ 另一個 Arduino 紅外線遙控器

http://4rdp.blogspot.com/2016/01/rosa-20-arduino.html

最近在整理 P&B Spider 材料清單,紅外線遙控器是現階段機器蜘蛛重要的控制器,不過玩家不一定可以買到 KEYES 廠牌的遙控器,也可能會買到 Arduino 音響控制型態的紅外線控制器,那也沒關係,反正發揮 Maker 精神,把程式改一改可以用最重要。



















// (C) 2015-2016, Bridan Wang, CC BY-NC-SA 3.0 TW
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)


const byte IR_CODE[][22] PROGMEM = {
// X,  1,  2,  3,  4,  5,  6,  7,  8,  9,  0, <<, >>, EQ, V-, V+, RP, C-, C+, PW, MU, >|
  255, 16, 17, 18, 20, 21, 22, 24, 25, 26, 12, 13, 14,  8,  9, 10,  4,  5,  6,  0,  1,  2,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
};

void (*FUNC_JUMP[])(void) = {
  FUNC_N,  // none
  FUNC_1,  // 1
  FUNC_2,  // 2
  FUNC_3,  // 3
  FUNC_4,  // 4
  FUNC_5,  // 5
  FUNC_6,  // 6
  FUNC_N,  // 7
  FUNC_N,  // 8
  FUNC_N,  // 9   
  FUNC_0,  // 0
  FUNC_L,  // <<     left 
  FUNC_R,  // >>     right
  FUNC_8,  // EQ
  FUNC_7,  // V-
  FUNC_9,  // V+
  FUNC_P,  // RP
  FUNC_D,  // C-     down
  FUNC_U,  // C+     up
  FUNC_S,  // Power
  FUNC_N,  // MU
  FUNC_K,  // >|     OK
};

void IR_CHECK() {   // for Audio IR
  byte i;
  byte j;
  j = ir.key();
  // Serial.print("IR - ");
  // Serial.println(j);
  for (i = 21; i != 0; i--) {
    if (j == pgm_read_byte(&IR_CODE[0][i])) {
      if (pgm_read_byte(&IR_CODE[1][i])==0 || pre_ir!=j) {
        pre_ir = ir_code;
        ir_code = i;
        step_no = 0;
        (*FUNC_JUMP[i])();
break;
      }
    }
  }
  ir.loop();
}

2016年1月6日 星期三

演算法訓練 11 ─ 萬年曆 (Perpetual calendar)

http://4rdp.blogspot.com/2016/01/11-perpetual-calendar.html

其實本文的主題應該稱為星期的計算,通常萬年曆需要計算特定日子是星期幾,由於我們的年曆有閏年平年,雖然閏年看似規則變化,但是每月日期不一,難以用一個數學式表達,近日從維基百科查得 蔡勒公式 (Zeller's congruence),算是一個簡單的方法,而且這題目也適合給初學程式設計者練習,因此收錄。

2016年1月2日 星期六

ROSA 系統開發 19 ─ 第二代六腳機器蜘蛛+meArm

http://4rdp.blogspot.com/2016/01/rosa-19-mearm.html

(請開啟字幕觀賞)

// (C) 2015-2016, Bridan Wang, CC BY-NC-SA 3.0 TW
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)

#define LAST_SERVO   16    // for 6 x 2 spider + meArm
#define SERVO_TABLE  17

byte servo_pin[] =
{ 0, 4, 5, 6, 7, 9, 10, 11, 12, 18, 19, 16, 17, 3, 8, 14, 15 };
byte servo_revse[] =
{ 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 };
byte servo_angle[] =
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
byte servo_set[] =
{ 0, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 150, 90, 90, 90 };
byte servo_speed[] =
{ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
byte servo_hold[] =

{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

#define zeo 0    // zero
#define lif 45   // lift leg
#define ris 135  // rise leg
#define std 90   // stand
#define hon 251  // hold on
#define hof 250  // hold off
#define fwd 60   // forward
#define mid 90   // middle
#define bck 120  // backward
#define art 30   // arm right
#define alt 150  // arm left
#define clp 150  // clip
#define cop 120  // clip open
#define aup 60   // arm up
#define adn 150  // arm down


const byte RUN_0[] PROGMEM = {                // spider start
//   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16  
_SPEED, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 5, 5, 5,   //0
_SERVO, fwd, lif, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,   //1 
_SERVO, mid, std, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,   //2
_SERVO, hon, hon, fwd, lif, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,   //3
_SERVO, 255, 255, mid, std, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,   //4
_SERVO, 255, 255, hon, hon, fwd, lif, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,   //5
_SERVO, 255, 255, 255, 255, mid, std, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,   //6
_SERVO, 255, 255, 255, 255, hon, hon, fwd, lif, 255, 255, 255, 255, 255, 255, 255, 255,   //7
_SERVO, 255, 255, 255, 255, 255, 255, mid, std, 255, 255, 255, 255, 255, 255, 255, 255,   //8
_SERVO, 255, 255, 255, 255, 255, 255, hon, hon, fwd, lif, 255, 255, 255, 255, 255, 255,   //9
_SERVO, 255, 255, 255, 255, 255, 255, 255, 255, mid, std, 255, 255, 255, 255, 255, 255,   //10
_SERVO, 255, 255, 255, 255, 255, 255, 255, 255, hon, hon, fwd, lif, 255, 255, 255, 255,   //11
_SERVO, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, mid, std, 255, 255, 255, 255,   //12
_SERVO, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, hon, hon, cop, alt, 255, 255,   //13
_SERVO, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, clp, mid, 255, 255,   //14
_SERVO, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, hon, hon, 120, adn,   //15
_SERVO, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, hof, hof,  90, aup,   //16
_GOTO, 212,             //17 goto RUN_P
};