1.概述
这是一个常用的魔术光杯传感器。原理是利用PWM调光的原理,两个传感器的亮度发生变化。滚珠开关提供数字信号,触发PWM的调节,通过程序的设计,我们就能看到类似于两组装满光的杯子倒来倒去的效果了。为方便接线,我们将A3 A5当做数字口用,利用PWM的基本原理,我们将A3 A5信号端模拟成两个PWM口。
为了方面接线,我们还配送1根4pin线,线的一端为白色防反插接口(和传感器上防反插白色端子匹配),另一端为4pin杜邦线母头接口。
传感器兼容各种单片机控制板,如arduino系列单片机。使用时,我们可以在单片机上堆叠一个传感器扩展板。传感器和自带导线连接,然后连接在传感器扩展板上,简单方便同时,传感器自带2个直径为3mm的定位孔,方便你将传感器固定在其他设备。
2.规格参数
导线长度:200mm
工作电压:DC 3.3-5V
控制信号:数字信号(模拟PWM信号)
接口:间距为2.54mm 4pin防反接口
定位孔大小:直径为3mm
尺寸:34*27*15mm
重量: 3.2g*2
3.连接图
4.测试代码
int LedPinA = A3;
int LedPinB = A5;
int ButtonPinA = A2;
int ButtonPinB = A4;
int buttonStateA = 0;
int buttonStateB = 0;
int brightnessA = 0;
int brightnessB= 1000;
void setup()
{
Serial.begin(9600);//设置波特率
pinMode(LedPinA, OUTPUT);
pinMode(LedPinB, OUTPUT);
pinMode(ButtonPinA, INPUT);
pinMode(ButtonPinB, INPUT);
}
void loop()
{
buttonStateA = digitalRead(ButtonPinA);//读取数字口7的数值赋值给buttonStateA
if (buttonStateA == HIGH && brightnessA != 1000)
//当buttonStateA为高电平且brightnessA不为1000
{
brightnessA++;//brightnessA加1
}
if (buttonStateA == LOW && brightnessA != 0)
//当buttonStateA为低电平且brightnessA不为0
{
brightnessA– ;//brightnessA减1
}
Serial.print(brightnessA);//显示brightnessA数值
Serial.print(” “);
buttonStateB = digitalRead(ButtonPinB);//读取数字口4的数值赋值给buttonStateB
if (buttonStateB == HIGH && brightnessB != 0)
//当buttonStateB为高电平且brightnessA不为0
{
brightnessB–;//brightnessB减1
}
if (buttonStateB == LOW && brightnessB != 1000)
//当buttonStateB为低电平且brightnessA不为1000
{
brightnessB++;//brightnessB加1
}
Serial.println(brightnessB);//显示brightnessB数值,并自动换行
if((brightnessA>0)&&(brightnessA< 1000))
PWMA(brightnessA);
if (brightnessA ==0)
digitalWrite(A3, LOW);
if (brightnessA==1000)
digitalWrite(A3, HIGH);
if ((brightnessB>0)&&(brightnessB< 1000))
PWMB(brightnessB);
if (brightnessB==0)
digitalWrite(A5, LOW);
if (brightnessB==1000)
digitalWrite(A5, HIGH);
}
void PWMA(int val)//定义一个脉冲函数
{
for (int i =0; i <5; i++)
{
digitalWrite(A3, HIGH);
delayMicroseconds(val); // Approximately 10% duty cycle @ 1KHz
digitalWrite(A3, LOW);
delayMicroseconds(1000 – val); //修改这里的1000可以调整频率
}
}
void PWMB(int val1)//定义一个脉冲函数
{
for (int i =0; i <5; i++)
{
digital
Write(A5, HIGH);
delayMicroseconds(val1); // Approximately 10% duty cycle @ 1KHz
digitalWrite(A5, LOW);
delayMicroseconds(1000 – val1); //修改这里的1000可以调整频率
}
}
5.测试结果
烧录好测试代码,按照接线图连接好线;利用USB接口上电后,进入串口监视器,设置波特率为9600。将两个魔术光杯传感器同时倾斜一边, 一个魔术光杯上的LED逐渐变暗,同时另一个逐渐变亮,最终一个LED完全熄灭,一个LED最亮;在串口监视器中看到对应具体数值变化,如下图。当倾斜另一边中,现象一样,方向相反。