ARDUINO Шаговый двигатель и ИК-пульт

Aika

✩✩✩✩✩✩✩
14 Янв 2019
3
0
Можете помочь со скетчем для шагового двигателя чтобы работал через ИК-пульт? (Nema 17, a4988, arduino uno, IR remote)
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,005
406
Москва
wan-derer.ru
@Aika, Если ты выложишь свой скетч и объяснишь в каком месте он не работает, то да, возможно, помогут.
 

Aika

✩✩✩✩✩✩✩
14 Янв 2019
3
0
@Aika, Если ты выложишь свой скетч и объяснишь в каком месте он не работает, то да, возможно, помогут.
Его нет, есть отдельно библиотека grbl и библиотека irremote, а как их соединить я не знаю... надеялась найти помощь тут
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,005
406
Москва
wan-derer.ru
@Aika, Помощь это когда делаешь ты, а тебе помогают. В ином случае это называется "сделайте за меня" и тогда тебе в другой раздел. Посмотри канал "Заметки Ардуинщика", продумай алгоритм, посмотри примеры из библиотек, разберись как они работают и начни писать свой проект.
 

Aika

✩✩✩✩✩✩✩
14 Янв 2019
3
0
@Aika, Помощь это когда делаешь ты, а тебе помогают. В ином случае это называется "сделайте за меня" и тогда тебе в другой раздел. Посмотри канал "Заметки Ардуинщика", продумай алгоритм, посмотри примеры из библиотек, разберись как они работают и начни писать свой проект.
хорошо

#include <IRremote.h>
#include <IRremoteInt.h>



// Настройка пин-кода
const int EnablePin = 8 ; //Вывод включения мотора
const int StepPin = 2 ; // Шинный вывод двигателя
const int DirectionPin = 5 ; // направление вращения двигателя
// скорость
const int FastMove = 300 ;
const int SlowMove = 1000 ;

// Связанное с дистанционным управлением
int RECV_PIN = 6 ;
IRrecv irrecv ( RECV_PIN );
decode_results results;
uint16_t irCustomeCode ; // Пользовательский идентификатор (2 байта)
uint8_t irValue ; // текущее значение кнопки
uint8_t irInvertValue ; // инвертированного значение кнопки значения

// значения кнопки дистанционного управления , чтобы использовать
const uint8_t IR_UP_KEY = 0xFF629D ;
const uint8_t IR_DOWN_KEY = 0xFFA857 ;


void setup ( )
{
// pin pin setting
pinMode ( EnablePin , OUTPUT ) ;
pinMode ( StepPin , OUTPUT ) ;
pinMode ( DirectionPin , OUTPUT ) ;

// IC двигателя ВКЛ
digitalWrite ( EnablePin , LOW ) ;

Serial.begin(9600);

// запускаем дистанционное управление
irrecv.enableIRIn();
}

void loop ( )
{
int i ;
if (irrecv.decode(&results)) // have we received an IR signal?

{
switch(results.value)

{

case 0xFF629D: // UP button pressed
// Высокое состояние движется по часовой стрелке
digitalWrite ( DirectionPin , HIGH ) ;
for ( i = 0 ; i < 50 ; i ++ )
{
// 1/4 движение ВКЛ 1,8
digitalWrite ( StepPin , HIGH ) ;
// 1ms (1000us) wait
delayMicroseconds ( SlowMove ) ;
// ВЫКЛ. 1.8 1/4 движения
digitalWrite ( StepPin , LOW ) ;
// 1ms (1000us) wait
delayMicroseconds ( SlowMove ) ;
}

case 0xFFA857: // DOWN button pressed
// Низкое состояние перемещается против часовой стрелки
digitalWrite ( DirectionPin , LOW ) ;
for ( i = 0 ; i < 500 ; i ++ ) ;
{
digitalWrite ( StepPin , HIGH ) ;
//0.2ms (200us) Wait
delayMicroseconds ( FastMove ) ;
digitalWrite ( StepPin , LOW ) ;
//0.2ms (200us) Wait
delayMicroseconds( FastMove ) ;
}

}

irrecv.resume(); // receive the next value
}


}
 

KOHb

★✩✩✩✩✩✩
25 Окт 2018
119
16
@Aika,

Вот мой код для управления двумя шаговиками для привода электроштор через ИК пульт и фоторезистор. Закоментил всё что можно закоментить. Может поможет...
C++:
#include "Stepper.h"            // подключаем библиотеку шагового двигател
#include "IRremote.h"           // подключаем библиотеку ИК приемника

/*----- Variables, Pins -----*/
#define STEPS  32               // Количество шагов на один оборот вала двигателя !!! STEPS нигде больше указывать нельзя !!!!
int  Steps2Take;                // переменная для определения кол-ва шагов (2048 = 1 полный оборот вала двигателя)
int  receiver = 2;              // Пин на котором сидит ИК приемник
int  poz = 0;                   // Логическая переменная позиции шторы 0 = поднята 1 = закрыта
int  mode;                      // Переменная режима шторы 1 = авто 2 = опущена 3 = поднята
int  photo;                     // Переменная значения фоторезистора

/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4

Stepper small_stepper(STEPS, 12, 10, 11, 9); // Указать пины двигателя small_stepper
Stepper small_stepper1(STEPS, 8, 6, 7, 5);  // Не забудь помениять пины как увидешь что к чему!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IRrecv irrecv(receiver);                    // Создаём 'irrecv' это ИК приемник
decode_results results;                     // Создаем экземпляр 'decode_results' Это тоже нужно для ИК приемника

void setup()
{
  irrecv.enableIRIn();                      // Инициализация приемника
  Serial.begin(9600);
  pinMode( A0, INPUT );
}

void loop()
{
photo = analogRead(A0);                     // Получаем значение с фоторезистора (изменить номер логического пина)
//Serial.println( photo );
if (photo < 350 && mode == 1)               // Если значение с фоторезистора меньше *установить этлон* и выбран режим авто (1) то штора окускается
  {
    poz = curtaindown();
  }
if (photo > 360 && mode == 1)               // Если значение с фоторезистора меньше *установить этлон* и выбран режим авто (1) то штора поднимается
  {
    poz = curtainup();           
  }
if (irrecv.decode(&results))                // Если на ИК приемник пришел сигнал

  {
    Serial.println( results.value );
    switch(results.value)                   // Значеник которое пришло на ИК приемник будет в results.value
    
    {

/*-----(Клавиша опускания)-----*/
      case 0xFFA857:                      // Тут не забыть заменить 0xE0E0A05F на то которое получаем с пульта при нажатии на нужную нам кнопку кнопки
                     poz = curtaindown();   // Вызываем функцию опускания шторы
                     mode = 2;              // Режим работы штора опущена
      break;
/*-----(Клавиша поднятия)-----*/
      case 0xFF629D:                        // Тут не забыть заменить 0xFFA857 на то которое получаем с пульта при нажатии на нужную нам кнопку кнопки
                     poz = curtainup();     // Вызываем пункцию поднятия шторы
                     mode = 3;              // Режим работы штора поднята
      break;

/*-----(Клавиша автоматического определения)-----*/
      case 0xFF02FD:                        // Тут не забыть заменить 0xFFA857 на то которое получаем с пульта при нажатии на нужную нам кнопку кнопки
  
                     mode = 1;              // Режим работы автоматический
      break;
    }
    
      irrecv.resume();                      // Ждем следующего сигнала от ИК
  } 


}
int curtaindown() //Функция опускания
{
                      if (poz == 0)                         // Условие что штора поднята
                      {   
                        for (int i=0; i <= 10188; i++)      // Цикл для того чтоб припилить второй мотор. Число шагов задать согласно кол-ву оборот для шторы из условия что 2048 - один оборот
                        {         
                          small_stepper.setSpeed(500);        // Скорость вращения двигателя. Максимум 700
                          small_stepper1.setSpeed(500);
                          Steps2Take  =  -1;                   // Направление вращения CW 1 оборот
                          small_stepper.step(Steps2Take);     // Команда на поварот small_stepper
                          small_stepper1.step(Steps2Take);
                          poz = 1;                            // Изменяемс статус на опущена
                        }
                        delay(2000);                        // Даем отдышаться
                      }
return poz;
}
int curtainup() //Функция поднятия
{
                      if (poz == 1)                         // Условие что штора опущена
                      {
                        for (int i=0; i <= 10188; i++)     // Цикл для того чтоб припилить второй мотор. Число шагов задать согласно кол-ву оборот для шторы из условия что 2048 - один оборот       
                        {
                          small_stepper.setSpeed(500);        // Скорость вращения двигателя. Максимум 700
                          small_stepper1.setSpeed(500);
                          Steps2Take  =  1;                  // Направление вращения CСW -1 = оборот в обратную сторону
                          small_stepper.step(Steps2Take);     // Команда на поварот small_stepper
                          small_stepper1.step(Steps2Take);
                          poz = 0;                            // Изменяемс статус на поднята
                        }
                        delay(2000);                        // Даем отдышаться
                      }
return poz;
}