宜昌老张

Auduino与Processing互动之光敏电阻与莫奈油画

0
阅读(3690)

 

    光敏电阻传感器可以用来对环境光线的强度进行检测,与Arduino专用传感器扩展板结合使用,可以制作与光线强度相关的互动作品。
    Processing画布里的莫奈油画接受Arduino控制器的光敏电阻所检测光线越强,油画越明亮,反之,则越暗淡。
请看视频:

    光敏电阻购买网址: http://item.taobao.com/item.htm?spm=1101*r1F.3-1mJ7Y.h-1MYgS*&id=3032734383&,这个网址展现的是 基于环保型光敏二极管的光线传感器,与普通光敏电阻用法一样。
    视频中出现的油画是法国画家,印象派代表人物和创始人 克劳德·莫奈所作
         
    他对光色的专注远远超越物体的形象,使得物体在画布上的表现消失在光色之中。他让世人重新体悟到光与自然的结构。所以这一视野的嬗变,以往甚至难以想象,它所散发出的光线、色彩、运动和充沛的活力,取代了以往绘画中僵死的构图和不敢有丝毫创新的传统主义。利用莫奈油画对光线和色彩的表现特点,我想到为啥不能把他的油画代表作,通过Processing与Arduino互动,与光敏电阻结合起来,产生出欣赏大师画作的新视角。于是就有了这个实验项目:《Processing互动之光敏电阻与莫奈油画》。
   下面给出Processing和Arduino的程序, 我用蓝色字体标注了两者串口通讯的程序段。
 Processing程序:
/*Processing接受Arduino控制器的光敏电阻检测的光线越强,
 
Processing画布上的莫奈油画越明亮,反之,则越暗淡。*/
import processing.serial.*;//导入serial通信库
Serial duankou;//创建对象duankou
float data;//变量存储Arduino传来数据
//声明一个PImage类型的变量photo
PImage photo;
void setup()
{
  size(800,614);//画布尺寸定义
  //调用图片到变量photo
  photo=loadImage("Monet painting.jpg");
   //设定通讯端口为COM3,波特率为9600
  duankou = new Serial(this,"COM3",9600);
}

void draw()
{
  background(0);
  if(duankou.available()>0)
  {
    //把Arduino传来的字节存入变量data
    //一个字节数值范围是0~255.
    data=duankou.read();
    //把Arduino传来的字节显示在控制台中
    println(data);        
  }
  //光敏电阻,天色光线越弱,10位的AD转换的数字量愈大
 //滤镜色调函数值越小,画面越暗,所以要255-data 
  tint(255-data);  
  image(photo,0,0);//显示图片
}
   注意:图片文件必须存储在项目文件夹里的data文件夹里,所以要把上面的程序先保存起来,文件名例如是“paint”,一保存,您指定目录下,就会出现一个名为“paint”的项目文件夹,再点击Processing编程界面菜单栏中的“Sketch”选项,出现下拉菜单,点击其中的“Add File”命令,在浏览窗口选择一张图片,比如莫奈油画(我从Google图片里搜索到的)。然后如果您再打开“paint”的项目文件夹,会发现多出了一个“data”文件夹,里面存储的就是您刚选择的那个图片。这样您采用photo=loadImage("Monet painting.jpg"),就可以把图片调了到程序中了。
    Processing程序与图片处理相关的命令我用红色字体标注。
 
 Arduino程序:
 
int sensorPin =0;//声明传感器连在端口0
 
int data;//定义向Processing发送数据的变量

void setup()
{
  Serial.begin(9600);//RS232串口通讯波特率为9600  
}

void loop()
{
  //由于类比型传感器产生数字量范围为0~1023
  //而串行通讯以字节单位发送,字节数字范围为0~255
  //把类比型传感器产生数字量除以4赋值给data
  data= analogRead(sensorPin)/4;
   Serial.print(data,BYTE);//定义向Processing发送数据
   delay(100);//延时100ms
}