零成本学Arduino单片机之Processing


Processing是一种开源的编程语言和环境,它服务于有创意的设计师和艺术家,这些人希望利用某种程序,来创意静态图像和动态影像,并使创作的作品能与人产生良好的互动。这个软件最初的开发目的是作为一种学习编程软件,能够可视化的方法,教学习者计算机编程基础,现在它已经演化为完成专业工作的工具。

    有成千上万的学生,艺术家,设计师,研究人员,和爱好者,用Processing来学习、创意和制作产品。

  如果想让在电脑中设计的艺术作品与外部物理世界进行互动,让作品能与人和物产生“对话”,就需要传感器把外部环境的信息,采集到电脑中处理,做到这一点,目前通常的方法是通过Arduino控制器把传感器数据,通过串口通信,读到上位机软件Processing里,然后通过处理,让Processing数位作品的某些特征与传感器数据产生关联,于是物理世界的环境数据发生变化时,也会使虚拟数字世界的作品随之互动,不断幻化出动态语义的奇妙画面。

    上一篇文章《零成本学Arduino单片机之串行通讯》,讲述了采用Proteus仿真方法,来实现Arduino控制器与上位机软件之间的通信,这种方法同样适合Arduino与Processing的互动。如果学会了这样的方法,在零硬件成本情况下,也可以玩一玩互动媒体艺术了。

     Proteus界面中的下位机Arduino单片机与上位机软件Processing进行串行通讯,并没有硬件连接,需要通过某种软件虚拟出两个相互连接的串口,一个串口分配给Arduino单片机,另一个串口分配给上位机软件,在虚拟环境下,让两者能够完成串行通讯。这种软件就是VSPD虚拟串口驱动软件。

   VSPD虚拟串口驱动软件请下载:http://115.com/file/eizd0usu

    我通过VSPD软件,配对了两个虚拟串口COM7和COM8,COM7分配给了Proteus仿真图中的Arduino硬件电路中的串口连接器COMPIM,COM8分配给了Processing,通过Processing程序的“ duankou = new Serial(this,"COM8",9600);”指令,把COM8指定给了Processing。

Proteus仿真图:

Proteus仿真图,供下载:Proteus.zip

     通过两个虚拟串口,进行串行通信的方法见文章:《零成本学Arduino单片机之串行通讯》,网址:http://www.eefocus.com/zhang700309/blog/12-11/288957_ad4bb.html 

     本篇文章仿真项目的任务是:在仿真图中,用鼠标调节电位计滑动抽头与地之间的电压,Arduino控制器采集这个电压值,正比转换后,通过串口通信,发送到上位机软件Processing处理。Processing中有两个在X,Y轴方向上都相差半个点距的矩形彩盘阵列。当电位计滑动抽头移动时,Arduino控制器采集的电压值会随之增加,同时,Processing的两个矩形阵列中各个彩盘的直径也相应增大。由于彩盘直径增大,使它们相互产生融和,不断幻化出奇妙的图案。如下面图片和视频所示。

仿真实验视频:

双击网址,全屏看仿真实验现象,

http://www.tudou.com/v/dUFtwvQrnTE/&rpid=91074573&resourceId=91074573_04_05_99/v.swf

    仿真图中的Arduino单片机与上位机软件Processing相互通信,除了看懂专题文章《零成本学Arduino单片机之串行通讯》,还要关注Arduino程序和Processing程序中有关串口通信的指令,这些指令我用红色字体在程序中标注出来,仔细研究下。

Arduino程序:

/*任务:调节电位计滑动抽头与地之间的电压,并把

电压值采集到Arduino控制器,经正比转换后,以单字节数据
的形式,通过串口通信,发送到上位机软件处理。*/
int potpin = 0; //把电位计连在Arduino模拟端口0
//初始化 
void setup() 
{
  Serial.begin(9600);//启动串行通讯,波特率为9600b/s
}
void loop() 
{
  //读取电位计电压量的采样值,采样值范围为0~1023
  int sensorValue = analogRead(potpin);  
  //把范围为0~1023的采样值正比转换为范围0~255单字节数据
  int data= sensorValue/4;
  //把包含电压值信息的单字节数据通过串口发送到上位机    
  Serial.print(data,BYTE); 
  delay(20);  //延时20ms
}
 
Processing程序:
 
/*任务:在画布中,创建两个在X、Y轴相差半个点距的两个矩形彩盘矩阵,
接受下位机Arduino控制器发送的单字节数据,并把该数据与彩盘直径关联起来。*/
import processing.serial.*;//导入serial通信库
Serial duankou;//创建对象duankou
float data;//变量存储Arduino传来数据
float d;//彩盘直径
void setup()
{
  //设定通讯端口为COM8,波特率为9600
  duankou = new Serial(this,"COM8",9600);
  size(600,600);//画布尺寸
  background(0);//背景为黑色
  stroke(128);//彩盘线条为灰色
  smooth();
  }
//主程序
void draw()
{
     background(0);
  //当串口缓冲区接受到字符时 
   if(duankou.available()>0)
  {
    //把Arduino传来的字节存入变量data
    data=duankou.read();
   //把Arduino上传的字节0~255正比转换为彩盘直径
    d=map(data,0,255,5,140);
    println(int(d));
   }    
    //生成彩盘阵列
    for(float x1=0;x1<=600;x1 =100)
      {        
        for(float y1=0;y1<=600;y1 =100)
        {
          fill(242,204,47,160);
          ellipse(x1,y1,d,d);
        }
      }
   //生成另一个彩盘阵列
   for(float x1=50;x1<=550;x1 =100)
      {
        
        for(float y1=50;y1<=600;y1 =100)
        {
          fill(116, 193, 206, 160);         
          ellipse(x1,y1,d,d);
        }
      }     
}



结束语

       像Arduino一样,作为数位艺术软件Processing,也慢慢被国人认识和接受,不断有人加入到互动媒体的创意队伍中来,目前,当当网上已经有了两本Processing的入门书,都还不错。一本是译著,书名《爱上Processing》,另一本是广州美院的谭亮老师写的,书名为《Processing互动编程技术》。两年后,如果您再查阅当当网书籍目录,应该会有更多的Arduino和Processing书籍出现。
      单从计算机语言学习的角度出发,Processing就是一个很好的平台。原先学生们编了半天程序,程序结果只是屏幕上的一些字符。而如果用Processing来学计算机语言,编程的结果能表现为更加直观、友好的数位图片,或者是动态影像,这样会激发学生们敲程序的冲动,让编程变成有趣的创作经历。  
    如果您开始对Processing感兴趣了,可以看看我以前写的Processing与Arduino互动 文章 专辑 ,网址为: http://www.eefocus.com/zhang700309/blog/cate_10278_0.html   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值