В общем сегодня получил наборчик для экспериментов. Подключил серво привод и держал его в руках пока он крутился, почувствовал, что он греется. нормально ли это или я что-то неправильно сделал и моторчик скоро сгорит?
если греется - это плохо. а для нормального ответа нужен нормальный вопрос - что за серва, как подключили, как запитали
Код (C++): /* Blink Turns on an LED on for one second, then off for one second, repeatedly. Most Arduinos have an on-board LED you can control. On the Uno and Leonardo, it is attached to digital pin 13. If you're unsure what pin the on-board LED is connected to on your Arduino model, check the documentation at http://www.arduino.cc This example code is in the public domain. modified 8 May 2014 by Scott Fitzgerald */ #include<Servo.h> // the setup function runs once when you press reset or power the board int led = 13; int led2 = 12; int ledState = LOW; // состояние светодиода: ВКЛ/ВЫКЛ int ledState2 = LOW; unsigned long previousMillis = 0; unsigned long previousMillis2 = 0; long OnTime = 2250; // длительность свечения светодиода (в миллисекундах) long OnTime2 = 4250; // длительность свечения светодиода (в миллисекундах) long OffTime = 750; // светодиод не горит (в миллисекундах) long OffTime2 = 250; // светодиод не горит (в миллисекундах) // переменная для хранения положения сервы int pos = 0; Servo my_servo; int increment=1; // увеличиваем перемещение на каждом шаге int updateInterval; // промежуток времени между обновлениями unsigned long lastUpdate = 0; // последнее обновление положения void setup() { // initialize digital pin 13 as an output. pinMode(13, OUTPUT); pinMode(12, OUTPUT); my_servo.attach(9); Serial.begin(9600); } // the loop function runs over and over again forever void loop() { // выясняем не настал ли момент сменить состояние светодиода unsigned long currentMillis = millis(); // текущее время в миллисекундах // если светодиод включен и светится больше чем надо if((ledState == HIGH) && (currentMillis - previousMillis >= OnTime)) { ledState = LOW; // выключаем previousMillis = currentMillis; // запоминаем момент времени digitalWrite(led, ledState); // реализуем новое состояние } else if ((ledState == LOW) && (currentMillis - previousMillis >= OffTime)) { ledState = HIGH; // выключаем previousMillis = currentMillis ; // запоминаем момент времени digitalWrite(led, ledState); // реализуем новое состояние } // если светодиод включен и светится больше чем надо if((ledState2 == HIGH) && (currentMillis - previousMillis2 >= OnTime2)) { ledState2 = LOW; // выключаем previousMillis2 = currentMillis; // запоминаем момент времени digitalWrite(led2, ledState2); // реализуем новое состояние } else if ((ledState2 == LOW) && (currentMillis - previousMillis2 >= OffTime2)) { ledState2 = HIGH; // выключаем previousMillis2 = currentMillis ; // запоминаем момент времени digitalWrite(led2, ledState2); // реализуем новое состояние } if((millis() - lastUpdate) > updateInterval) // время обновлять { lastUpdate = millis(); pos += increment; my_servo.write(pos); Serial.println(pos); if ((pos >= 180) || (pos <= 0)) // конец вращения { // обратное направление increment = -increment; } } } в коде многопоточность. серва SG90
лень было лезть отключать usb провод от ардуино, решил закоментить чтобы серво не работал, а лампочки пускай мигают...пока выясняю дело с нагреванием серво. в общем, забыл убрать коммент
обычно греется в двух случаях 1) сигнал, приходящий на серву, попадает на одно из "значений" потенциометра и серва прыгает мелкими движениями вперед-назад. при этом, моторо постоянно под нагрузкой и греется 2) что-то мешает двигателю нормально передвигаться, может шестерни или подшипники криво стоят. ну и может где-то пайка плохая, тоже нельзя исключить