使用Arduino控制9个白炽灯节奏亮灯,运行一段时间会跳出的问题
由于要做一个道具,于是想到了用Arduino去控制九个白炽灯。搭完装置、传程序执行、给Arduino供5v、给灯泡供220v电,继电器正常工作,可以按照预料的方式点灯,但是在过一段时间(时间不固定,有时可以完成整个程序、有时不能完成)之后,Arduino会莫名其妙复位,运行重新开始。(如果只给Arduino供电、不给灯泡供220v电,继电器正常工作,运行不会跳出。)各位小哥哥、小姐姐们,是不是我连线的方式有问题?导致灯泡或继电器的供电有问题?不知道能不能解决,不开心。
整个装置的实物图如下:
整个装置的连接图如下,白炽灯用发光二极管代替一下:
装置的程序如下(个人觉得应该不是程序的问题),程序分为两种,第一段使用vixen控制灯的闪烁、第二段直接控制灯的亮灭:
1.使用vixen3控制:
int A = 2;
int B = 3;
int C = 4;
int D = 5;
int E = 6;
int F = 7;
int H = 8;
int I = 9;
int J = 10;
int i = 0;
int incomingByte;
void setup()
{
Serial.begin(57600);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(H, OUTPUT);
pinMode(I, OUTPUT);
pinMode(J, OUTPUT);
}
void loop()
{
if (Serial.available() >= 9)
{
for (int i=0; i<9;i++)
{
incomingByte = Serial.read();
} // Arduino pins
digitalWrite(A,!incomingByte);// Pin 2
digitalWrite(B,!incomingByte);// Pin 3
digitalWrite(C,!incomingByte);// Pin 4
digitalWrite(D,!incomingByte);// Pin 5
digitalWrite(E,!incomingByte);// Pin 6
digitalWrite(F,!incomingByte);// Pin 7
digitalWrite(H,!incomingByte);// Pin 9
digitalWrite(I,!incomingByte);// Pin 10
digitalWrite(J,!incomingByte);// Pin 11
}
}
2.直接控制:
int led[]={2,3,4,5,6,7,8,9,10};
int ledCount=9;
void setup() {
// put your setup code here, to run once:
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(led, OUTPUT); } //分别定义针脚
}
void liushuiA(){
for (int thisLed = 0; thisLed < ledCount; thisLed+=2) {
digitalWrite(led,HIGH);
}
delay(200);
for (int thisLed =0; thisLed < ledCount; thisLed+=2) {
digitalWrite(led,HIGH);
}
delay(200);
for (int thisLed = 0; thisLed < ledCount; thisLed+=2) {
digitalWrite(led,LOW);
}
delay(200);
for (int thisLed = 0; thisLed < ledCount; thisLed+=2) {
digitalWrite(led,LOW);
delay(200);
}
}
void liushuiB(){
for (int thisLed = 0; thisLed < ledCount; thisLed+=1) {
digitalWrite(led,HIGH);
delay(200);
}
for (int thisLed = 0; thisLed < ledCount; thisLed+=1) {
digitalWrite(led,LOW);
delay(200);
}
}
void liushuiC(){
for (int thisLed = 0; thisLed < ledCount; thisLed+=2) {
digitalWrite(led,HIGH);
}
delay(500);
for (int thisLed = 0; thisLed < ledCount; thisLed+=2) {
digitalWrite(led,LOW);
}
for (int thisLed = 1; thisLed < ledCount; thisLed+=2) {
digitalWrite(led,HIGH);
}
delay(500);
for (int thisLed = 1; thisLed < ledCount; thisLed+=2) {
digitalWrite(led,LOW);
}
}
void liushuiD(){
for (int thisLed = 0; thisLed < 5; thisLed+=1) {
digitalWrite(led,HIGH);
delay(500);
}
for (int thisLed = 8; thisLed > 4; thisLed-=1) {
digitalWrite(led,HIGH);
delay(500);
}
for (int thisLed = 0; thisLed < 5; thisLed+=1) {
digitalWrite(led,LOW);
delay(500);
}
for (int thisLed = 8; thisLed > 4; thisLed-=1) {
digitalWrite(led,LOW);
delay(500);
}
}
void loop() {
for(int i=0;i<3;i++){
liushuiA();
liushuiB();
}
for(int i=0;i<3;i++){
liushuiC();
liushuiD();
}
for(int i=0;i<3;i++){
liushuiB();
liushuiC();
}
for(int i=0;i<3;i++){
liushuiA();
liushuiD();
}
} 本帖最后由 275891381 于 2017-5-15 16:12 编辑
复位一般都是供电的问题吧,是不是你的都是高电平点亮,总电流超过了最大电流;你更改继电器低电平导通试试(一般灌入电流都比输出大),或者每个输出引脚再串一个电阻试试 有可能是电磁干扰。
但是像这种纯电阻负载的灯泡在继电器通断时没有多大火花的。电灯不接电空跑没问题,把板子与灯泡独立供电试试,不要用开关电源。 继电器复位的大电流使Arduino版触发复位,这个论坛里有很多类似的帖子,可以借鉴一下 5V供电功率加大点,5V和地之间加大电容再试试~ 是不是继电器隔离做得不好,可以用带光耦的继电器试一下
最好用固态继电器,一般都带有过零检测,电磁继电器在导通的时候,有可能220V电压刚好处于波峰位置,干扰比较严重。用电器有可能因此一通电就烧坏,不过灯泡烧坏概率还是蛮小的。固态继电器能检测火线零线电压为0的时候才导通,因此最高可能会有20ms的延迟。 本帖最后由 迷你强 于 2017-5-17 15:21 编辑
:lol你的继电器板子不带自供电,如果用板子的自带电源供电,功率波动会传导到芯片,造成芯片电压波动,因为不知道你实际使用板子的LDO的质量情况,所以建议你继电器板子单独供电。
其实我推荐你用S-100
https://item.taobao.com/item.htm ... hNhQ&id=45576438031
专门针对设计过的电源系统,能够保证驱动器的mcu的稳定工作,只是不知道8个继电器够不够你用的
https://img.alicdn.com/imgextra/i3/750720699/TB2i_LOjVXXXXXtXpXXXXXXXXXX-750720699.jpg 哇 谢谢各位 问题基本上解决了。将继电器单独供电即可。
页:
[1]