Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.11.2015, 13:47   #1
Revenger
Senior Member
 
Регистрация: 11.07.2015
Адрес: Ставрополь
Сообщений: 142
Вес репутации: 0
Revenger is an unknown quantity at this point
По умолчанию Вывод на LCD 1602 оборотов ШД. Как?

Приветствую.
Прошу прощения, если тема была, но пока не нашёл. Если что удалите/перенесите.

Вопрос в том, что я, как полный ноль в программировании, никак не могу найти простенькие скетчи и слить воедино, чтобы управляя оборотами ШД эти данные вывести на LCD 1602 дисплей. Не сказать, что это жизненно необходимо, но неумение этого как-то слегка огорчает. Регулировку оборотов посредством фоторезистора я с горем/пополам сделал (связал скетч по ШД с регулировкой из стандартного набора с простым фоторезистором вместо переменника). Дальше никак. Может подскажете/поможете? Просьба не посылать учить матчасть. Мне это в жизни понадобилось скорее пока интерес победить не пропал, я этим не зарабатываю и не основное хобби. Однако интерес к ардуино очень большой из-за её возможностей.
Прикрепил скетч, может кто всё же направит в нужное русло

Код:
#include <Stepper_28BYJ.h>
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
#define lcd_RS_pin 7
#define lcd_RW_pin 8
#define lcd_E_pin 9
#define lcd_DB4_pin 10
#define lcd_DB5_pin 11
#define lcd_DB6_pin 12
#define lcd_DB7_pin 13
LiquidCrystal lcd(lcd_RS_pin, lcd_RW_pin, lcd_E_pin, lcd_DB4_pin, lcd_DB5_pin, lcd_DB6_pin, lcd_DB7_pin);

// изменить количество шагов для вашего мотора
const int stepsPerRevolution = 4076;
Stepper_28BYJ myStepper_28BYJ(stepsPerRevolution, 2,3,4,5);

int stepCount = 0;  // number of steps the motor has taken
//Specify your input pin here
// int sensePin = 0;
const int sensorPin = 0;
const int ledPin = 6; // пин для светодиода

// Также зададим 3 глобальные переменные - lightLevel, high и low
int lightLevel, high = 0, low = 1023;

void setup()
{
    //включение ноги светодиода
  pinMode(ledPin, OUTPUT);
 /* 
  lcd.begin(16,2); //Инициализируем экран

  //Запускает последовательный порт
  Serial.begin(9600);

  //Сообщение о запуске программы
 
  lcd.setCursor(0, 0); //устанавливаем курсор
  lcd.print("Stepper control"); //выводим на него  строку
  lcd.setCursor(0, 1); //устанавливаем курсор
  lcd.print("              "); //выводим на него  строку
  lcd.setCursor(0, 1); //устанавливаем курсор
  lcd.cursor(); //Включим курсор
  lcd.blink(); //Пусть мигает
  
  delay(100);
  */
}

void loop()
{
  // read the sensor value:
  // читаем значение датчика на аналоговом входе 0
  int sensorReading = analogRead(A0);
  
  //lightLevel = analogRead(sensorPin);
  
  // map it to a range from 0 to 100:
  // масштабируем значение с аналогового входа
  // из диапазона 0..1023 в диапазон 0..100
  int motorSpeed = map(sensorReading, 0, 4076, 0, 100);
  // set the motor speed:
  // установить  скорость вращения
  if (motorSpeed > 0) {
    myStepper_28BYJ.setSpeed(motorSpeed);
    // step 1/100 of a revolution:
  // прощагать 1/100 оборота
    myStepper_28BYJ.step(stepsPerRevolution/100);
  }
  //включаем светодиод
  analogWrite(ledPin,3);//светодиод горит на 10 ))
  
}
Поясню для чего светодиод: Освещенность в помещении может быть разная, а так, упрятав фоторезистор в корпус, посредством подсвечивания я думаю параметры будут более стабильные.


Последний раз редактировалось Revenger; 17.11.2015 в 14:11.
Revenger вне форума   Ответить с цитированием
Старый 17.11.2015, 16:26   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Вывод на LCD 1602 оборотов IL. Как?

Как то так
Код:
lcd.setCursor(0, 1);
lcd.print("S=    ");
lcd.setCursor(2, 1);
lcd.print(motorSpeed);
Admin вне форума   Ответить с цитированием
Старый 17.11.2015, 17:46   #3
Revenger
Senior Member
 
Регистрация: 11.07.2015
Адрес: Ставрополь
Сообщений: 142
Вес репутации: 0
Revenger is an unknown quantity at this point
По умолчанию Re: Вывод на LCD 1602 оборотов IL. Как?

Спасибо, попробую.
Я вроде выводил такие строки и команду lcd.print(motorSpeed); вносил...
Сейчас....

п.с. а можно исправить очепятку в названии темы? Что-то я вроде переименовал, да видать не там где надо ((

Последний раз редактировалось Revenger; 17.11.2015 в 17:48.
Revenger вне форума   Ответить с цитированием
Старый 17.11.2015, 18:02   #4
Revenger
Senior Member
 
Регистрация: 11.07.2015
Адрес: Ставрополь
Сообщений: 142
Вес репутации: 0
Revenger is an unknown quantity at this point
По умолчанию Re: Вывод на LCD 1602 оборотов IL. Как?

Не хватает чего-то... моторспид выдаёт ошибку, что она где-то не прописана где надо

Код:
sketch_nov17a_new:41: error: 'motorSpeed' was not declared in this scope
'motorSpeed' was not declared in this scope
Revenger вне форума   Ответить с цитированием
Старый 17.11.2015, 22:26   #5
Revenger
Senior Member
 
Регистрация: 11.07.2015
Адрес: Ставрополь
Сообщений: 142
Вес репутации: 0
Revenger is an unknown quantity at this point
По умолчанию Re: Вывод на LCD 1602 оборотов IL. Как?

Всё, победил. У меня в сетапе было определение вывода на дисплей, а я опустил ниже в "луп". Стало отображать. Правда не понятно в каких единицах, но уже что-то ))
Единственно.. почему-то если скетч тестовый чистый, то скорость мотора гораздо выше максимальная, а с моими "улучшениями" раза в два меньше. Возможно это из-за несогласованного "делителя сопротивления"?
Revenger вне форума   Ответить с цитированием
Старый 17.11.2015, 23:54   #6
Revenger
Senior Member
 
Регистрация: 11.07.2015
Адрес: Ставрополь
Сообщений: 142
Вес репутации: 0
Revenger is an unknown quantity at this point
По умолчанию Re: Вывод на LCD 1602 оборотов ШД. Как?

Скажите, может что-то ошибочное при вызове вывода на дисплей, давать такой эффект, что мотор как-то не ровно работает, экран мерцает как бы в такт частоте шагов (и должен ли моргать светодиод на ардуине в той же частоте, что и шаги и дисплей)?
Код:
#include <Stepper_28BYJ.h>
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
#define lcd_RS_pin 7
#define lcd_RW_pin 8
#define lcd_E_pin 9
#define lcd_DB4_pin 10
#define lcd_DB5_pin 11
#define lcd_DB6_pin 12
#define lcd_DB7_pin 13
LiquidCrystal lcd(lcd_RS_pin, lcd_RW_pin, lcd_E_pin, lcd_DB4_pin, lcd_DB5_pin, lcd_DB6_pin, lcd_DB7_pin);


// изменить количество шагов для вашего мотора
const int stepsPerRevolution = 4076;
Stepper_28BYJ myStepper_28BYJ(stepsPerRevolution, 2,3,4,5);

int stepCount = 0;  // number of steps the motor has taken
//Specify your input pin here
// int sensor = 0;
// const int sensorPin = 0;
const int ledPin = 6; // пин для светодиода

// Также зададим 3 глобальные переменные - lightLevel, high и low
// int lightLevel, high = 0, low = 1023;

void setup()
{
 
//  lcd.clear();
  //Запускает последовательный порт
 // Serial.begin(9600);  
}

void loop(){
  // read the sensor value:
  // читаем значение датчика на аналоговом входе 0
  int sensorReading = analogRead(A0);
    // map it to a range from 0 to 100:
  // масштабируем значение с аналогового входа
  // из диапазона 0..1023 в диапазон 0..100
  int motorSpeed = map(sensorReading, 0, 4076, 0, 100);
    // установить  скорость вращения
  if (motorSpeed > 0) {
    myStepper_28BYJ.setSpeed(motorSpeed);
      // прошагать 1/100 оборота
    myStepper_28BYJ.step(stepsPerRevolution / 100);
   
   //включение ноги светодиода
  pinMode(ledPin, OUTPUT);
  lcd.begin(16,2); //Инициализируем экран
    //Выводим на экран скорость мотора
  lcd.setCursor(0, 0);
  lcd.print("  Motor Speed");
  lcd.setCursor(0, 1);
  lcd.print("      S=    ");
  lcd.setCursor(8, 1);
  lcd.print(motorSpeed);
    } 
      //lightLevel = analogRead(sensorPin);
  //включаем светодиод
    analogWrite(ledPin,150);//светодиод горит на 150 )) 
   
  }
Почему чистый скетч
Код:
/* 
 Stepper_28BYJ Motor Control - speed control
 
 This program drives a unipolar or bipolar stepper motor. 
 The motor is attached to digital pins 8 - 11 of the Arduino.
 A potentiometer is connected to analog input 0.
 Эта программ управляет униполярным или биполярным шаговым двигателем.
 Шаговый двигатель присоединён к цифровым выходам 8-11 платы Arduino. 
 Потенциометр присоединён к аналоговому входу 0. 
 
 The motor will rotate in a clockwise direction. The higher the potentiometer value,
 the faster the motor speed. Because setSpeed() sets the delay between steps, 
 you may notice the motor is less responsive to changes in the sensor value at
 low speeds.
 Двигатель будет вращаться по часовой стрелке. Чем выше напряжение снимаемое с потенциометра,
 тем выше будет скорость вращения. Потому что функция setSpeed() определяет задержки между шагами,
 вы можете заметить, что двигатель становится менее чувствительным к показаниям датчика на
 низких скоростях.
 
 Created 30 Nov. 2009
 Modified 28 Oct 2010
 by Tom Igoe
 
 */

#include <Stepper_28BYJ.h>

// количество шагов на один оборот
const int stepsPerRevolution = 4076;  // change this to fit the number of steps per revolution
// for your motor


// initialize the stepper library on pins 8 through 11:
// инициализируем библиотеку Stepper_28BYJ на выходы 8-11
Stepper_28BYJ myStepper_28BYJ(stepsPerRevolution, 2,3,4,5);            

// количество шагов, которые мотор уже сделал
int stepCount = 0;  // number of steps the motor has taken

void setup() {
  // nothing to do inside the setup
  // ничего не делаем внутри процедуры setup
}

void loop() {
  // read the sensor value:
  // читаем значение датчика на аналоговом входе 0
  int sensorReading = analogRead(A0);
  // map it to a range from 0 to 100:
  // масштабируем значение с аналогового входа
  // из диапазона 0..1023 в диапазон 0..100
  int motorSpeed = map(sensorReading, 0, 4076, 0, 60);
  // set the motor speed:
  // установить  скорость вращения
  if (motorSpeed > 0) {
    myStepper_28BYJ.setSpeed(motorSpeed);
    // step 1/100 of a revolution:
	// прощагать 1/100 оборота
    myStepper_28BYJ.step(stepsPerRevolution/100);
  } 
}
просто с регулировкой скорости даёт большие обороты, нежели с моими дополнениями? Влияет дисплей или светодиод или... кстати надо попробовать дисплей запитать отдельно от ардуино.

Последний раз редактировалось Revenger; 18.11.2015 в 00:16.
Revenger вне форума   Ответить с цитированием
Старый 18.11.2015, 00:09   #7
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Вывод на LCD 1602 оборотов ШД. Как?

Цитата:
Скажите, может что-то ошибочное при вызове вывода на дисплей, давать такой эффект, что мотор как-то не ровно работает, экран мерцает как бы в такт частоте шагов (и должен ли моргать светодиод на ардуине в той же частоте, что и шаги и дисплей)?
Что то с питанием. От чего питается ардуина и ШД?

Цитата:
Почему чистый скетч просто с регулировкой скорости даёт большие обороты, нежели с моими дополнениями? Влияет дисплей или светодиод или... кстати надо попробовать дисплей запитать отдельно от ардуино.
Потому что скорость в Вашем скетче зависит от датчика света.
Admin вне форума   Ответить с цитированием
Старый 18.11.2015, 00:18   #8
Revenger
Senior Member
 
Регистрация: 11.07.2015
Адрес: Ставрополь
Сообщений: 142
Вес репутации: 0
Revenger is an unknown quantity at this point
По умолчанию Re: Вывод на LCD 1602 оборотов ШД. Как?

Ардуина УНО, от УСБ (постоянно перешиваю меняя параметры), ШД отдельно от компьютерного БП 5В.
Сейчас подключил 5В БП от модема в разъём ардуино. Дисплей вроде ярче стал, но изменения в работе ШД и дисплея нет (ШД как буд-то тресёт на больших оборотах в такт частоте всех компанентов).

п.с. добавил питание. Толку мало. Начал добавлять свои рюшечки в чистый скетч из набора среды разработки.
Пока до дисплея не дошёл - вроде всё нормально и обороты большие и чисто работает.

Последний раз редактировалось Revenger; 18.11.2015 в 02:47.
Revenger вне форума   Ответить с цитированием
Старый 18.11.2015, 02:49   #9
Revenger
Senior Member
 
Регистрация: 11.07.2015
Адрес: Ставрополь
Сообщений: 142
Вес репутации: 0
Revenger is an unknown quantity at this point
По умолчанию Re: Вывод на LCD 1602 оборотов ШД. Как?

Цитата:
Сообщение от Admin Посмотреть сообщение


Потому что скорость в Вашем скетче зависит от датчика света.
Я по всякому пробовал. Менял яркость светодиода, перекрывал полностью. обороты не поднимаются до того уровня, как без фоторезистора на "чистом" скетче. Фоторезистор подключен в паре с переменником (т.е. второй резистор это второе плечо переменного в "делителе"). Крутил по всякому - срываются обороты и работает "грязно".
Revenger вне форума   Ответить с цитированием
Старый 18.11.2015, 09:05   #10
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Вывод на LCD 1602 оборотов ШД. Как?

Ну мне бы для понимания нужно хотя бы знать какое макс. значение оборотов и что у Вас на входе А0
Admin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 22:42. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика