Processing与Arduino交互-光敏传感器
Posted 村头陈师傅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Processing与Arduino交互-光敏传感器相关的知识,希望对你有一定的参考价值。
跟随环境光变化的太阳
公众号:STCode
1-光敏传感器简介
光敏传感器由光敏电阻构成。光敏电阻的阻值会根据光线强度发生变化。环境光线较弱时,阻值增大;环境光强烈时,阻值变小;当环境光线被完全遮时,阻值最大。简单构造一个电路,将阻值的变化用电压表示出来,即可用Arduino的模拟引脚读取。如图所示是一个光敏传感器模块。
2-Arduino读取光敏传感器
Arduino与光敏传感器模块连接,将光敏传感器A0端的电压读出,并使用串口输出到计算机上显示结果,Arduino与光敏传感器接线及代码如下所示,用Arduino的串口监视器可以读出数值。
接线示意:
Arduino端代码:
int sensorPin = 0;
int val = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(sensorPin);
Serial.println(val);
delay(100);
}
说明:连接好线路并将上述代码下载进去Arduino控制器后,打开串口监视器,即可查看光敏传感器返回的数值。
3-Processing绘制太阳
根据以下代码绘制一个太阳。绘制太阳用了画多角形和曲线的知识,代码首先画了一个14角星形,再在里面画了一个圆,最后在圆上用贝塞尔曲线勾勒出笑脸,如图。绘制完毕后调用save()函数将绘制的图片存储为sunshine.jpg文件。
void setup() //主函数
{
size(500,500); //背景尺寸
sun(250,250,200,120,14); //绘制太阳函数
save("sunshine.jpg"); //将图像储存为sunshine.jpg文件
}
void sun(float x,float y,float r1,float r2,int n) //绘制太阳函数,n表示角数
{
background(255); //背景颜色
fill(250,180,141); //尖角填充颜色
float radian = TWO_PI/(n*2); //三角函数参数
float xtemp,ytemp; //定义定点横坐标、纵坐标
beginShape(); //开始记录形状顶点
for(int i = 0;i<n*2;i++) //循环
{
if(i%2 == 0)
{
xtemp = x + cos(radian*i)*r1; //外圆顶点
ytemp = y + sin(radian*i)*r1;
}
else
{
xtemp = x + cos(radian*i)*r2; //内圆顶点
ytemp = y + sin(radian*i)*r2;
}
vertex(xtemp,ytemp); //绘制顶点
}
endShape(CLOSE); //停止记录
strokeWeight(1); //设置线宽
fill(250,218,141); //填充颜色
ellipse(250,250,250,250); //绘制圆
noFill(); //无颜色填充
strokeWeight(6); //设置线宽
bezier(140,210,170,170,190,170,220,210); //贝塞尔曲线,绘制眼睛
bezier(280,210,310,170,330,170,360,210);
strokeWeight(15); //设置线宽
bezier(210,300,220,330,270,330,290,300); //贝塞尔曲线,绘制嘴巴
}
绘图效果:
将上述代码生成的sunshiner.jpg文件复制到以下代码的同一个文件夹中。以下代码展示了读取图片,演示了太阳从暗变亮,从亮变暗的过程。(此代码无需与Arduino交互)
PImage img;
int i = 0;
boolean max = false;
void setup()
{
size(500,500);
img = loadImage("sunshine.jpg");
background(255);
}
void draw()
{
if(max == false)
{
if(i<=255)
i++;
else
{
i = 255;
max = true;
}
}
else
{
if(i>0)
i--;
else
{
i = 0;
max = false;
}
}
sunDisplay(i);
}
void sunDisplay(int j)
{
tint(j);
image(img,0,0);
}
4-Arduino与Processing交互
下面示例代码演示了如何从Arduino获取光敏传感器的数值,并用数值控制图中太阳的亮度,在黑暗的环境中,太阳图片变暗;在光亮的环境中,太阳图片变得明亮。
Processing端:
PImage img;
import processing.serial.*;
Serial myPort;
void setup()
{
myPort =new Serial(this,"COM10",9600);
size(500,500);
img =loadImage("sunshine.jpg");
background(255);
myPort.clear();
}
int data;
void draw()
{
if(myPort.available()>0)
{
data=myPort.read();
if(data>255)
{
data =255;
}
data =255-data;
println(data);
}
sun(data);
// println("");
}
void sun(int light)
{
tint(light);
image(img,0,0);
}
Arduino端:
int sensorPin = 0;
int val = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(sensorPin);
Serial.write(val);
delay(30);
}
验证一下效果吧~
以上是关于Processing与Arduino交互-光敏传感器的主要内容,如果未能解决你的问题,请参考以下文章
Arduino与Processing交互-超声波测距传感器的读取与显示