Греется ардуино

skryteer
Offline
Зарегистрирован: 13.12.2013

Здравствуйте.
В ардуино я новичок и делаю первый проект. Суть проста - по аналогии с похожими проектами делаю подсветку для лестницы. К ардуино нано v. 3.0 подключены два датчики hc-sr04 с которых я беру расстояние и относительно расстояния говорю ардуино какие включать светодиодные ленты. Когда у меня подключен один датчик, то все хорошо, но когда я подключаю два датчика то начинает тупить и греться микроконтроллер на ардуино. Подозреваю что может быть из за гавнокода который я написал. Может кто то поможет. (ещё такая информация что светодиодная лента у меня 12 в и я использую транзисторы для переключения из ардуино на включение ленты). Собственно сам код (не ругайте пишу впервые)

 

    const int Trig_H = 2;
    const int Echo_H = 3;
    const int Trig_D = 4;
    const int Echo_D = 5;
    const int ledPin1 = A0;
    const int ledPin2 = A1;
    const int ledPin3 = A2;
    const int ledPin4 = A3;
    const int ledPin5 = A4;
    const int ledPin6 = A5;
    
    void setup()
    {
    pinMode(Trig_H, OUTPUT);
    pinMode(Echo_H, INPUT);
    pinMode(Trig_D, OUTPUT);
    pinMode(Echo_D, INPUT);
    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
    pinMode(ledPin3, OUTPUT);
    pinMode(ledPin4, OUTPUT);
    pinMode(ledPin5, OUTPUT);
    pinMode(ledPin6, OUTPUT); 
    
    Serial.begin(9600);
    }
    
    unsigned int time_us_H=0;
    unsigned int distance_sm_H=0;
    unsigned int time_us_D=0;
    unsigned int distance_sm_D=0;
    
    void loop()
    {
    digitalWrite(Trig_H, HIGH);
    delayMicroseconds(10); 
    digitalWrite(Trig_H, LOW);
    digitalWrite(Trig_D, HIGH); 
    delayMicroseconds(10); 
    digitalWrite(Trig_D, LOW);
    
    time_us_H=pulseIn(Echo_H, HIGH); 
    distance_sm_H=time_us_H/58; 
    time_us_D=pulseIn(Echo_D, HIGH);
    distance_sm_D=time_us_D/58; 
    
    Serial.println(distance_sm_H); // Выводим на порт
    //Serial.println(distance_sm_D); // Выводим на порт    
    
    if (distance_sm_H<70)
    {
       digitalWrite(ledPin1, HIGH);
       digitalWrite(ledPin2, HIGH);
       delay (5000);
       digitalWrite(ledPin3, HIGH); 
       digitalWrite(ledPin4, HIGH);
       delay (5000);
       digitalWrite(ledPin5, HIGH); 
       digitalWrite(ledPin6, HIGH);
       delay (5000);
    }
    else
    {
       digitalWrite(ledPin1, 0); 
       digitalWrite(ledPin2, 0);
       digitalWrite(ledPin3, 0); 
       digitalWrite(ledPin4, 0);
       digitalWrite(ledPin5, 0); 
       digitalWrite(ledPin6, 0); 
    }
    
    if (distance_sm_D<70) 
    {
       digitalWrite(ledPin6, HIGH);
       digitalWrite(ledPin5, HIGH);
       delay (5000);
       digitalWrite(ledPin4, HIGH); 
       digitalWrite(ledPin3, HIGH);
       delay (5000);
       digitalWrite(ledPin2, HIGH);
       digitalWrite(ledPin1, HIGH);
       delay (5000);
    }
    else
    {
       digitalWrite(ledPin6, LOW);
       digitalWrite(ledPin5, LOW); 
       digitalWrite(ledPin4, LOW);
       digitalWrite(ledPin3, LOW); 
       digitalWrite(ledPin2, LOW);
       digitalWrite(ledPin1, LOW); 
    }  
    delay(100);
}

ето тестовый вариан на 6 лент. в идеале должно быть 14.

Большое спасибо за помощь.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Приложи фото как все подключено.

skryteer
Offline
Зарегистрирован: 13.12.2013

Ок. Вот фото.

com
Offline
Зарегистрирован: 06.09.2013

Tomasina, и ведь не придерешься! :)

skryteer, под фото подразумевалась схема, чтобы было понятно куда какие провода. их удобно делать в fritzing`е, но можно и просто на бумажке

skryteer
Offline
Зарегистрирован: 13.12.2013

com, спасибо за подсказку. нарисовал. старался.

com
Offline
Зарегистрирован: 06.09.2013

skryteer пишет:

com, спасибо за подсказку. нарисовал. старался.

да оно бывает полезно не для кого-то, а в первую очередь для себя нарисовать, упорядочить, да и когда рисуешь косяки всплывают о которых не помышлял.

так к нашим баранам..... значит, греется, а если оторвать питание от одного из сенсоров - перестает?

skryteer
Offline
Зарегистрирован: 13.12.2013

Когда заливаю проект где только один датчик и одна лента светодиодов, то все хорошо - датчик работает как часы и с интервалом в задание время выводит расстояние которое замеряет. Но когда в тот же проект я дописал еще один датчик и 5 лент светодиодов для теста полутше, то ардуино начинает ту пить (вывод на монитор компорта данных из датчика осуществляется в раз 20 дольше) и микропроцесор очень сильно греется :(
Питание из одного из датчиков попробую убрать через несколько часов когда прийду домой, но проверял датчики - по отдельно оба работают.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Добавь вывод показаний датчиков в Serial.

Мне кажется, на фото один из датчиков подключен неправильно.

skryteer
Offline
Зарегистрирован: 13.12.2013

com, нет. ничего не меняется.

Tomasina, перепроверил подключение, все отлично. Вывод из датчика есть в коде. Отлично работает когда один датчик подключен.

из наблюдения - закоментировал один датчик - все работает, но возникла проблема, ардуино берет 5 В из L7805CV (есть два конденсатора 0,33 мФ и 0,1 мФ как на схеме) и когда система питается от блока питания на 12 В на одном датчике, то стартует нормально, но свет после изменения расстояния на датчике не гаснет (подозреваю что в ето время он и зависает, чип немножко греется) напряжение падает из 5,0 - 5,1 к 4,3 которое идет на ардуино и датчики соответственно. Но когда я подключаю ардуино к компьютеру и в тоже время вся схема подключена параллельно на 12 В, то уменьшения напряжения нету и все работает. Выходит мне не хватает тока на датчике?

А то я уже чет сильно запутался....

Клапауций
Offline
Зарегистрирован: 10.02.2013

у меня некоторые сомнения, что КТ315 нормально потянет светодиодную ленту, поэтому подозреваю, что один или несколько транзисторов вышли из строя, закоротив питание или землю на пин дуино - поэтому и греется.

проверяй без транзисторов - просто светодиоды с токоограничительными резисторами подключи.

skryteer
Offline
Зарегистрирован: 13.12.2013

Клапауций, они нормально работают ето проверено, да и они просто переключают в нужное время коло и не греются, проверял.

com
Offline
Зарегистрирован: 06.09.2013

1. токоограничивающие резисторы на выходные пины не помешали бы

2. какая мощность у ленты? у 315г максимальный ток 0,1А, и имхо это не совсем подходящий транзистор для управления такой нагрузкой