用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

此演示样例面板,包含一个推杆,两个转换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”一致

时间: 2024-10-06 23:51:22

用Arduino+OSC建立一个iPad铁路王国巡视机的相关文章

c语言:写一个函数建立一个有3名学生数据的单向动态链表

写一个函数建立一个有3名学生数据的单向动态链表. 解:程序: #include<stdio.h> #include<stdlib.h> #define LEN sizeof(struct Student) struct Student { long num; float score; struct Student *next; }; int n; struct Student *creat(void)//定义函数返回一个指向链表头的指针 { struct Student *head

如何建立一个GPU加速的研究计算集群(一)

世界上某些最快的计算机是集群组成的.集群是有多个计算机通过高速网络连接起来的一个计算系统.集群计算机比单台计算机可以达到更高的可用性,可靠性和伸缩性.随着对基于GPU的高性能计算采用越来越广,英伟达GPU逐渐成为世界上最厉害的超级计算集群的一部分.世界前500的超级计算机中,包括差不多50个采用了英伟达的的GPU,并且目前世界上最快的计算机泰坦,使用了大约18000个英伟达开普勒GPU. 在这个帖子中,我将会一步一步的介绍设计.部署和管理一个小型的GPU集群整个过程.我会介绍GPU集群的组成部分

Hyperledger Fabric 建立一个简单网络

p { margin-bottom: 0.25cm; line-height: 120% } Building you first network 网络结构: 2个Orgnizations(每个Org包含2个peer节点)+1个solo ordering service 打开fabric-sample下的示例first-network p { margin-bottom: 0.25cm; line-height: 120% } 其中byfn.sh为启动这个网络的启动脚本,启动脚本中除建立一个包含

如何建立一个自己的网站,建网站的步骤

引导语:其实建好一个网站,除了把网站设计出来之外,还需要域名空间等,那么,具体建立一个网站的步骤是什么呢?接下来由小编给大家带来收集整理的建网站的步骤,希望看完对你有帮助! 网站建设步骤 1.网站方案策划(主要是网站定位,功能,界面风格等) 2.注册域名 3.网站制作(可自己制作,也可选择专业的网站建设公司) 4.购买虚拟主机(或配置独立主机) 5.配置域名.主机及调整程序开通网站 6.网站内容增加 7.网站推广 (一)域名(Domain Name),是由一串用点分隔的名字组成的Internet

Java界面编程-建立一个可以画出图形的简单框架

引子:总共使用3个.java文件,建立一个简单界面编程的框架. 第1个文件:NotHelloWorldComponent.java //NotHelloWorldComponent.java 1 import java.awt.*; 2 import java.awt.geom.*; 3 import javax.swing.*; 4 5 public class NotHelloWorldComponent extends JComponent { 6 public static final

权限管理:建立一个经理组

1.权限管理:建立一个经理组jingli 在系统根下建立一个目录名为public,并切换public目录所属组为jingli 建立aaa bbb ccc三个用户.将aaa bbb两个用户加到jingli组中. groupadd jingli mkdir /pub chgrp jingli /pub/ ll /pub/ useradd aaa useradd bbb useradd ccc passwd aaa passwd bbb passwd ccc usermod -G jingli aaa

【转】如何建立一个样式新颖的CSS3搜索框

在线演示 搜索框大概是web开发中最常用的UI元素之一,我想基本没有必要去介绍如何使用它.无论是网站还是web应用,都会为了增强用户体验而添加它,那么你是不是也想过设计一个别致的搜索框? 在今天的文章中,大家将会学到如何使用伪元素来创建一个超酷的CSS3搜索框.当然在开始介绍前你也可以下载源代码或者查看在线演示. HTML举例: 正如接下来你所看到的,标记很少,并且很容易理解: <form class=“cf form-wrapper”> <input type=“text” place

Hibernate学习——建立一个简单的Hibernate项目

最近老师让做个web小应用,大三的时候学习过一点J2EE的东西,也做过一些web相关的XXX管理系统,都是用servlet,jsp这些完成的,虽然勉强能够完成任务,但其中各种代码掺杂在一起,不好看而且维护起来也很麻烦,出了一点问题要调试好久才能解决.这次打算让自己多学一点东西,在项目的架构上我使用了struts2实现了多层代码的分离,在数据库方面,因为以往的经历都需要对连接数据库进行一个封装,里面包含有数据库的连接,记录的添加,查询,修改和删除等操作,每次使用的过程中都需要先实现一个连接对象然后

虚基类练习:动物(利用虚基类建立一个类的多重继承,包括动物(animal,属性有体长,体重和性别),陆生动物(ter_animal,属性增加了奔跑速度),水生动物(aqu_animal,属性增加了游泳速度)和两栖动物(amp_animal)。)

Description 长期的物种进化使两栖动物既能活跃在陆地上,又能游动于水中.利用虚基类建立一个类的多重继承,包括动物(animal,属性有体长,体重和性别),陆生动物(ter_animal,属性增加了奔跑速度),水生动物(aqu_animal,属性增加了游泳速度)和两栖动物(amp_animal).其中两栖动物保留了陆生动物和水生动物的属性. Input 两栖动物的体长,体重,性别,游泳速度,奔跑速度(running_speed) Output 初始化的两栖动物的体长,体重,性别,游泳速度