Помогите с скетчем для ардуино, пожалуйста

pinskihl
Offline
Зарегистрирован: 26.04.2019

Здравствуйте, ардуинщики. Хотел попросить у вас совета насчёт моего скетча. Делаю мини-проект по управлению жалюзи сенсорной кнопкой (по первому нажатию поворачивается, по повторному - в обратном направлении).

Но при включении ардуино ничего не происходит. Помогите новичку, пожалуйста)

Мой скетч

#include <CustomStepper.h>            // Подключаем библиотеку CustomStepper
CustomStepper stepper(8, 9, 10, 11);  // Указываем пины, к которым подключен драйвер шагового двигателя
const int buttonPin = 2; // Выставляем значения порта, подсоединённого с сигнал-портом кнопки              
 
void setup()
{
    stepper.setRPM(12);                 // Устанавливаем количество оборотов в минуту
    stepper.setSPR(4075.7728395);       // Устанавливаем колочество шагов на полный оборот. Максимальное значение 4075.7728395
    pinMode(LED_BUILTIN, OUTPUT); // Команда для адекватного реагирования светодиода
    pinMode(buttonPin, INPUT); // Открываем порт для считывания
}
 
void loop()
{
    int buttonState = digitalRead(buttonPin); // Считываем статус кнопки (нажата / не нажата)
  if (digitalRead(buttonPin) && stepper.isDone())
  {
    digitalWrite(LED_BUILTIN, HIGH); // Подаём напряжение на LED_BUILTIN - значение для встроенного светодиода
    stepper.setDirection(CW);         // Устанавливает направление вращения (против часовой)
    stepper.rotateDegrees(180);        // Поворачивает вал на заданное кол-во градусов    
  }
  
  stepper.run();                      // Этот метод обязателен в блоке loop. Он инициирует работу двигателя, когда это необходимо
}
b707
Онлайн
Зарегистрирован: 26.05.2017

вставьте код правильно, без этого никакая дискуссия невозможна

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

Подожду <code>

А пока вопрос по подключению драйвера по питанию : откуда взял и какое?

Моё первое знакомство с Ардуино как раз и началось с того, что первым делом сгорела буквально огнём и дымом микросхема uln2003apg драйвера. Хотя подключал от 5V UNO.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

pinskihl пишет:

Здравствуйте, ардуинщики. 

Не, извините, но у Вас сразу не получилось. Минус 20 к репе...

Неправильная вставка программы  - минус 50 к репе...

Samid777
Offline
Зарегистрирован: 24.04.2019

По первому нажатию поворачивается, по второму в обратном направлении. Значит остановить после запуска жалюзи уже не получится. У данного двигателя реально 4000 шагов на оборот, эт я округлил просто? Не жалко на жалюжи, или бездумно взяли цифру. Я так подозреваю, ардуино желая сделать 12 оборотов  в минуту захочет сделать 40 000 шагов для этого, намотав все на двигатель. И я бы смотрел не на скетч, если он из стандартных примеров, а на двигатель, на его подключение. И изменил бы как начинающий порядок разработки. 
Подключаем двигатель к драйверу, там есть два пина, один для включения реверся, другой шагает. Подаем 5 вольт на шагающий пин, через резистор, короткими шажками. Шагает по одному шагу, хорошо, двигатель греется, обмотки включены неверно. Вообще ничего не делает, тоже не верно, но по другому, т.е. напряжение подается между обмотками. Если интересно, расскажу как прозванивать обмотки без тестера, если его конечно нет, а если есть, звоним тестером, и подключам правильно. Ищем стандартный скетч, который просто крутит двигатель, не быстро, подключаем к ардуинке. Получилось? Все, наращиваем новые функции, зажигаем кнопкой светодиод, а движка при этом крутиться. ПОлучилось? Будем кнопкой менять направление. Ну и т.д., сделал шаг, проверил. 

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

Не думаю, что код просто скопирован. 

    int buttonState = digitalRead(buttonPin); // Считываем статус кнопки (нажата / не нажата)
  if (digitalRead(buttonPin) && stepper.isDone())
 
Зачем вводить новую переменную ... если в следующей строчке её не воспользоваться?
 Вывод:  мой земляк сам пилил. Может скапилираваць забыл?

 

pinskihl
Offline
Зарегистрирован: 26.04.2019

Извините, просто здесь новичок. А вообще, как правильно вставить?) Честно, не знаю

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

В этом же разделе форума выше на две строчки инструкция

Единственно добавлю ... прежде чем вставить ... нужно в IDE в кнопке "правка" выбрать строчку "скопировать для форума".

pinskihl
Offline
Зарегистрирован: 26.04.2019

Брал отдельно, 5v от usb. С тестовым скетчем отлично поворачивается

sadman41
Offline
Зарегистрирован: 19.10.2016

У 28BYJ-48 реально 4096 шагов в полустепе. И драйвер у него не Step/Dir, так что никакого "шагания кнопкой" и прочей пурги с ним провернуть не получится.

pinskihl
Offline
Зарегистрирован: 26.04.2019
#include <CustomStepper.h>            // Подключаем библиотеку CustomStepper
CustomStepper stepper(8, 9, 10, 11);  // Указываем пины, к которым подключен драйвер шагового двигателя
const int buttonPin = 2; // Выставляем значения порта, подсоединённого с сигнал-портом кнопки              
 
void setup()
{
    stepper.setRPM(12);                 // Устанавливаем количество оборотов в минуту
    stepper.setSPR(4075.7728395);       // Устанавливаем колочество шагов на полный оборот. Максимальное значение 4075.7728395
    pinMode(LED_BUILTIN, OUTPUT); // Команда для адекватного реагирования светодиода
    pinMode(buttonPin, INPUT); // Открываем порт для считывания
}
 
void loop()
{
    int buttonState = digitalRead(buttonPin); // Считываем статус кнопки (нажата / не нажата)
  if (digitalRead(buttonPin) && stepper.isDone())
  {
    digitalWrite(LED_BUILTIN, HIGH); // Подаём напряжение на LED_BUILTIN - значение для встроенного светодиода
    stepper.setDirection(CW);         // Устанавливает направление вращения (против часовой)
    stepper.rotateDegrees(180);        // Поворачивает вал на заданное кол-во градусов    
  }
  
  stepper.run();                      // Этот метод обязателен в блоке loop. Он инициирует работу двигателя, когда это необходимо
}

 

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

Повторяю вопрос: зачем 15 -ая строка?

если в 16 -ой не пользуемся.

pinskihl
Offline
Зарегистрирован: 26.04.2019

Извините, не убрал с прошлой версии скетча. Мой косяк

sadman41
Offline
Зарегистрирован: 19.10.2016

pinskihl, очевидно, что нужно как-то при каждом нажатии менять направление вращения - так? Т.е. если на предыдущем нажатии было CW, то на текущем должно быть CCW.

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

Меня смущает число шагов на один оборот. Точно знаю, что Ардуино не обрабатывает адекватно больше 9 знаков. И то ... под настроение. 

pinskihl
Offline
Зарегистрирован: 26.04.2019

Вообще, да . Я сейчас хочется в принципе разобраться с проблемой. А так, хочу сделать ято-то по типу

boolean a = false
if (ButtonTouch && a==false) {
    open();
    a=true
}
if (ButtonTouch && a==true) {
     close();
     a=false

Если что, это просто пример

pinskihl
Offline
Зарегистрирован: 26.04.2019

Тогда попробую округлить. А так, как я и говорил, оно работало в примере с тем же кол-вом шагов

Samid777
Offline
Зарегистрирован: 24.04.2019

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

pinskihl
Offline
Зарегистрирован: 26.04.2019

Спасибо за совет. Попробую

sadman41
Offline
Зарегистрирован: 19.10.2016

pinskihl пишет:

Вообще, да . Я сейчас хочется в принципе разобраться с проблемой. А так, хочу сделать ято-то по типу

Вполне нормально для начала.