Прошу Вашей помощи: Идея сделать устройство для отмотки кабеля или веревки нужной длинный. В частности, есть двигатель устройство драйвер и т.д. http://wiki.amperka.ru/продукты:troyka:stepper Технически все собрал. Но возникли проблемы с повтором. К примеру чтобы двигатель сделал 10 оборотов, вокруг оси нужно каждый раз перезагружать ардуино, что не удобно. Нужен цикл, что при нажатии на кнопку, двигатель бы начинал работу. Останавливался и ждал бы команды для следующего нажатия на кнопку.
В чем проблема конкретно? Вы не пишите программы вообще или в чем то ошибка и не работает? Если первое, то вам сюда, если второе, то копируйте то что есть по программе.
Спасибо. Нашел вот это наиболее подходящее. http://forum.amperka.ru/threads/Автоматический-Намоточный-станок.7272/ Но, как бы найти логику и составить скетч. 1. Ловим нажатие на кнопку СТАРТ. 2. Делаем 100 шагов. 3. Отключаемся. Сейчас скетч такой: // Troyka-Stepper подключён к следующим пинам: const byte stepPin = 7; const byte directionPin = 8; const byte enablePin = 11; // Выдержка для регулировки скорости вращения int delayTime = 20; void setup() { // Настраиваем нужные контакты на выход pinMode(stepPin, OUTPUT); pinMode(directionPin, OUTPUT); pinMode(enablePin, OUTPUT); } void loop() { // Подаём питание на двигатель digitalWrite(enablePin, HIGH); // Задаём направление вращения по часовой стрелке digitalWrite(directionPin, HIGH); // Делаем 20 шагов for (int i = 0; i < 200; ++i) { // Делаем шаг digitalWrite(stepPin, HIGH); delay(delayTime); digitalWrite(stepPin, LOW); delay(delayTime); } //... на три секунды delay(3000); // Отключаем двигатель digitalWrite(enablePin, LOW); // Ничего не делаем до перезагрузки while (true) { ; } } Соответственно где найти информацию, для добавления кнопки в программу?
Код (C++): // Troyka-Stepper подключён к следующим пинам: const byte stepPin = 7; const byte directionPin = 8; const byte enablePin = 11; const byte buttonPin = 2; // кнопка подключается между пином и GND // Выдержка для регулировки скорости вращения unsigned int delayTime = 20; void setup() { // Настраиваем нужные контакты на вход и выход pinMode(buttonPin, INPUT_PULLUP); pinMode(stepPin, OUTPUT); pinMode(directionPin, OUTPUT); pinMode(enablePin, OUTPUT); // Отключаем двигатель digitalWrite(enablePin, LOW); } void loop() { // если кнопка нажата if(!digitalRead(buttonPin)) { // Подаём питание на двигатель digitalWrite(enablePin, HIGH); // Задаём направление вращения по часовой стрелке digitalWrite(directionPin, HIGH); // Делаем 20 шагов for (int i = 0; i < 200; ++i) { // Делаем шаг digitalWrite(stepPin, HIGH); delay(delayTime); digitalWrite(stepPin, LOW); delay(delayTime); } //... на три секунды delay(3000); // Отключаем двигатель digitalWrite(enablePin, LOW); } }
http://wiki.amperka.ru/конспект-arduino:кнопочный-переключатель http://wiki.amperka.ru/видеоуроки:джереми-блюм http://wiki.amperka.ru/конспект-arduino:кнопка
Немного пришлось переделать проект. Теперь использую motor-shield Код (C++): #include <StepperAmperka.h> const byte buttonPin = 2; // кнопка подключается между пином и GND // Параметр конструктора — количество шагов на 1 оборот. // Фикированная характеристика используемого шагового двигателя StepperAmperka motor = StepperAmperka(200); // Если использовать Motor Shield на нестандартных пинах, // конструктор будет выглядеть иначе. // Например, для пинов 8, 9, 10, 11 конструктор будет таким: // StepperAmperka motor = StepperAmperka(200, 8, 9, 10, 11); void setup() { // Устанавливаем скорость вращения 30 оборотов в минуту. motor.setSpeed(30); pinMode(buttonPin, INPUT_PULLUP); } void loop() { // если кнопка нажата if(!digitalRead(buttonPin)) { // 180° по часовой стрелке в двуфазном режиме motor.step(200, FULL_STEP); delay(1000); } } Взято из проекта. Как в данном случае отключить двигатель после завершения цикла?
Получается, нажимая на кнопку мы запускаем движение, но после окончания движения двигатель только останавливается на паузу.