#26 Re: Проекти » Arduino + bluetooth = система контроля доступа » 2016-03-01 17:32:00

Вообще идея не моя. Volvo digital key - https://www.youtube.com/watch?v=FF6JtS3y1xA Они используют приложение для смартфона. Возможно не всё так гладко как в ролике, но в любом случае машина каким-то образом сканирует эфир и видит телефон. Значит bluetooth каким-то образом можно выводить из спячки. Иначе постоянно включенный bluetooth действительно посадит смартфон. Вопрос как они "будят" телефон? Судя по ролику, чувак не спаривал машину с телефоном (возможно сама машина имеет доступ в сеть и ей залили удалённо пару.) Даже если устройства спарены, как тогда будить телефон для проверки MAC/другой инфы? Как по мне, это всё тянет на полноценный комп с линуксом + куча софта.

#27 Re: Проекти » Arduino + bluetooth = система контроля доступа » 2016-03-01 13:34:09

lkj пише:

Хочется вам лишний раз разряжать аккумулятор телефона?

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

Хотя, может, я себе что-то придумал нереальное.

#28 Проекти » Arduino + bluetooth = система контроля доступа » 2016-02-29 21:13:40

gorenkov
відповідей: 7

Нужен совет. Есть идея организовать контроль доступа в помещение через смартфон/телефон с bluetooth. Берём Arduino, bluetooth модуль, кнопка. Ардуино постоянно мониторит эфир на наличие активных bluetooth устройств. Если в радиусе действия появляется разрешённое устройство, то нажатием кнопки можно отрыть замок. Но даже у меня, чайника, появляется несколько вопросов:

1. Может ли ардуино выполнять поиск bluetooth устройств? Всё что мне попадалось в интернете - bluetooth работает как удалённый com порт.
Если да - какие библиотеки?

2. Если нет. Какое устройство могло бы справиться с поставленной задачей? Rapsberry/Orange, может что-то другое esp8266/wifi?

3. По умолчанию все bluetooth устройства скрыты, надо включать видимость и всех их надо "спаривать". Как это обойти не устанавливая клиент/софт на смартфоне? Буду ещё читать спецификацию по bluetooth.

Буду рад любому совету.

#29 Re: Апаратні питання » Ардуино и 6 ( шесть ) шаговых двигателей. » 2016-02-10 18:15:04

Опыт у меня конечно очень маленький. Но, я разбирал MakerBot Replicator 2, там обыкновенная Arduino Mega и под каждый двигатель отдельный драйвер. Чем они руководствовались при проектировании данного принтера - не знаю. Хотя возможно в природе и существуют драйвера способные управлять несколькими двигателями. Может гуру что подскажут.

#30 Re: Програмування Arduino » Сохранение данных с порта в текстовый файл на компьютер » 2016-02-04 13:48:04

siriniti пише:

Спасибо за ответы! нашла решение.

Поделитесь решением. Мне тоже интересно как записывать данные в файл.

#31 Re: Програмування Arduino » Скорость вращение шагового двигателя » 2016-01-26 20:15:10

vvr пише:

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

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

Буду комбинировать режимы.

#32 Re: Програмування Arduino » Скорость вращение шагового двигателя » 2016-01-20 00:11:47

Йожэг пише:
gorenkov пише:

Когда двигатель крутится на малых оборотах, он немного вибрирует и работает микрорывками - вращение не плавное.

Всё правильно, это же шаговый двигатель, он шагает)

Получается заставить их "плавно" крутиться не получится? А как же тогда он плавно крутится на больших оборотах?

#33 Re: Програмування Arduino » Скорость вращение шагового двигателя » 2016-01-15 13:33:59

Ещё заметит одну неприятную для меня особенность. Когда двигатель крутится на малых оборотах, он немного вибрирует и работает микрорывками - вращение не плавное. И соответственно тихонько "бурчит". Когда он крутится быстро - работает тихо и плавно. Это нормально?

#34 Re: Програмування Arduino » Скорость вращение шагового двигателя » 2016-01-15 01:19:46

vvr пише:

у шагового двигателя есть зона разгона
сначала нужно довести скорость до этой зоны, а уже потом разгонять до высоких скоростей
есть теория, схемы, графики

Спасибо за направление.    Будем искать...(с)

#35 Re: Програмування Arduino » Скорость вращение шагового двигателя » 2016-01-14 21:08:29

Йожэг пише:

Конденсаторы для убирания помех поставлены, провода не перепутаны, программа не подвисает, в ней переполнения целых типов не происходят? :-)

Конденсаторов - нет
Провода 100% не перепутаны
программа не подвисает, всё работает стабильно и прогнозируемо
насчёт переполнений не уверен - слишком мал опыт в программировании и работе с ардуино.

#36 Re: Програмування Arduino » Скорость вращение шагового двигателя » 2016-01-14 21:05:30

Вот мой скетч, через консоль вижу постепенное увеличение константы отвечающей за скорость. После доситжения значения 200 и больше, скорость не увеличивается. После 300 двигатель начинает быстро крутиться. Если вращаю ручку энкодера в обратную сторону, происходит обратный эффект. Сначала скорость падает, но не уменьшается, а при значении меньше 200, скорость начинает уменьшаться.

/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution

int beg = 0;
int dir = 1;
// for your motor
//int button = 6;
//int switcher = 6;


// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 2, 3);

//these pins can not be changed 2/3 are special pins
// Setting up the counter
int reading = 0;
int lowest = -500;
int highest = 500;
int changeamnt = 40;

// Timing for polling the encoder
unsigned long currentTime;
unsigned long lastTime;


// Pin definitions
const int pinA = 4;
const int pinB = 5;
int button = 6;

// Storing the readings

boolean encA;
boolean encB;
boolean lastA = false;



void setup() {
  // set the speed at 60 rpm:
  //myStepper.setSpeed(200);
  // initialize the serial port:
  pinMode(button, INPUT);
//  pinMode(switcher, INPUT);
 // set the two pins as inputs with internal pullups
  pinMode(pinA, INPUT_PULLUP);
  pinMode(pinB, INPUT_PULLUP);
  //pinMode(SW, INPUT_PULLUP);  
  digitalWrite(button  , HIGH); 
  // Set up the timing of the polling
  currentTime = millis();
  lastTime = currentTime; 
  // Start the serial monitor for debugging
  Serial.begin(9600);
  
  
  
}

void loop() {

// Read elapsed time
  currentTime = millis(); 
  // Check if it's time to read
  if(currentTime >= (lastTime + 5))
  {
    // read the two pins
    encA = digitalRead(pinA);
    encB = digitalRead(pinB);
    // check if A has gone from high to low
    if ((!encA) && (lastA))
    {
      // check if B is high 
      if (encB)
      {
        // clockwise
        if (reading + changeamnt <= highest)
        {
          reading = reading + changeamnt; 
          beg = reading;
        }
      }
      else
      {
        // anti-clockwise
        if (reading - changeamnt >= lowest)
        {
          reading = reading - changeamnt; 
          beg = reading;
        }
      }
      // Output reading for debugging
      Serial.print("Reading ");
      Serial.println(reading);
      Serial.print("Dir ");
      Serial.println(dir); 
//      Serial.print("SW ");
//      Serial.println(switcher);       
 /*     Serial.print("lastA ");
      Serial.println(lastA);         
      Serial.print("lastTime ");
      Serial.println(lastTime);         
*/      
    }
    // store reading of A and millis for next loop
    lastA = encA;
    lastTime = currentTime;

  }


if (beg == 0)
  {
myStepper.setSpeed(0);
myStepper.step(0);  
  
  }

if (beg > 0)
  {
//    dir = 1;
myStepper.setSpeed(beg);
myStepper.step(dir);
  }

if (beg < 0)
  {
myStepper.setSpeed(-beg);
myStepper.step(-dir);  
  }
 
if ( digitalRead (button)) 
  {}
  else
  {
beg = 0;
reading = 0;
Serial.println("Stop");
  }

/* if ( digitalRead(switcher) ) 
  {
beg = 0;
reading = 0;
  }
*/
  

}

#37 Програмування Arduino » Скорость вращение шагового двигателя » 2016-01-14 15:30:02

gorenkov
відповідей: 17

Здравствуйте,

http://arduino-ua.com/prod531-Shagovii_ … -1004A_27V - шаговый двигатель
http://arduino-ua.com/prod527-Draiver_s … ya_DRV8834 - драйвер

Подскажите, пожалуйста. Пытаюсь энкодером регулировать скорость шагового двигателя. В общем всё получается, но скорость регулирования не плавная. К примеру, я кручу ручку энкодера и скорость постепенно увеличивается, затем наступает момент когда скорость не увеличивается. А потом через несколько оборотов энкодера двигатель начинает крутиться как бешеный. Это нормально для шагового двигателя или что-то я сделал не так?

Заранее благодарен.

#38 Re: Програмування Arduino » Нужен совет. Ардуино + энкодер + шаговый двигатель » 2015-12-23 20:04:59

vvr пише:

если бы вы вышли из подполья и указали каким драйвером пользуетесь - шанс получить поддержку значительно возрастает  smile

Прошу прощения, что не написал об оборудовании.

Шаговик - http://arduino-ua.com/prod531-Shagovii_ … -1004A_27V
Драйвер - http://arduino-ua.com/index.php?productID=527
Энкодер - http://arduino-ua.com/prod803-enkoder

Со скоростью и направлением вращения двигателя я разобрался. Не разобрался ещё в нескольких вопросах.
1. Не могу заставить при нажатии кнопки на энкодере, останавливать двигатель (а ещё лучше отключать питание на драйвере)
2. Текущий код/аппаратная реализация не свсегда идеально понимают вращение ручки энкодера.
3. Могу пальцами остановить вращение вала двигателя (хоть и с усилием), читал что правильно настроив двигатель его ОЧЕНЬ трудно остановить.

Но я пока большой новичёк в этом деле, поэтому не отчаиваюсь - надо только время! В интернете есть вся информация + форумы.

#39 Re: Програмування Arduino » Нужен совет. Ардуино + энкодер + шаговый двигатель » 2015-12-10 15:47:05

vvr пише:

обычно на драйвере есть выход enable
вот его бросайте на пин дуни и вкл -выкл smile

В документации к драйверу такого не было. Спасибо большое, буду экспериментировать. Бросать через отдельный резистор или можно использовать встроенный?

#40 Re: Програмування Arduino » Нужен совет. Ардуино + энкодер + шаговый двигатель » 2015-12-09 20:58:11

vvr пише:
gorenkov пише:

Правда не совсем понимаю как полностью отключать питание от двигателя когда он не крутится - а то он заметно греется. Может есть у кого-то идеи на этот счёт?

вы шаговик подключаете через драйвер.
вот на драйвере и отключайте питание во время простоя

Спасибо за ответ. прошу прощения, я не правильно выразился. Правильный вопрос - Как отключать питание программно ?

#41 Re: Програмування Arduino » Нужен совет. Ардуино + энкодер + шаговый двигатель » 2015-12-08 19:07:10

Проблема решена, переписал скетч и всё работает. Правда не совсем понимаю как полностью отключать питание от двигателя когда он не крутится - а то он заметно греется. Может есть у кого-то идеи на этот счёт?

/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution

int beg = 0;
int dir = 1;
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 2, 3);

//these pins can not be changed 2/3 are special pins
// Setting up the counter
int reading = 0;
int lowest = -200;
int highest = 200;
int changeamnt = 20;

// Timing for polling the encoder
unsigned long currentTime;
unsigned long lastTime;


// Pin definitions
const int pinA = 4;
const int pinB = 5;

// Storing the readings

boolean encA;
boolean encB;
boolean lastA = false;



void setup() {
  // set the speed at 60 rpm:
  //myStepper.setSpeed(200);
  // initialize the serial port:

 // set the two pins as inputs with internal pullups
  pinMode(pinA, INPUT_PULLUP);
  pinMode(pinB, INPUT_PULLUP);
  // Set up the timing of the polling
  currentTime = millis();
  lastTime = currentTime; 
  // Start the serial monitor for debugging
  Serial.begin(9600);
  
  
  
}

void loop() {



// Read elapsed time
  currentTime = millis(); 
  // Check if it's time to read
  if(currentTime >= (lastTime + 5))
  {
    // read the two pins
    encA = digitalRead(pinA);
    encB = digitalRead(pinB);
    // check if A has gone from high to low
    if ((!encA) && (lastA))
    {
      // check if B is high 
      if (encB)
      {
        // clockwise
        if (reading + changeamnt <= highest)
        {
          reading = reading + changeamnt; 
          beg = reading;
//          myStepper.setSpeed(beg);
//          myStepper.step(1000);
        }
      }
      else
      {
        // anti-clockwise
        if (reading - changeamnt >= lowest)
        {
          reading = reading - changeamnt; 
          beg = reading;
//          myStepper.setSpeed(beg);
//          myStepper.step(1000);   
        }
      }
      // Output reading for debugging
      Serial.print("Reading ");
      Serial.println(reading);
      Serial.print("Dir ");
      Serial.println(dir);      
      
    }
    // store reading of A and millis for next loop
    lastA = encA;
    lastTime = currentTime;

  }


if (beg == 0)
  {
myStepper.setSpeed(0);
myStepper.step(0);  
  
  }

if (beg > 0)
  {
//    dir = 1;
myStepper.setSpeed(beg);
myStepper.step(dir);
  }

if (beg < 0)
  {
myStepper.setSpeed(-beg);
myStepper.step(-dir);  
  }
 

  

}

#42 Програмування Arduino » Нужен совет. Ардуино + энкодер + шаговый двигатель » 2015-12-04 21:47:03

gorenkov
відповідей: 7

Здравствуйте,

Помогите советом с кодом. Хочу с помощью энкодера управлять скоростью вращения шагового двигателя. Получается только в одном направлении и то, пока  dir больше нуля. Как только dir становится меньше нуля - двигатель останавливается. Что я делаю не так? Может кто-то уже сталкивался с таким? В интернете в основном примеры в которых двигатель повторяет движения энкодера.

Заранее благодарен.

/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution

int beg = 1;
int dir = 1;
// for your motor

Stepper myStepper(stepsPerRevolution, 2, 3);

//these pins can not be changed 2/3 are special pins
// Setting up the counter
int reading = 0;
int lowest = -200;
int highest = 200;
int changeamnt = 20;

// Timing for polling the encoder
unsigned long currentTime;
unsigned long lastTime;


// Pin definitions
const int pinA = 4;
const int pinB = 5;

// Storing the readings

boolean encA;
boolean encB;
boolean lastA = false;



void setup() {


 // set the two pins as inputs with internal pullups
  pinMode(pinA, INPUT_PULLUP);
  pinMode(pinB, INPUT_PULLUP);
  // Set up the timing of the polling
  currentTime = millis();
  lastTime = currentTime; 
  // Start the serial monitor for debugging
  Serial.begin(9600);
  
  
  
}

void loop() {


// Read elapsed time
  currentTime = millis(); 
  // Check if it's time to read
  if(currentTime >= (lastTime + 5))
  {
    // read the two pins
    encA = digitalRead(pinA);
    encB = digitalRead(pinB);
    // check if A has gone from high to low
    if ((!encA) && (lastA))
    {
      // check if B is high 
      if (encB)
      {
        // clockwise
        if (reading + changeamnt <= highest)
        {
          reading = reading + changeamnt; 
          beg = reading;
      //    myStepper.setSpeed(200);
      //    myStepper.step(200);
        }
      }
      else
      {
        // anti-clockwise
        if (reading - changeamnt >= lowest)
        {
          reading = reading - changeamnt; 
          beg = reading;
        }
      }
      // Output reading for debugging
      Serial.println(reading);
      
    }
    // store reading of A and millis for next loop
    lastA = encA;
    lastTime = currentTime;

  }


if (beg > 0)
  {
    dir = 1;
  }
  else if (beg < 0)
  {
  dir = -1;
  }
  else {}


myStepper.setSpeed(beg);

myStepper.step(dir);
 

}

#43 Re: Різне » Нужен совет. Arduino Uno & драйвер & шаговый двигатель » 2015-11-27 18:21:42

Во время работы, драйвер и двигатель заметно греются. Двигатель довольно хорошо греется.

#44 Re: Різне » Нужен совет. Arduino Uno & драйвер & шаговый двигатель » 2015-11-27 17:32:03

Вот мои результаты:

1. Ограничил силу тока на каждую обмотку, как описано в инструкции на сайте производителя.
2. Дал нормальное питание (10В, 5А) - двигатель заработал, пример скетча ниже:

/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 6000;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 2, 3);

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(10);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(1000);

  // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(1000);
}

У меня два вопроса:
- двигатель всё время попискивает, - и во время движения и когда остановлен (использую стандартные тоненькие проводки)
- двигатель можно остановить пальцами во время движения

Что я делаю не так?

#45 Re: Різне » Нужен совет. Arduino Uno & драйвер & шаговый двигатель » 2015-11-10 13:35:10

vvr пише:

Спасибо за ссылку. К сожалению ясности она мне не дала, буду ещё раз перечитывать.

На сайте pololu в faq я нашёл скетч для теста и как подключить эти компоненты между собой. Сделал всё по инструкции, а моторчик дальше только пищит sad

1. Может кто подскажет, при каких ситуациях моторчик может пищать и не двигаться? Во время пищания/подачи питания вал блокируется и прокрутить его не возможно.

2. Для чего нужен SLEEP, зачем на него постоянно подавать 5в? Нашёл вот эту статью - http://arduino.ru/forum/programmirovani … igatelem-0 она меня ещё больше запутала...


/* Simple step test for Pololu stepper motor driver carriers 
This code can be used with the A4988, DRV8825, DRV8824, and 
DRV8834 Pololu stepper motor driver carriers.  It sends a pulse 
every 500 ms to the STEP pin of a stepper motor driver that is 
connected to pin 2 and changes the direction of the stepper motor
every 50 steps by toggling pin 3. */
 
#define STEP_PIN 2
#define DIR_PIN 3
 
bool dirHigh;
 
void setup()
{
  dirHigh = true;
  digitalWrite(DIR_PIN, HIGH);
  digitalWrite(STEP_PIN, LOW);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
}
 
void loop()
{
  // Toggle the DIR pin to change direction.
  if(dirHigh)
  {
    dirHigh = false;
    digitalWrite(DIR_PIN, LOW);
  }
  else
  {
    dirHigh = true;
    digitalWrite(DIR_PIN, HIGH);
  }
 
  // Step the motor 50 times before changing direction again.
  for(int i = 0; i < 50; i++)
  {
    // Trigger the motor to take one step.
    digitalWrite(STEP_PIN, HIGH);
    delay(250);
    digitalWrite(STEP_PIN, LOW);
    delay(250);
  }
}

#46 Різне » Нужен совет. Arduino Uno & драйвер & шаговый двигатель » 2015-11-09 15:51:50

gorenkov
відповідей: 6

Здравствуйте,

Купил  Arduino UNO, шаговый двигатель http://arduino-ua.com/prod531-Shagovii_ … -1004A_27V, и рекомендуемый драйвер к нему - http://arduino-ua.com/prod527-Draiver_s … ya_DRV8834. Схему подключения взял на сайте производителя:
large_DRV8834stepperDriver6.jpg

Чётко понимаю как подключить драйвер и двигатель (на схеме всё чётко расписано), а вот как подключить драйвер и ардуино - не понимаю. К каким пинам подключать Step и Dir. Нашёл несколько статей в интернете, и они кардинально отличаются друг от друга.

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



По этой статье мне удалось только добиться пищания двигателя - http://arduino.ru/forum/programmirovani … igatelem-0

Підвал форуму