Реле поворота на шаговом двигателе 28BYJ-48

Общий раздел для всех подразделов форума.
Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 29 май 2017, 11:14

Список ингредиентов:
1. Digispark или его клон.
2. Шаговый двигатель с драйвером 28BYJ-48
3. Блок питания на 5В или 12В (зависит от моторчика) и с током не менее 1А.
4. Провода.

Подключаем входы 1-2-3-4 драйвера к пинам 0-1-2-3 Дигиспарка, подаем на оба питание. На пин 4 Дигиспарка вешаем кнопку, замыкающую пин на общий. После включения реле поворачивает мотор на 180 градусов каждый час. Вращение реверсивное. Раз крутим туда, другой обратно. Можно выключить в коде и крутить в одну сторону. Кнопка для установки механизма лотка в нужное начальное положение. Пока кнопка нажата и удерживается, мотор плавно вращается в одном направлении с шагом 1 градус и паузой 0,2 сек.

Код: Выделить всё

#include <Stepper.h>
#define buttonPin 4
#define STEPS  100   
# define waitTime 30 //3600 каждый час на 180 градусов
unsigned long loopTime;
boolean direct;
Stepper egg_stepper(STEPS, 0, 2, 1, 3);


void setup() {
  egg_stepper.setSpeed(100);
  pinMode (buttonPin, INPUT_PULLUP);
}

void loop()
{
  unsigned long currentTime;
  currentTime = millis() / 1000;
  byte i;
  if (!digitalRead(buttonPin)) {
    egg_stepper.step(5);
    delay(200);
    for (i = 0; i < 4; i++) digitalWrite(i, LOW);
  }

  if (currentTime > (loopTime + waitTime)) {
    direct = !direct;
    loopTime = currentTime;
    turnEgg(direct);
  }
}

void turnEgg(boolean dir) {
  byte i;
  if (dir) egg_stepper.step(1019);
  else egg_stepper.step(-1019);
  for (i = 0; i < 4; i++) digitalWrite(i, LOW);
}


KnyazewAndrey
Сообщения: 68
Зарегистрирован: 02 дек 2016, 06:50
Откуда: Щелково МО
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение KnyazewAndrey » 30 май 2017, 15:23

Роман, а хватит ли момента этого моторчика для поворота китайских лотков?

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 30 май 2017, 16:08

Да.

KnyazewAndrey
Сообщения: 68
Зарегистрирован: 02 дек 2016, 06:50
Откуда: Щелково МО
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение KnyazewAndrey » 31 май 2017, 16:38

Сразу просто заинтересовался, вариантом замены в своем Китайчике, что бы прогнозировано поворачивались лоточки..
Я в Ютюбе обзор моторчиков этих наткнулся, так там пальцами останавливали вращение, не смотря на редуктор....

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 31 май 2017, 18:47

Я тоже останавливал, пока к хорошему блоку питания не подключил.

KnyazewAndrey
Сообщения: 68
Зарегистрирован: 02 дек 2016, 06:50
Откуда: Щелково МО
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение KnyazewAndrey » 01 июн 2017, 18:36

Цена комплекта без блока питания с кнопкой и разъемом питания) 700руб.

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 21 янв 2018, 15:07

Подскажите пожалуйста. Загружаю скетч в ардуинку - все работает. Крутит влево вправо и шагает. Пины соответственно поменял. Загружаю в ATtiny85 или Digispark начинает шагать, а затем крутится и все в одну сторону. Скорость какая то не такая но на 180 поворачивается. IDE 1.6.5. Загружаю через программатор CP2102

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 21 янв 2018, 15:12

Кнопка не подтянута к плюсу.

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 22 янв 2018, 17:01

Да нет кнопка подтянута. В видео про пайку там был резюк, я догадался его поставить. Когда программируем какой программатор нужно выбирать для ATtiny85 и Digispark. Я в этом не смыслю может это и есть глюк.

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 22 янв 2018, 17:10

Это разные вещи, Tiny85 и Digispark, у Спарка загрузчик и эмуляция USB. Я шью как Digispark именно, через его загрузчик.
2018-01-22_20-12-21.png

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 22 янв 2018, 18:17

Дико прошу прощения сам балбес в коде (STEPS, 0, 2, 1, 3); а подключаю 0123. Поехал вправо влево и резистор на + сунул

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 22 янв 2018, 18:38

STEPS, 0, 2, 1, 3 это для "не обрезанного" мотора с родным драйвером на ULN2003. 0, 1, 2, 3 для переделанного.

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 22 янв 2018, 19:35

Если угол будет немного меньше 180 и лотки будут в верхнем положении то нажав кнопку поедем еще выше, а назад не вернемся. То есть кнопка реверс не даст.

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 22 янв 2018, 23:40

Это можно допилить, с КШМ не важно куда крутить.

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 23 янв 2018, 04:11

Если угол будет немного меньше 180 и лотки будут в верхнем положении то нажав кнопку поедем еще выше, а назад не вернемся. То есть кнопка реверс не даст. Хотелось бы чтобы кнопка работала в пределах угла поворота step(1019) и step(-1019).

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 23 янв 2018, 04:59

Да пусть крутит по кругу.

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 23 янв 2018, 05:02

С крайними положениями вроде концевики лучше. Я посмотрю, если сделаю поддержку двойного клика компактную, то будет реверс на 90 градусов.

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 23 янв 2018, 05:58

Концевик уменьшит надежность

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 23 янв 2018, 06:01

Можно проверять.

Код: Выделить всё

// Copyright Umka mailumka2@gmail.com 01.2018
// GPL license. Free for non-commercial use

#include "OneButton.h"
#include <Stepper.h>
#define buttonPin 4
#define STEPS  100
# define waitTime 30 //3600 каждый час на 180 градусов
unsigned long loopTime;
boolean direct;
Stepper egg_stepper(STEPS, 0, 1, 2, 3);
OneButton button(4, true);

void doubleclick() {
  byte i;
  if (direct) egg_stepper.step(-510);
  else egg_stepper.step(510);
  for (i = 0; i < 4; i++) digitalWrite(i, LOW);
} // doubleclick

void myClickFunction() {
  byte i;
  egg_stepper.step(5);
  delay(100);
  for (i = 0; i < 4; i++) digitalWrite(i, LOW);
}

void setup() {
  egg_stepper.setSpeed(50);
  //pinMode (buttonPin, INPUT_PULLUP);
  button.attachClick(myClickFunction);
  button.attachDoubleClick(doubleclick);
}

void loop()
{
  unsigned long currentTime;
  currentTime = millis() / 1000;
  byte i;

  if (currentTime > (loopTime + waitTime)) {
    direct = !direct;
    loopTime = currentTime;
    turnEgg(direct);
  }
  button.tick();
}

void turnEgg(boolean dir) {
  byte i;
  if (dir) egg_stepper.step(1020);
  else egg_stepper.step(-1020);
  for (i = 0; i < 4; i++) digitalWrite(i, LOW);
}

Вложения
OneButton-master.zip
(12.23 КБ) 48 скачиваний

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 23 янв 2018, 08:14

Как подключить кнопку?

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 23 янв 2018, 08:44

Как и была.

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 23 янв 2018, 08:47

Тогда нет реакции на неё. В сетаре закомментирована строка подтяжки

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 23 янв 2018, 09:09

А где мы обращаемся в теле программы к функциям нажатия на кнопки?

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение Umka » 23 янв 2018, 10:17

button.tick();

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: Реле поворота на шаговом двигателе 28BYJ-48

Сообщение SergeiCRIM » 23 янв 2018, 10:28

Да я это уже понял, button.tick(); читает кнопку только в примере в библиотеке есть еще какая то функция
if (nextAction == ACTION_OFF) {
// do nothing.
digitalWrite(13, LOW);
Которая стоит в основном цикле

Ответить