Есть ардуино уно, на него я насадил мотор шилд, в шилд воткнул моторчик на 6-24В (красный и чёрный провода на фото как раз к нему идут), скачал и закинул в папку с ардуиной библиотеку AFMotor.h для удобного управления мотором. Залил вот такой скетч, скопипастенный с одного сайта, заведомо вроде как рабочий: Код (Text): #include <AFMotor.h> //Подключаем заголовочный файл библиотеки //Создаем объект для двигателя на 1 канале (M1) AF_DCMotor motor(1); void setup() { } void loop() { //Задаем направление движение вперед motor.run(FORWARD); //Устанавливаем скорость 50% motor.setSpeed(128); //пауза 3 секунды - двигатель крутится delay(3000); //увеличиваем скорость до 75%, и пауза 3 сек. motor.setSpeed(192); delay(3000); //Снижаем скорость до 50%, и пауза 3 сек. motor.setSpeed(128); delay(3000); //Останавливаем двигатель, и пауза 3 сек. motor.run(RELEASE); delay(3000); //Переключаем направление вращения //Двигатель начнет вращаться со скоростью 50% motor.run(BACKWARD); //пауза 3 секунды - двигатель крутится delay(3000); //увеличиваем скорость до 75%, и пауза 3 сек. motor.setSpeed(192); delay(3000); //Снижаем скорость до 50%, и пауза 3 сек. motor.setSpeed(128); delay(3000); //Останавливаем двигатель, и пауза 3 сек. motor.run(RELEASE); delay(3000); } Но моторчик не крутится. Вообще никаких признаков жизни. сам мотор живой, я проверял, на прямую от батарейки крутится. Что я делаю не так?
Хм. Окей, я зааплоадил на контролер сей код: Код (Text): #define SPEED_RIGHT 5 #define DIR_RIGHT 4 void setup() { pinMode(4, OUTPUT); pinMode(5, OUTPUT); } void loop() { analogWrite(SPEED_RIGHT, 250); analogWrite(DIR_RIGHT, HIGH); delay(3000); analogWrite(SPEED_RIGHT, 250); analogWrite(DIR_RIGHT, LOW); delay(2000); } и получил противно пищащий моторчик, не крутящийся, и слабо горящий LED3, красный который. Вольтметр показал на выходных клеммах мотор шилда 1.5 В. Моторчик расчитан на 12В. Я явно что-то делаю не так всё ещё...
Сделайте на DIR digitalWrite вместо analogWrite. Иначе по сути вы открываете затвор питания на 1/255-ю. Я представил себя моторчиком в вашем случае. Сижу, противно пищу.
Сделал. Не крутится. 1,5В. Код (Text): void loop() { analogWrite(SPEED_RIGHT, 250); digitalWrite(DIR_RIGHT, HIGH); delay(3000); analogWrite(SPEED_RIGHT, 250); digitalWrite(DIR_RIGHT, LOW); delay(2000); }
О! А вы от USB прям питаетесь? Там тока и напряжения маловато (5 В, до 500 мА). Можете попробовать от батареек или блока питания?
Чего-то не так, оно и от USB должно подавать признаки жизни. Воткните вместо моторчика светодиод с ограничительным резистором в 220ом и посмотрите, что будет. Померяйте при разных значениях X напряжение. (analogWrite(SPEED_RIGHT, X) Если оно меняется в пределах 1.5V то, что-то совсем не так...
Питаюсь от USB, да. Блока питания не покупал, думал, что и ЮСБ хватит. Батарейки есть, но как их в цепочку из 6 штук обьединить, чтобы они в руках не разваливались, я придумать не смог. Светодиод с резистором воткнуть не могу, ибо нету. Залил это Код (Text): void loop() { analogWrite(DIR_RIGHT, HIGH); analogWrite(SPEED_RIGHT, 255); delay(5000); analogWrite(SPEED_RIGHT, 205); delay(5000); analogWrite(SPEED_RIGHT, 155); delay(5000); analogWrite(SPEED_RIGHT, 105); delay(5000); analogWrite(SPEED_RIGHT, 55); delay(5000); analogWrite(SPEED_RIGHT, 0); delay(5000); } Получил на клеммах М1+ / М1- следующие значения напряжения, соответственно: 1.7, 1.3, 0.9, 0.6, 0.3, 0В. Кстати, если написать циифровойВвод, а не аналоговый, как у меня тут, то напряжение вырастет на 0.1В при 255 и разница пропорционально уменьшается к 0.
Загадка. Если глянуть в мануал на ваш шилд, то выходит, что пины 4 и 5 вообще управляют каналом M2. С него пробовали показания снимать?
Пробовал, заодно подключив и 2й мотор. На всех 4х пинах 4-7 при HIGH/255 значениях напряжение 4.1В (если конечно я правильно снимаю это значение - одну "иголку" вольтметра в "землю", т.е. в какой-нибудь из пинов GND, вторую в интересующий пин). Пины 4 и 5 по факту явно управляют М1, на М2 никакого напряжения нет, если 4 и 5 пины писать. Так же на всякий случай попробовал второй такой же мотор шилд и другой моторчик - всё то же самое. =(
Стоп, вы сказали 4,1 В. Всё правильно. Было 5 В, после прохождения нескольких транзисторных ключей в Motor Shield осталось 4,1. Это падение фиксировано и неизбежно. Воткнёте 9 В — получите 8,1 В.
Обнаружил у себя случайно подходящий по разъёму к ардуинке блок питания. Он на 15.5В, ток вых. 1,7А. Если я его в ардуину воткну, оно не сгорит там что-нибудь? И ещё, если всё вроде как правильно и 4.1 - это то, что и должно быть, то как мне тогда получить 12В? От USB получается никак?
12 В от USB получить не удастся. Блок — нужно смотреть стабилизированный или нет. Если нет, то 15,5 В будет только при нагрузке ровно 1,7 А, а без нагрузки будет сильно больше. Попробуйте просто воткнуть его в розетку и мультиметром замерить выходное напряжение. Если оно не превышает 15,5 В — втыкайте в Arduino.
Заработало. Спасибо за советы. Питание - сила. А, ну и случайно попавшийся под руку БП от кассового аппарата - тоже сила, конечно. =)
Попробовали, заработало и хватит! Вы там не увлекайтесь 15 вольт, для Ардуины, это очень много, на долго нельзя сгорит... Первый эксперимент прошёл, теперь чётко разбирайтесь с питанием. На вход Ардуины не больше 10ти вольт, на вход моторшилда (есть там отдельное питание) не больше 12ти! А то стабилизатор на ардуине спалите, придётся учиться паять Причём феном, паяльник его не возьмёт.
На самом деле регулятор напряжения на Arduino будет жить при входном напряжении вплоть до 20 В, но после отметки в 12 В не гарантируется, что он самостоятельно сможет отводить генерируемое тепло. Если прям нужнанимагу — можно приклеить на регулятор маленький радиатор и всё будет ОК.
Ну радиатор ещё не приклеен, что к стати тоже не панацея, а эксперименты уже во всю, надо предупредить возможные сюрпризы.