Arduino Mega при питании от внешнего БП перезагружается

bam
Offline
Зарегистрирован: 31.01.2016

Ситуация следующая, к Ардуино мега подключениы 5 ультазвуковых дальномера HY-SRF05При работе от USB все работает так как надо, но при включении от внешнего БП 12V каждые несколько секунд происходит перезагрузка. Может есть специалисты, подскажите в чем косяк. 

#include <NewPing.h>

#define MAX_DISTANCE 50 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

#define LAMP_RELE 6
#define SCULL_RELE1 7
#define SCULL_RELE2 8
#define SCULL_RELE3 9

#define INIT_PORT 5 //порт инициализации
#define OPEN_PORT 3 //порт принудительного открытия
#define STATUS_PORT 4 //порт состояния

int right_min[] = {25,0,25,0,0,25}; // 0 1 2 3 4 5
int right_max[] = {28,0,28,0,0,28}; // c,o,c,o,o,c ; o - open; c- close
int old_state[] = {-1,-1,-1,-1,-1,-1}; //запоминаем предыдущее состояние  
int open_scull=1;
int distance=0;

unsigned long int time_delay=0;

NewPing sonar[6]={NewPing(22, 23, MAX_DISTANCE),
                  NewPing(24, 25, MAX_DISTANCE),
                  NewPing(26, 27, MAX_DISTANCE),
                  NewPing(28, 29, MAX_DISTANCE),
                  NewPing(30, 31, MAX_DISTANCE),
                  NewPing(32, 33, MAX_DISTANCE)};

void lamp_flash() { //функция включения лампы.включает но не чаще одного раза в 0.5 сек после последнего включения
  if(millis()-time_delay>500){
    digitalWrite(LAMP_RELE,LOW);
    time_delay=millis(); 
  }
}

void setup() {
 pinMode(LAMP_RELE,OUTPUT); digitalWrite(LAMP_RELE,HIGH);
 pinMode(SCULL_RELE1,OUTPUT); digitalWrite(SCULL_RELE1,HIGH);
 pinMode(SCULL_RELE2,OUTPUT); digitalWrite(SCULL_RELE2,HIGH);
 pinMode(SCULL_RELE3,OUTPUT); digitalWrite(SCULL_RELE3,HIGH);


 pinMode(STATUS_PORT,OUTPUT); digitalWrite(STATUS_PORT,LOW);
 pinMode(INIT_PORT,INPUT_PULLUP); digitalWrite(INIT_PORT,HIGH);
 pinMode(OPEN_PORT,INPUT_PULLUP); digitalWrite(OPEN_PORT,HIGH);

 pinMode(13,OUTPUT);
 digitalWrite(13,HIGH); delay(500);digitalWrite(13,LOW);
}

void loop() {
 /* 
 if(digitalRead(OPEN_PORT)==LOW){
   digitalWrite(SCULL_RELE1,LOW);
   digitalWrite(SCULL_RELE2,LOW);
   digitalWrite(SCULL_RELE3,LOW);
   digitalWrite(STATUS_PORT,HIGH); 
 }
 */
 
 if(digitalRead(STATUS_PORT)==LOW){ 
   delay(50);                      // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
   open_scull=1;
   for(int n=0;n<6;n++){
 //  unsigned int uS1 = sonar[n].ping(); // Send ping, get ping time in microseconds (uS).
 //    distance = sonar[n].convert_cm(uS1); 
 
   distance = sonar[n].ping_cm(); 
 
   if(abs(old_state[n]-distance)>20){ //проверяем что предыдушее состояние поменялось больше чем на 10 - если да то включаем лампы
    lamp_flash();
    old_state[n] = distance;
   }
   
   if(distance > right_max[n] || distance < right_min[n]) {
    open_scull=0;
   } 
  }
 
  if(open_scull==1) {    
   digitalWrite(SCULL_RELE1,LOW); delay(300);
   digitalWrite(SCULL_RELE2,LOW);delay(300);
   digitalWrite(SCULL_RELE3,LOW);
   digitalWrite(STATUS_PORT,HIGH);
  }
 }

  if(millis()-time_delay>100){ // через 0.5 секунды после включения лампы гасим ее
     digitalWrite(LAMP_RELE,HIGH);
  }
 /*
   
  if(digitalRead(INIT_PORT)==LOW) {
   setup();
 }
 */
 
}

 

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

БП на 12В стабилизированный? Ток? У тебя в скетче реле есть. От ЮСБ  вместо них у тебя светодиоды включены? Схему включения покажи.