翻译自:
简单介绍
这个教程告诉你怎样建立一个iPad控制的铁路王国。
假设你还不知道用Arduino进行工作,请阅读我的帖子。
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接口及我的路由器,你能够如你所愿使用随意路由,而不一定想我那样堆叠那些模块。请阅读我的 帖子,看下用普通路由怎样工作。
铁路网络组件设置
你须要计算出伺服器在组件上的位置。像我,我就补到以下了,你能够使出不论什么招数,让他们能一起工作即可。
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
下载并改动这个例程:
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”一致