RoBoard魔人的機器人日誌

2016/2/11

[86Duino] 機器人動態同步的物聯網應用

今天本魔已將先前提到的機器人動態同步上傳至Github
當環境都架設好之後便可以使用,
而機器人動態同步的主系統為ROS
所以在Linux上架設好ROS環境後,
開啟ROS Serial Server,
讓所有機器人連線到同一區域網路下,
確認所有機器人皆連到主機後,
就可以開始同步動作啦~。



而這機器人分別是史加納以及86小六足,
在此奉上它們的開源Github,
要做幾隻就做幾隻,
只要WIFI AP夠強,
要做一整個小巨蛋的小六足跳舞也不是問題呢XD
Github中已有編好的妖怪舞給各位做為範例!
86Hexapod: https://github.com/roboard/86Hexapod
86小六足
Skarner: https://github.com/RoBoardGod/Robot-Skarner
史加納(偽娘型態)






而史加納與86小六足接線圖也請參考下圖:
86Hexapod for 86Duino Zero
86Hexapod for 86Duino One

Skarner for 86Duino One





Share:

2016/2/2

[86Duino] 在SPI上使用ESP8266

ESP8266,是一個極為便宜的Wifi晶片,
因為網路上已經有許多的介紹文,所以本魔在此就不多贅述。

首先先講講一般ESP8266的接法及使用,
標準接線圖
實際範例
將ESP8266接上86duino後,
就可以將下列程式碼燒入86duino,
這樣就可以透過來做AT Command的控制。

void setup()
{

 Serial.begin(9600);
 Serial1.begin(115200);
}
void loop()
{
 while (Serial1.available()) {
  Serial.write(Serial1.read());
 }
 while (Serial.available()) {
  Serial1.write(Serial.read());
 }
}


燒入後可以用
這樣就可以做一些基本連線及設定的控制,
至於下AT Command的方法請參考文件



然而為什麼要改裝到SPI上呢?
請看下圖!

改裝後
沒錯,這樣就可以牢牢的插在86Duino上,
因為在本魔實驗時常常遇到因機器人晃動造成ESP8266電源接觸不良導致斷線,
而且這樣也不用考慮整線的問題。

那麼就開始進入我們的教學,
首先要做出我們的轉接座。
轉接座及ESP8266
材料也很簡單,
兩顆母座2x5 ROHS及一條cable
母座2x5 ROHS

或許你會問,
為什麼需要多一條線?
SPI不就有電源輸出了嗎?
為什麼還要再跳線?
這是因為SPI是只有5v輸出,
而ESP8266的電源必須3.0V至3.6V間,
所以多拉一條跳線接3.3v。
本魔測試過ESP8266接5v電源也是可以工作的
,只是有過熱燒壞的風險,或其他狀況,所以也不是很推薦這樣使用。


SPI腳位圖
本魔再對照過後認為將SPIDI改TX、SPICS改RX會比較好焊。

轉接圖
也就是轉接頭只焊3PIN,其餘兩PIN3.3v直接跳線。
本魔的方法是,將不需要的PIN腳拔掉,再將PIN腳折至相連。
焊接前
焊接後
當然,只有三根腳支撐是相當不牢固的!
所以本魔在中間灌入熱熔膠,固定並防止短路。
切記接上ESP8266時不要接反了,
為防止接錯本魔還貼了辨識用的紅紙。
熱熔膠及辨識用的紅紙



結束後就可以撰寫轉換的程式囉!

在86Duino libraries中的io.h有一個io_outpb,
io_outpb它是可以直接存取硬體IO的function
這function是非常低階的控制,
基本上是要到Hacker等級的才會玩的!
所以如果你不是Hacker的話就不要亂玩唷!
因為很重要所以要標紅字。

直接存取硬體IO的話就可以將你要的腳位切換成你要的功能,
所以首先要先去了解86Duino的IO Port,
可以在官方找到86Duino CPU的Datasheet(Vortex86EX Datasheet V1.4),
我們可以看到P306.文中的CrossBar Config Registers內有寫各功能的編號,
找出我們所需要的就是將COM1的TX、RX更換為SPI的CS、DI,
000001b COM1-TXD1
000010b COM1-RXD1
001001b SPI-CS1
001100b SPI-DI

而COM1的TX、RX及SPI的CS、DI的address分別為:
0x0A12 COM1 TX
0x0A13 COM1 RX
0x0A20 SPICS
0x0A22 SPIDI
如此一來我們就可以寫出接上轉接座的控制程式碼:

void setup()
{
 io_outpb(0x0A12,0x00); //enable COM1 TX pin
 io_outpb(0x0A13,0x00); //enable COM1 RX pin
 io_outpb(0x0A20,0x02); //SPICS to RX
 io_outpb(0x0A22,0x01); //SPIDI to DX
 Serial.begin(9600);
 Serial1.begin(115200);
}
void loop()
{
 while (Serial1.available()) {
  Serial.write(Serial1.read());
 }
 while (Serial.available()) {
  Serial1.write(Serial.read());
 }
}
Share:

魔人歸來



或許有人會問,
在一年多前的COSCUP演講後,
為什麼本魔怎麼就消失了?

其實答案很簡單,
因為國家需要我!本魔去盡國民應盡的義務XD
本魔甚至還去體驗了從1250英呎是跳下來的感覺呢!

回到主題,
近期本魔做了過往的機器人的精華合體,
也會陸陸續續打過程及教學文。
咦?
你問我什麼叫做「過往的機器人的精華合體」?
過往的機器人是指機械史加納還有幾台人型機器人,
那合體該不會是!?

絕對不是你想的這東西!
而是近期本魔用了最近很夯的ESP8266,
製作了機器人動態同步的IOT應用,
沒錯,IOT就是最近很夯的物連網啦!
廢話不多說,請看影片~






( 聽說今年尾牙流行跳妖怪舞 ... XD )最近用 86Duino + ESP8266 為客戶寫了一個 device 動態同步的物聯網應用 sample code, 展示如何動態增刪同步節點, 並在任意時間點同步任意 device. 因為阿宅工程師們覺得這個 sample 也蠻適合拿來做機器人跳舞同步的應用, 於是一群人就玩興大起, 搞出了下面這段新春賀歲特別節目~XDDD
RoBoard Lab 貼上了 2016年2月1日



或許有人會問為什麼不一開始就把機器人放著跳呢?
間單來說就是告訴各位我們沒有作弊阿XD
動態同步也就是要隨時開機隨時都能跟上舞步的唷!
如果是編動作,一鍵到底的方式可是沒辦法做出這種效果呢!
Share:
技術提供:Blogger.

追蹤者