xlynx 发表于 2017-5-15 15:49:43

使用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:03:54

本帖最后由 275891381 于 2017-5-15 16:12 编辑

复位一般都是供电的问题吧,是不是你的都是高电平点亮,总电流超过了最大电流;你更改继电器低电平导通试试(一般灌入电流都比输出大),或者每个输出引脚再串一个电阻试试

PINKWALKMAN 发表于 2017-5-15 16:42:45

有可能是电磁干扰。
但是像这种纯电阻负载的灯泡在继电器通断时没有多大火花的。电灯不接电空跑没问题,把板子与灯泡独立供电试试,不要用开关电源。

zjz5717 发表于 2017-5-15 19:33:27

继电器复位的大电流使Arduino版触发复位,这个论坛里有很多类似的帖子,可以借鉴一下

antbot 发表于 2017-5-15 20:10:11

5V供电功率加大点,5V和地之间加大电容再试试~

赤云 发表于 2017-5-16 00:19:36

是不是继电器隔离做得不好,可以用带光耦的继电器试一下

五哥U五哥 发表于 2017-5-16 13:21:22

最好用固态继电器,一般都带有过零检测,电磁继电器在导通的时候,有可能220V电压刚好处于波峰位置,干扰比较严重。用电器有可能因此一通电就烧坏,不过灯泡烧坏概率还是蛮小的。固态继电器能检测火线零线电压为0的时候才导通,因此最高可能会有20ms的延迟。

迷你强 发表于 2017-5-17 15:18:01

本帖最后由 迷你强 于 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

xlynx 发表于 2017-6-5 14:50:27

哇 谢谢各位 问题基本上解决了。将继电器单独供电即可。
页: [1]
查看完整版本: 使用Arduino控制9个白炽灯节奏亮灯,运行一段时间会跳出的问题