用Arduino+OSC建立一个iPad铁路王国巡视机

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

简介

 

这个教程告诉你如何建立一个iPad控制的铁路王国。如果你还不知道用Arduino进行工作,请阅读我的Arduino OSC step by step howto帖子。

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

1. 硬件设置

  • 展示出如何连接到一起
  • 网络设置
  • 把伺服机附在铁路组件上(轨道,火车站)

2. 软件设置

  • 准确的Arduino代码
  • 试样的TouchOSC配置

1. 硬件设置

我们来看一下设置原理图是如何连接的。

  • 一个伺服机连接到数字引脚19,20,21
  • 给Arduino Ethernet 指定一个IP 192.168.0.178
  • iOS将通过DHCP分配一个IP 192.168.0.12

硬件组件

组件 

你需要如下组件以构建你的设置:

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

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

此示例面板,包括一个推杆,两个转换按钮,用于出发伺服器运动,文本框区域接收Arduino文字信息。

触发按钮1

它由两个重要参数组成,用于Arduino与servo之间的通信。

1. OSC 名称/1/toggle1/1/toggle1

与Arduino代码中的getZ_OSCAddress 行一致

2. 取值范围:0到62

触发转换器开关时,这个值指定两个准确伺服器的角度,请适当调整。

触发按钮2

它由两个重要参数组成,用于Arduino与servo之间的通信。

1. OSC 名称/1/toggle2/1/toggle2

与Arduino代码中的getZ_OSCAddress 行一致

2. 取值范围:0到62

触发转换器开关时,这个值指定两个准确伺服器的角度,请适当调整。

转换按钮1

它由两个重要参数组成,用于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”一致

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值