今天Arduino UNO R3的版子到了。超喜欢啊。
准备吧学习笔记一一发在这里。希望坛友们提出意见建议,共同进步!
刚做了一个小玩意,通过超声波模块返回的数据,输出PWM来控制一个RGB LED。
用手掌挡在超声波探头前方来回移动距离,距离探头越近LED越亮,越远越按,直到熄灭。
原理图特别简单,就不上了。
超声波模块里: Trig 接 2, Echo 接 3。
RGB LED 因为是共阴的,所以第二根脚,也就是最长的那根上330欧姆电阻接地。其他三根按顺序红绿蓝接9 10 11口。
这里用到了新的超声波模块库,也就是NewPing这个库,据说准一点。我随之一起传上来。
[pre lang="arduino" line="1" file="LED"]#include <NewPing.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 3
#define MAX_DISTANCE 350
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
float MaxCm;
float reCm;
int led4 = 11;
int led3 = 10;
int led1 = 9;
void setup() {
// Serial.begin(9600); 串口调试蒙蔽了,影响速度。
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(led4, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led1, OUTPUT);
analogReference(DEFAULT);
}
void rgb(char r,char g,char b)
{
analogWrite(led1,r);
analogWrite(led3,g);
analogWrite(led4,b);
}
void loop() {
unsigned char t=0;
reCm=0;
MaxCm=0;
for (int i=0;i<10;i++)
{
float uS = sonar.ping();
reCm=uS/US_ROUNDTRIP_CM;
if (reCm>0)
{
MaxCm=reCm;
}
delay(2);
}
// Serial.print(MaxCm);
// Serial.print("cm");
//Serial.println();
t=255-MaxCm*10+10;
rgb(0,0,t) ; //控制PWM输出蓝色光,也可以改红绿,或者自己配颜色。rgb(t-x,t-x,t-x) 随自己喜欢。
}[/code]
现在问题是即使阻挡探头的物体移动比较慢,超声波得出的数据也会有很大跳动,导致LED一闪一闪的。
有待解决。 |