Arduino перегревается. В чем проблема?

Тема в разделе "Arduino & Shields", создана пользователем ИВАН 1454, 22 янв 2017.

  1. ИВАН 1454

    ИВАН 1454 Нерд

    Здравствуйте! Помогите разобраться отчего перегревается платформа Arduino Uno. Может я неправильно записал код или подключил не правильно.
    Идея заключена в этом. Я решил объединить автономною работу с управлением по Bluetooth. Когда я запускаю робота, нужно зайти в Bluetooth контроллер на смартфоне. Затем перейти в режим джостика и выбрать 1 из 2 кнопок. Режим управления или Автономный режим.
    Если выбираешь режим управления, то можно управлять роботом через Bluetooth (через кнопки "джостика").
    Если выбираешь Автономный режим, то робот будет автоматически объезжать препятствия.
    Для создания робота понадобилось:
    • Arduino uno(1 шт.).
    • Motor Shield от Амперки(2 шт.).
    • Ультразвуковой дальномер HC-SR04(1 шт.).
    • Роботизированная платформа(1 шт.).
    • Troyka Shield(1 шт.).
    • Микросервопривод FS90(1 шт.).
    • Bluetooth модуль HC-06(1 шт.).
    • Батарейный отсек(1 шт).
    Дальномер HC-SR04 подключён к 8 и 9 пину. Модуль HC-06 к 0(RX) и 1(TX), 0 к TXD, 1 к RXD.
    Поможете определить почему Arduino перегревается. Код приведён ниже.

    Код (C++):
    #include <Ultrasonic.h>
    #include <Servo.h>

    #define SPEED_1      5
    #define DIR_1        4


    #define CON_MOTOR1     0
    #define CON_MOTOR2     0

    #define TRIGGER_PIN  8
    #define ECHO_PIN     9

    Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);

    #define SPEED_2      6
    #define DIR_2        7

    #define FORWARD   0
    #define BACKWARD  1
    #define LEFT      2
    #define RIGHT     3

    Servo neck;

    int val;

    void go(int newDirection, int speed)
    {
      boolean motorDirection_1, motorDirection_2;

      switch ( newDirection ) {

        case FORWARD:
          motorDirection_1 = true;
          motorDirection_2 = true;
          break;
        case BACKWARD:
          motorDirection_1 = false;
          motorDirection_2 = false;
          break;
        case LEFT:
          motorDirection_1 = true;
          motorDirection_2 = false;
          break;
        case RIGHT:
          motorDirection_1 = false;
          motorDirection_2 = true;
          break;
      }
      analogWrite(SPEED_1, speed);
      analogWrite(SPEED_2, speed);

      digitalWrite(DIR_1, motorDirection_1);
      digitalWrite(DIR_2, motorDirection_2);

    }
    void setup()
    {
      for (int i = 4; i <= 7; i++)
        pinMode(i, OUTPUT);
      neck.attach(2);
      neck.write(90);
      Serial.begin(9600);
    }
    void loop()
    {
      if (Serial.available())
      {
        val = Serial.read();
        if (val == '1')
        {
          delay(50);
          float dist_cm = ultrasonic.Ranging(CM);
          delay(100);
          if (dist_cm < 35.0)
          {
            go(FORWARD, 0);
            neck.write(180);
            delay(500);
            float dist_cm_1 = ultrasonic.Ranging(CM);
            neck.write(0);
            delay(500);
            float dist_cm_2 = ultrasonic.Ranging(CM);
            if (dist_cm_1 > dist_cm_2) {
              neck.write(90);
              delay(200);
              go(LEFT, 100);
              delay(600);
            } else {
              neck.write(90);
              delay(200);
              go(RIGHT, 100);
              delay(600);
            }
          }
          else
          {
            go(FORWARD, 70);
          }
        }
        else if (val == '2')
        {
          if (Serial.available())
          {
            val = Serial.read();
            if (val == 'W')
            {
              go(FORWARD, 125);
              delay(200);
            }
            if (val == 'S')
            {
              go(BACKWARD, 125);
              delay(200);
            }
            if (val == 'A')
            {
              go(LEFT, 90);
              delay(200);
            }
            if (val == 'D')
            {
              go(RIGHT, 90);
              delay(200);
            }
            if (val == 'C')
            {
              go(FORWARD, 0);
            }
            if (val == 'H')
            {
              neck.write(90);
            }
            if (val == 'M')
            {
              neck.write(180);
            }
          }
        }
      }
    }
     
  2. rkit

    rkit Гуру

    Что греется-то конкретно?
     
  3. Tim308

    Tim308 Нерд

    Атмега по всей видимости
     
  4. mcureenab

    mcureenab Гуру

    Спрошу даже, а с чего ТС взял, что Arduino перегревается?
     
  5. ИВАН 1454

    ИВАН 1454 Нерд

    Я заметил что она перегревается давно. Arduino перестаёт нормально работать и если её потрогать можно почувствовать, что она становиться всё горячей и горячей(в прямом смычле).
     
  6. mcureenab

    mcureenab Гуру

    На плате есть стабилизатор напряжения. Если питать плату большим напряжением - например 12 Вольт, стабилизатор сильно греется даже при небольшой нагрузке. Но это нормально.

    Если же греется чип микроконтроллера проверьте какой ток он раздает на отдельных пинах и суммарно.