用Arduino+OSC創建一個iPad鐵路王國巡視機

翻譯自:http://blog.mydream.com.hk/howto/build-up-a-ipad-plarail-patrol-with-arduino-oschtml

簡單介紹

 

這個教程告訴你怎樣創建一個iPad控制的鐵路王國。ios

假設你還不知道用Arduino進行工做,請閱讀個人Arduino OSC step by step howto帖子。git

http://v.youku.com/v_show/id_XODEwMTk4ODA4.htmlgithub

1. 硬件設置數組

  • 展現出怎樣鏈接到一塊兒
  • 網絡設置
  • 把伺服機附在鐵路組件上(軌道,火車站)

2. 軟件設置網絡

  • 準確的Arduino代碼
  • 試樣的TouchOSC配置

1. 硬件設置

咱們來看一下設置原理圖是怎樣鏈接的。app

  • 一個伺服機鏈接到數字引腳19,20,21
  • 給Arduino Ethernet 指定一個IP 192.168.0.178
  • iOS將經過DHCP分配一個IP 192.168.0.12

硬件組件

組件 iphone

你需要例如如下組件以構建你的設置:socket

1. Arduino 板(Mega2560,UNO...等)oop

2. 傳感器插板(選用)

3. 無線模塊或無線路由器(假設用的是有線Arduino網絡,是選用的)

4. 低功耗伺服單元,推薦一個mini或微型伺服器

5. 電源,好比 無線,局域網,伺服器同一時候推薦選用7.4v

6. 啓用無線 AP/路由。DHCP(用於iPad)

伺服器擴展線鏈接到數字引腳19,20,21.

網線連在無線模塊到LAN模塊之間。爲何?因爲模塊僅支持無線串口通訊,因此它沒法支持偵聽網絡socket。

所以,我把它做爲一個無線AP配置,鏈接我LAN接口及個人路由器,你可以如你所願使用隨意路由,而不必定想我那樣堆疊那些模塊。請閱讀個人 Arduino OSC step by step howto帖子,看下用普通路由怎樣工做。

鐵路網絡組件設置

你需要計算出伺服器在組件上的位置。像我,我就補到如下了,你可以使出不論什麼招數,讓他們能一塊兒工做便可。

http://www.youtube.com/watch?v=Hv9IVDAbao0

http://www.youtube.com/watch?v=spidtmUTUuo 

2. 軟件設置

Arduino 代碼

改動IP地址

給Arduino和你的iOS/Android設備改動IP地址,以配合你的設置。

好比:iOS上的192.168.0.12,而後搜索"mylp"行

 

1
byte myIp[]  = { 192, 168, 0, 178 };  //  Specify your arduino  IP here and the 「destlp」 line.
1
byte myIp[]  = { 192, 168, 0, 12 };  //  your IPad Address here<
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
//  Receive from iOSC http: //recotana .com /iphone/iosc/en/index .html and apply to arduino pins via OSC .
//  Credits to Jerome Dupraz & Retocama
//  Colorsound 011
//  you can download arduino z-osc library from here https: //github .com /djiamnot/Z_OSC
//  you can download arduino code and vvvv patch from here: http: //vvvv .org /contribution/arduinoosc

/*

This is a sample code  for  controlling servo via TouchOSC on

*/

#include
#include
#include
#include

byte myMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte myIp[]  = { 192, 168, 0, 178 };  //  Specify your arduino IP
int  serverPort  = 8000;  //  and listening port as well

byte destIp[] =  { 192, 168, 0, 12 };  //  Talk back with your iPad, not critical
int  destPort = 9000;

float val; //  delcare a variable  for  reading values

//  create servo object to control a servo, remember to attach them  in  setup()
Servo myservo1;
Servo myservo2;
Servo myservo3;

Z_OSCClient client;
Z_OSCServer server;
Z_OSCMessage *rcvMes;
Z_OSCMessage message;

void setup(){
  myservo1.attach(19);  //  attaches the servo on pin 19 to the servo object
  myservo2.attach(20);  //  attaches the servo on pin 20 to the servo object
  myservo3.attach(21);  //  attaches the servo on pin 21 to the servo object
  Serial.begin(19200);
  Ethernet.begin(myMac ,myIp);
  server.sockOpen(serverPort);
}

void loop(){
  if (server.available()){
   message.setAddress(destIp,destPort);
   rcvMes=server.getMessage();

      //  myservo1
      if ( !strcmp( rcvMes->getZ_OSCAddress() ,   "/1/toggle1"  ) )
      {
       val = rcvMes->getFloat(0);
       myservo1.write(val);
       if  ( val > 0 ) {
           message.setZ_OSCMessage( "/1/toggle1_msg"  , "s"  "Stopping at Tsuen Wan"  );
           client.send(&message);
       else  {
           message.setZ_OSCMessage( "/1/toggle1_msg"  , "s"  "Tsuen Wan Station"  );
           client.send(&message);
       }

      }

       //  myservo2
      if ( !strcmp( rcvMes->getZ_OSCAddress() ,   "/1/toggle2"  ) )
      {
       val = rcvMes->getFloat(0);
       myservo2.write(val);

       if  ( val > 0 ) {
           message.setZ_OSCMessage( "/1/toggle2_msg"  , "s"  "Stopping at Lai King"  );
           client.send(&message);
       else  {
           message.setZ_OSCMessage( "/1/toggle2_msg"  , "s"  "Lai King Station"  );
           client.send(&message);
       }

      }

      //  myservo3
      if ( !strcmp( rcvMes->getZ_OSCAddress() ,   "/1/fader1"  ) )
      {
       val = rcvMes->getFloat(0);
       if  ( val == 20 ) {
               myservo3.write(0);
               message.setZ_OSCMessage( "/1/fader1_msg"  , "s"  "Bypass"  );
               client.send(&message);
       else
       if  ( val == 150 ) {
               myservo3.write(150);
               message.setZ_OSCMessage( "/1/fader1_msg"  , "s"  "Normal"  );
               client.send(&message);
       }

      }
  }
}

 

TouchOSC

下載並改動這個例程: Plarail TouchOSC Layout

OSC

此演示樣例面板,包含一個推杆,兩個轉換button,用於出發伺服器運動,文本框區域接收Arduino文字信息。

觸發button1

它由兩個重要參數組成,用於Arduino與servo之間的通訊。

1. OSC 名稱/1/toggle1/1/toggle1

與Arduino代碼中的getZ_OSCAddress 行一致

2. 取值範圍:0到62

觸發轉換器開關時。這個值指定兩個準確伺服器的角度,請適當調整。

觸發button2

它由兩個重要參數組成。用於Arduino與servo之間的通訊。

1. OSC 名稱/1/toggle2/1/toggle2

與Arduino代碼中的getZ_OSCAddress 行一致

2. 取值範圍:0到62

觸發轉換器開關時,這個值指定兩個準確伺服器的角度。請適當調整。

轉換button1

它由兩個重要參數組成。用於Arduino與servo之間的通訊。

1. OSC 名稱/1/fader1/1/fader

與Arduino代碼中的getZ_OSCAddress 行一致

2. 取值範圍:20到150

觸發轉換器開關時,這個值指定兩個準確伺服器的角度,請適當調整。

觸發信息文本框

當發回Arduino信息時,這個標籤區域接收文本信息,咱們先把文本區域置空。當觸發伺服器時,Arduino發回一個"Moved"在文本框區域。 OSC Name: /1/toggle1_msg, /1/toggle2_msg, /1/fader1_msg  OSC名字與Arduino代碼中的「setZ_OSCMessage」一致

相關文章
相關標籤/搜索