Снова про стрелочный спидометр

( Пред.  1, 2, 3, 4  След. )
Начать новую тему   Ответить на тему Подписчиков (4)
Форум » А давайте обсудим идею... » Снова про стрелочный спидометр
Онлайн-статус
Hammer
Завхоз
Посмотреть профиль Отправить личное сообщение
На форуме с 05.10.2005, cообщений 4340, возраст 46
Жуковский
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 10:56 / 30.09.16

С мегакрасивой шкалой - засада. Вот, что пишут резчики по акрилу:

Цитата:
Гравировку не сделаем, точнее делаем, но надо файл переделать и вам не понравится. Лазерная выборка не линейная и залить краской не получится. Будет просто каша из бликов на акриле. Цвет неявный и более того, начнутся внутренние преломления света.

Я рекомендую отказаться от гравировки (по крайней мере у нас), либо эксперименты за ваш счет.


Как бы нанести шкалу на акрил??? Чтобы она изнутри стекла была.

Еще получается, что подложка прибора будет из акрила толщиной 5мм, а стекла толщиной 2мм. Ну в принципе норм.
Онлайн-статус
Hammer
Завхоз
Посмотреть профиль Отправить личное сообщение
На форуме с 05.10.2005, cообщений 4340, возраст 46
Жуковский
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 00:39 / 01.10.16 | Последний раз редактировалось: Hammer (18:47 / 04.10.16), всего редактировалось 1 раз

Наверное шкалы буду печатать на обычном лазерном принтере на специальной прозрачной пленке:

Снова про стрелочный спидометр
Онлайн-статус
Hammer
Завхоз
Посмотреть профиль Отправить личное сообщение
На форуме с 05.10.2005, cообщений 4340, возраст 46
Жуковский
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 18:43 / 04.10.16

Съездил в Раменское в лазерную резку. За 20 минут мне нафигачили детали по моим выкройкам. Оказывается акрил режут прямо с наклеенной на него защитной пленкой:

Снова про стрелочный спидометр


Отдираем пленку!

Снова про стрелочный спидометр


Теперь я вижу и могу пощупать, соответствуют ли диаметры отверстий чертежу, видно, соприкасаются ли детали, и не отвалилось ли чего. Свои косяки тоже вижу. И я думал, что резьбу будет тяжело нарезать, акрил лопнет. Нет, отлично где нужно нарезалась М3.

Это примерная тяп-ляп сборка:

Снова про стрелочный спидометр


Завтра пойду красивые винтики покупать. И надо подобрать мелкий разъем от мотора к плате.

На руль девайс крепится через отверстия на задней стенке, посредством хомута, который на фото. Потом наверное можно будет так же лазером из резины вырезать кольцо высотой 12-13мм, чтобы влага и пыль не попадали в прибор.
Онлайн-статус
Hammer
Завхоз
Посмотреть профиль Отправить личное сообщение
На форуме с 05.10.2005, cообщений 4340, возраст 46
Жуковский
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 20:32 / 19.10.16

Пришли микросхемы, вот, как оно выглядит:

Снова про стрелочный спидометр


Еще видео буду делать.
Онлайн-статус
Hammer
Завхоз
Посмотреть профиль Отправить личное сообщение
На форуме с 05.10.2005, cообщений 4340, возраст 46
Жуковский
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 22:58 / 19.10.16

Видео:

 


Первое испытание наверное на электровелике будет. И всё еще я не нашел прозрачную плёнку для печати шкал на лазерном принтере.
Онлайн-статус
Hammer
Завхоз
Посмотреть профиль Отправить личное сообщение
На форуме с 05.10.2005, cообщений 4340, возраст 46
Жуковский
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 23:11 / 15.01.17

А вот на колесе:

 
Онлайн-статус
XRay-Man

Посмотреть профиль Отправить личное сообщение
На форуме с 29.03.2017, cообщений 93, возраст 64
Москва
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 11:53 / 04.04.17

Ну, что - нормально, мне понравилось исполнение.
Правда я не сильно "волоку" в цифровых технологиях, больше в аналоговых.
В мое время велоэнтузиасты делали похожие спидометры на милливольтметрах с жесткой посадкой оси, которые не боятся вибрации и тряски. Датчиком служила катушка от малогабаритного реле, а сигнал этот датчик получал от загнутого кончика спицы, проходящего мимо торца сердечника реле - с минимально возможным зазором. Слабый сигнал с катушки усиливался транзисторным усилителем напряжения и подавался на измерительную головку. Количество импульсов никто не подсчитывал, поскольку суммировать их было нечем.
Немного затруднялось снятие импульса, поскольку веловтулка стальная и разница между постоянным магнитным полем от ее фланца и полем отверстия со спицей не очень значительная. Приходилось делать усилители с большим коээфициентом усиления, что приводило порой к помехам от паразитных наводок - вблизи ЛЭП и в промзонах с большими потреблениями электричества.

В случае же с алюминиевой ступицей электромотора, можно получить сигнал от датчика намного сильней. А если еще и подмагнитить спицы постоянным магнитом, то можно и усилитель сделать с меньшей чувствительностью.
Lord_elf

Посмотреть профиль Отправить личное сообщение
На форуме с 14.05.2018, cообщений 11
Пермь
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 14:56 / 14.05.18

Добрый день, Дмитрий)
Давайте поднимем тему, потому что интересное изделие должно быть у всех на виду)
Я хочу постараться повторить Ваше изделие)
Планирую использовать шаговый двигатель Х29, ардуино Нано, датчик Холла модулем и питание организовать через повышающий модуль и аккумулятор 18650.
За основу думал взять проект Алекса гайвера, но он применил маленькую серву, что означает дерганность стрелки.
Очень прошу Вашей помощи, потому как сам точно не осилю такой серьезный проект(
Lord_elf

Посмотреть профиль Отправить личное сообщение
На форуме с 14.05.2018, cообщений 11
Пермь
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 15:04 / 14.05.18

Вот комплектующие)
Датчик Холла еще не решил как крепить, или модулем на вилку и в термоусадку запаять, либо вывести отдельно сам датчик, а плату оставить в корпусе

Снова про стрелочный спидометр
Онлайн-статус
Hammer
Завхоз
Посмотреть профиль Отправить личное сообщение
На форуме с 05.10.2005, cообщений 4340, возраст 46
Жуковский
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 15:24 / 14.05.18

Да если вы посмотрите на первой странице, я тоже сначала использовал серву.

Для шагового спидометра вам понадобится библиотека: https://github.com/clearwater/SwitecX25

Собственно, вот код электроколесного спидометра для ATtiny85:


Код:

// Перехватываем аппаратное прерывание для датчика Холла
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

#include <SwitecX25.h>

// X25.168 поворачивается на 315 градусов, по три шага на градус
#define STEPS       (315 * 3)

//Секунду делим на интервал при максимальной скорости колеса (1000000 / 2300)
#define TIME_MAX    2300

// Датчик Холла на 3 ногу процессора
#define WIRE        4

// Порты, к которым подключается шаговый двигатель
SwitecX25 Gauge(STEPS, 0, 3, 1, 2);

volatile uint32_t timer, interval;
uint32_t sleep;

// Начальные значения для фильтра Калмана, который двигает стрелку плавно
float P = 1.0;
float varP = pow(0.01, 2);
float varM = pow(0.5, 2);
float K = 1.0;
float Kalman = 1.0;

double speed, speed_prev;

void setup(void)
{
  Gauge.zero();
  pinMode(WIRE, INPUT);
 
  // Прерывание на 3 ногу процессора
  sbi(GIMSK, PCIE);
  sbi(PCMSK, PCINT4);

  timer = micros();
  interval = 1000000;
}

void loop(void)
{
  sleep = micros() - timer;
  if (sleep > 1000000){interval = 1000000;}

  speed = (double) 1000000 / interval * 2; //2 = RISING + FALLING
 
  P = P + varP;
  K = P / (P + varM);   
  Kalman = K * speed + (1 - K) * Kalman;
  P = (1 - K) * P;
     
  Gauge.setPosition(Kalman);

  //Если долго ничего не происходит, то кладем стрелку на ноль
  if (sleep > 5000000){Gauge.setPosition(350);}
   
  Gauge.update();
  delay(5);
}


// Обрабатываем сигнал от датчика Холла
ISR(PCINT0_vect) {
  if (!digitalRead(WIRE))
  {
    interval = micros() - timer;
    timer = micros();
  }
}


Для Arduino Nano нужно менять код. Какие есть знания по программированию Ардуин?

У Arduino Nano есть стандартная функция перехвата прерываний, код немного упростится. Порты для подключения мотора и датчика тоже придется менять. В примерах это пины 4, 5, 6, 7. Придется заново подбирать значения для упрощенного фильтра Калмана, чтобы стрелка не дергалась.

Я бы предложил раздобыть Digispark или просто микропроцессор ATtiny85, он же мизерный по сравнению с Ардуиной, его можно прошить через Arduino Nano. К нему батарейку "таблетка", и всё поместится в корпус от манометра.

Но самая засада не в коде, и не в схеме!!!

Нужно хорошо отбалансированную и очень легкую стрелку, иначе шаговый двигатель пропускает шаги.
Lord_elf

Посмотреть профиль Отправить личное сообщение
На форуме с 14.05.2018, cообщений 11
Пермь
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 15:37 / 14.05.18

Hammer писал(а):

Для Arduino Nano нужно менять код. Какие есть знания по программированию Ардуин?


Несколько легких проектов делал, да и гугл мне в помощь)

Hammer писал(а):
У Arduino Nano есть стандартная функция перехвата прерываний, код немного упростится. Порты для подключения мотора и датчика тоже придется менять. В примерах это пины 4, 5, 6, 7. Придется заново подбирать значения для упрощенного фильтра Калмана, чтобы стрелка не дергалась.

Я бы предложил раздобыть Digispark или просто микропроцессор ATtiny85, он же мизерный по сравнению с Ардуиной, его можно прошить через Arduino Nano. К нему батарейку "таблетка", и всё поместится в корпус от манометра.


Пока что слова "фильтр Калмана" у меня в голове разносит пустоту, сейчас почитаю про эту функцию)
У кого то из друзей был Digispark, поспрашиваю сейчас)

Hammer писал(а):
Но самая засада не в коде, и не в схеме!!!
Нужно хорошо отбалансированную и очень легкую стрелку, иначе шаговый двигатель пропускает шаги.

Вот этого не ожидал... Вот тебе и современные технологии)
Так... пока попробую осмыслить все) Но руки уже чешутся)
Онлайн-статус
Hammer
Завхоз
Посмотреть профиль Отправить личное сообщение
На форуме с 05.10.2005, cообщений 4340, возраст 46
Жуковский
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 15:51 / 14.05.18

Если что, код для Arduino Nano я помогу переписать.
Lord_elf

Посмотреть профиль Отправить личное сообщение
На форуме с 14.05.2018, cообщений 11
Пермь
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 15:53 / 14.05.18

Hammer писал(а):
Если что, код для Arduino Nano я помогу переписать.

Был бы премного благодарен!!!)
А то пока не совсем понимаю в коде, а задавать глупые вопросы не хочется, и так напрягаю...
Онлайн-статус
Hammer
Завхоз
Посмотреть профиль Отправить личное сообщение
На форуме с 05.10.2005, cообщений 4340, возраст 46
Жуковский
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 16:10 / 14.05.18 | Последний раз редактировалось: Hammer (18:16 / 15.05.18), всего редактировалось 8 раз(а)

Тогда в этом посте будет код, который будем править по мере тестов:

Код:

// Стрелочный спидометр Хаммера: http://www.dyr4ik.ru/forum/viewtopic.php?p=609070#609070
// Arduino Nano edition

#include <SwitecX25.h>

// X25.168 поворачивается на 315 градусов, по три шага на градус
#define STEPS       (315 * 3)

//Длина окружности колеса в миллиметрах
#define WHEEL       660.0
     
//Максимальная скорость
#define MAX         60.0
     
// Датчик Холла на 2 ногу Arduino
#define WIRE        2

// Лампочка, чтобы мигать!
#define LED        13

// Порты, к которым подключается шаговый двигатель
SwitecX25 Gauge(STEPS, 4, 5, 6, 7);

volatile uint32_t timer, interval;
uint32_t sleep;

// Начальные значения для фильтра Калмана, который двигает стрелку плавно
float P = 1.0;
float varP = pow(0.01, 2);
float varM = pow(0.5, 2);
float K = 1.0;
float Kalman = 1.0;

double speed;
int steps;

void setup(void)
{
  Serial.begin(9600);

  //Кладем стрелку на ноль
  Gauge.zero();
 
  pinMode(WIRE, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(WIRE), hall, FALLING);

  timer = millis();
}

void loop(void)
{
  // Убираем дребезг датчика
  if (interval > 0)
  {
    // (окружность колеса в километрах) / (период в часах) = скорость в км/ч
    speed = (WHEEL / 1000000.0) / (interval / 1000.0 / 3600.0);
    if (speed > MAX) speed = MAX;
  }

  //Если остановились, кладем стрелку
  if (millis() - timer > 5000) speed = 0;

  P = P + varP;
  K = P / (P + varM);   
  Kalman = K * speed + (1 - K) * Kalman;
  P = (1 - K) * P;
     
  steps = Kalman * STEPS / MAX;

  Gauge.setPosition(steps);
  Gauge.update();

  // Задержка, чтобы погасить инерцию стрелки
  delay(5);

  Serial.print("Speed: ");
  Serial.print(speed, 1);
  Serial.print(" Steps: ");
  Serial.println(steps);
 
  digitalWrite(LED, LOW);
}

// Обрабатываем сигнал от датчика Холла
void hall() {
  if (!digitalRead(WIRE))
  {
    interval = millis() - timer;
    timer = millis();
    digitalWrite(LED, HIGH);
  }
}


По идее надо подключить на 2-ю ногу провод, и тыкать им в минус. Если лампочка загорается, то можно подключать шаговый двигатель.
Lord_elf

Посмотреть профиль Отправить личное сообщение
На форуме с 14.05.2018, cообщений 11
Пермь
Ответить с цитатой
Ссылка на это сообщение:
Добавлено: 18:14 / 14.05.18

Цитата:
На вскидку набросал изменения, пока не компилировал, возможности нет, попозже проверю. По идее надо подключить на 2-ю ногу провод, и тыкать им в минус. Если лампочка загорается, то можно подключать шаговый двигатель. Увеличивать значение TIME_MAX, пока стрелка не начнет шевелиться при тыканье проводом в минус. Тыканьем мы имитируем датчик Холла.

Заметил отсутствие условия проверки датчика в функции обработки сигнала с датчика, добавил из первого примера)
Код:
#include <SwitecX25.h>

// X25.168 поворачивается на 315 градусов, по три шага на градус
#define STEPS       (315 * 3)

//Секунду делим на интервал при максимальной скорости колеса (1000000 / 2300)
#define TIME_MAX    2300

// Датчик Холла на 2 ногу процессора
#define WIRE        2

// Лампочка, чтобы мигать!
#define LED        13


// Порты, к которым подключается шаговый двигатель
SwitecX25 Gauge(STEPS, 4, 5, 6, 7);

volatile uint32_t timer, interval;
uint32_t sleep;

// Начальные значения для фильтра Калмана, который двигает стрелку плавно
float P = 1.0;
float varP = pow(0.01, 2);
float varM = pow(0.5, 2);
float K = 1.0;
float Kalman = 1.0;

double speed, speed_prev;

void setup(void)
{
  Gauge.zero();
 
  pinMode(WIRE, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(WIRE), hall, FALLING);

  timer = micros();
  interval = 1000000;
}

void loop(void)
{
  sleep = micros() - timer;
  if (sleep > 1000000){interval = 1000000;}

  speed = 1000000.0 / interval;
 
  P = P + varP;
  K = P / (P + varM);   
  Kalman = K * speed + (1 - K) * Kalman;
  P = (1 - K) * P;
     
  Gauge.setPosition(Kalman);

//  //Если долго ничего не происходит, то кладем стрелку на ноль
//  if (sleep > 5000000){Gauge.setPosition(350);}
   
  Gauge.update();
  digitalWrite(LED, LOW);
  delay(5);
}


// Обрабатываем сигнал от датчика Холла
void hall() {
  if (!digitalRead(WIRE))
  {interval = micros() - timer;
  timer = micros(); }
 digitalWrite(LED, HIGH);
}

Так же закоментил условие пройденного растояния, пока и без него нифига не понимаю)
В итоге все собрал, но стрелка ходит хаотично, пробовал напртив датчика ставить дрель с магнитом, стрелка немного сдвигается с места, а потом хаотично двигается: плавно до предела, обратно и снова на предел и там стоит( Не знаю как это объяснить
Пробовал разные значения TIME_MAX - результат фактически не меняется(

Начать новую тему    Ответить на тему Подписчиков (4) ( Пред.  1, 2, 3, 4  След. )
 

Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах

« Бесщеточный электромотор минус контроллер | 3 в 1 - Trift Trike / Трайк / Снегокат с двигателем »



 
© ДЫРЧИК.РУ 2018
info@dyr4ik.ru
www.magazinmopedov.ru Мобильная платформа для втуберов