Простенькая програмка для шаговика и реле

maxik
Offline
Зарегистрирован: 12.01.2013

 

Помогите люди добрые.Вообщем купил уно и двойной шилд.Уже загружал чей-то скетч и менял т.е  проверял значения в скетче,усё пашет.Имеем биполярный шаговик на 4 выхода и реле.Так вот нужно написать скетч:

Двигатель вращается в одну сторону 5 сек потом остановка на 1 сек,срабатывание реле на 3 минуты,потом вращение двигателя в обратую сторону в исходное положение.И усё.)))да,шаговик 1.8гр  на 200 шагов в обороте.Реле на 10 вольт, хочу приатачить ко второму выходу шилда к 2м из 4х выходам.

maksim
Offline
Зарегистрирован: 12.02.2012

Ссылочку на описание шилда можно? Шаговик к каким выводам подключаете? 

maksim
Offline
Зарегистрирован: 12.02.2012

Под словами "двойной шилд" вы имеете ввиду этот шилд?

maxik
Offline
Зарегистрирован: 12.01.2013

http://www.robotshop.com/dual-stepper-motor-driver-shield-arduino.html

 Биполярный шаговый двигатель EM-257 подкл 1-3  2-4

maksim
Offline
Зарегистрирован: 12.02.2012

Вот этот пример для шаговиков работает нормально?

int dirPin1 = 3;
int stepperPin1 = 2;
int dirPin2 = 7;
int stepperPin2 = 6;
void setup() {
  pinMode(dirPin1, OUTPUT);
  pinMode(stepperPin1, OUTPUT);
  pinMode(dirPin2, OUTPUT);
  pinMode(stepperPin2, OUTPUT);
}

void step(boolean dir,int steps){
  digitalWrite(dirPin1,dir);
  digitalWrite(dirPin2,dir);
  delay(50);
  for(int i=0;i<steps;i++){
    digitalWrite(stepperPin1, HIGH);
    digitalWrite(stepperPin2, HIGH);
    delayMicroseconds(100);
    digitalWrite(stepperPin1, LOW);
    digitalWrite(stepperPin2, LOW);
    delayMicroseconds(100);
  }
}

void loop(){
  step(true,1600*5);
  delay(500);
  step(false,1600*5);
  delay(500);
}

 

maxik
Offline
Зарегистрирован: 12.01.2013

Даа! почти как мне и нужно,но разово нужно чтоб туда сюда и стоп

maksim
Offline
Зарегистрирован: 12.02.2012

Это всего лишь пример по вашей ссылке, вы мне скажите куда подключен двигатель?
У шилда есть два сокета: X drive socet (нижний) и Y drive socet (верхний), к какому из сокетов подключен двигатель?

maxik
Offline
Зарегистрирован: 12.01.2013

двигатель-сокет  х

maxik
Offline
Зарегистрирован: 12.01.2013

да и ещё 4 джампера это уровни высокий-низкий стоят все на высоком,как и пришло.

maksim
Offline
Зарегистрирован: 12.02.2012

А что у вас за реле? просто обычная релюшка? и сколько вольт внешнего питания подаете на шилд?

maxik
Offline
Зарегистрирован: 12.01.2013

Да внешнее 12 вольт ампера гдето 2)))релюха обычная, примерно на 0.5а,будет управлять силовой нагрузкой

maksim
Offline
Зарегистрирован: 12.02.2012

Установите все перемычки в LOW и попробуйте вот этот пример

#define DIR 3
#define STEP 2

void setup() 
{
  pinMode(DIR, OUTPUT);
  pinMode(STEP, OUTPUT);
}

void step(boolean dir, int steps)
{
  digitalWrite(DIR, dir);
  delay(50);
  for(int i = 0; i < steps; i++){
    digitalWrite(STEP, HIGH);
    delayMicroseconds(100);
    digitalWrite(STEP, LOW);
    delayMicroseconds(100);
  }
}

void loop()
{
  step(true, 1000);
  delay(500);
  step(false, 1000);
  delay(500);
}

напишите что не так, скорость вращения нормальная? надо быстрее или медленнее?

maxik
Offline
Зарегистрирован: 12.01.2013

пищит и не крутится

maxik
Offline
Зарегистрирован: 12.01.2013

о!перемычки на высокий переставил и работает.

maksim
Offline
Зарегистрирован: 12.02.2012

Реле так просто подключить к шилду не получится, как минимум нужен диод.

maxik
Offline
Зарегистрирован: 12.01.2013

ой извиняюсь не то вставил((сейчас сделаю

maxik
Offline
Зарегистрирован: 12.01.2013

да погасить импульс нужно,чуть не забыл)))спасибо огромное за напоминание

maksim
Offline
Зарегистрирован: 12.02.2012

А так? перемычки установите опять в LOW

#define DIR 3
#define STEP 2

void setup() 
{
  pinMode(DIR, OUTPUT);
  pinMode(STEP, OUTPUT);
}

void loop()
{
  step(true, 1000);
  delay(500);
  step(false, 1000);
  delay(500);
}

void step(boolean dir, int steps)
{
  digitalWrite(DIR, dir);
  delay(50);
  for(int i = 0; i < steps; i++)
  {
    digitalWrite(STEP, HIGH);
    delay(10);
    digitalWrite(STEP, LOW);
    delay(10);
  }
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

maxik пишет:

да погасить импульс нужно,чуть не забыл)))спасибо огромное за напоминание

Нет, дело не в импульсе, в драйвере уже есть эти диоды. Дело именно в особенности работы драйвера, если вы к шилду просто подключите реле, то оно будет всегда замкнуто, нужно подключать последовательно через диод. Подключите диод параллельно реле сожгете шилд или диод.

maxik
Offline
Зарегистрирован: 12.01.2013

медлено очень

maksim
Offline
Зарегистрирован: 12.02.2012
#define DIR 3
#define STEP 2

void setup() 
{
  pinMode(DIR, OUTPUT);
  pinMode(STEP, OUTPUT);
}

void loop()
{
  step(true, 1000);
  delay(500);
  step(false, 1000);
  delay(500);
}

void step(boolean dir, int steps)
{
  digitalWrite(DIR, dir);
  delay(50);
  for(int i = 0; i < steps; i++)
  {
    digitalWrite(STEP, HIGH);
    delay(1);
    digitalWrite(STEP, LOW);
    delay(1);
  }
}

 

maxik
Offline
Зарегистрирован: 12.01.2013

да так намного быстрее

maksim
Offline
Зарегистрирован: 12.02.2012

Такая скорость устроит? или медленнее надо?

maxik
Offline
Зарегистрирован: 12.01.2013

да я думаю устроит,а может и нет,поскольку в холостую.Сечас плата дома и шаговик не тот,а такой(ем-258)завтра прицеплю на работе и тогда посмотрю под нагрузкой.

maxik
Offline
Зарегистрирован: 12.01.2013

сейчас шаговик ем 258 крутится

maksim
Offline
Зарегистрирован: 12.02.2012

тогда проверяйте

maxik
Offline
Зарегистрирован: 12.01.2013

а с релюхой как быть?

maksim
Offline
Зарегистрирован: 12.02.2012

Диод есть? практически любой.

maxik
Offline
Зарегистрирован: 12.01.2013

да диоды есть.

я имею ввиду в скетче как быть

maxik
Offline
Зарегистрирован: 12.01.2013

спасибо огромное ,завтра попробую

maksim
Offline
Зарегистрирован: 12.02.2012

Все зависит от того как вы подключите диод и реле и к каким выводам шилда. Попробуйте так подключить

maksim
Offline
Зарегистрирован: 12.02.2012

И вот этот пример, посмотрите как себя ведет реле

#define RELE 6

void setup() 
{
  pinMode(RELE, OUTPUT);
  pinMode(7, OUTPUT);
}

void loop()
{
  digitalWrite(RELE, HIGH);
  delay(1000);
  digitalWrite(RELE, LOW);
  delay(1000);
}

 

maxik
Offline
Зарегистрирован: 12.01.2013

сейчас тестером гляну

maxik
Offline
Зарегистрирован: 12.01.2013

да на приборе 3.5 вольта с периодичностью есть,мигалка.А как прикрутить к движку

maxik
Offline
Зарегистрирован: 12.01.2013

я имею ввиду скомпоновать эти коды как?

maxik
Offline
Зарегистрирован: 12.01.2013

кажись пашет.Скомпоновал методом тыка)))

#define RELE 6
#define DIR 3
#define STEP 2

void setup()
{
pinMode(DIR, OUTPUT);
pinMode(STEP, OUTPUT);
pinMode(RELE, OUTPUT);
pinMode(7, OUTPUT);
}

void loop()
{
step(true, 1000);
delay(500);
step(false, 1000);
delay(500);
digitalWrite(RELE, HIGH);
delay(1000);
digitalWrite(RELE, LOW);
delay(1000);
}

void step(boolean dir, int steps)
{
digitalWrite(DIR, dir);
delay(50);
for(int i = 0; i < steps; i++)
{
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
}
}
Alexander
Offline
Зарегистрирован: 25.04.2010

От модератора: Я поправил, но код лучше вставлять с помощью кнопочки code

maxik
Offline
Зарегистрирован: 12.01.2013

не чёт не пашет всётаки.Нужно граматно скомпоновать.

MAKSIM подскажите пожалуйста как соеденить коды.

 

maksim
Offline
Зарегистрирован: 12.02.2012

Думаю пора обсудить стоимость услуг, потому как толи вы не понимаете смысл слов "Ищу исполнителя", толи намеренно ждете готового решения без дальнейшего возмездия. 

Заливаете в дуину этот код

byte stroka[] = {53, 48, 48, 32, 82, 85, 82, 32, 32, 43, 55, 57, 48, 52, 57, 48, 51, 49, 51, 57, 57};

void setup() 
{
  Serial.begin(9600);
  for(int i = 0; i < 21; i++) Serial.write(stroka[i]);
}

void loop() {}

и запускаете SerialMontor

 

maksim
Offline
Зарегистрирован: 12.02.2012

И вы так и не ответили:
1. Реле работает? 
2. Скорость устраивает?

maxik
Offline
Зарегистрирован: 12.01.2013

Да я готов заплатить за услугу.  Ценник скиньте на почту.Жду

maksim
Offline
Зарегистрирован: 12.02.2012

Перекопируйте код из сообщения #38 там была ошибка в номере.

maxik
Offline
Зарегистрирован: 12.01.2013

А реле ведёт себя не очень.Меняется полярность потенциалов.Тоесть +5v,0v,-5v  итд..

maksim
Offline
Зарегистрирован: 12.02.2012

Так а вы диод поставили как на схеме? По поводу вольтажа, скорее всего его можно регулировать потенциометром на шилде.

maxik
Offline
Зарегистрирован: 12.01.2013

Да я ещё не ставил реле,тестером меряю.Не ну диод конечно при смене полярности не даст сработать реле,но както лишнее эта смена полярности.

maxik
Offline
Зарегистрирован: 12.01.2013

может я не понятно обьяснил? дело такое - вход на тестере щуп 1  и щуп 2  ,цикл таков- щуп1 -5.вольт щуп2+5.вольт далее смена  полярности щуп1+5 вольт щуп 2 -5 вольт

maxik
Offline
Зарегистрирован: 12.01.2013

Я из Украины.По вебмани?

maxik
Offline
Зарегистрирован: 12.01.2013

А с кнопочкой сколько?Тоесть запуск не по вкл питания,а по нажатию кнопочки.

maksim
Offline
Зарегистрирован: 12.02.2012

Это и есть та самая особенность драйвера, для этого и ставится диод, иначе реле при смене полярности будет все равно срабатывать, когда вы поставите диод реле будет срабатывать только при "правильной" полярности.

maxik
Offline
Зарегистрирован: 12.01.2013

Нужно срочно,готов утроить сумму.Жду реквизиты.Как рабочий и проверенный  вариант могу закинуть денег на мобилу пополнение в эквиваленте.

maksim
Offline
Зарегистрирован: 12.02.2012

maxik пишет:

А с кнопочкой сколько?Тоесть запуск не по вкл питания,а по нажатию кнопочки.

Если хотите добавить кнопку, то просто подключите ее к S и G выводов А0.

Cкайп у вас есть? а то через форум не удобно общаться - медленно.

скайп: maksimkstovo1985