Реклама: Показометр для моноколеса и гироскутера на Arduino. Изучаю протоколы обмена.

 

Хочешь стать куратором любимой темы?

* Комментарии к новостям

1. Взаимодействие с другими участниками движения (пешеходы, коляски, собаки, авто...) (Моноколеса (электроунициклы)) от kvlad65 (16.07.2019 в 11:55)2. Kugoo g-booster 48V max 2400 Вт 20Ah/10Ah (Электросамокаты Kugoo M и G серии и аналоги ) от arthuru (16.07.2019 в 11:52)3. Dualtron Thunder (Электросамокаты MiniMotors) от Great (16.07.2019 в 11:45)4. Прошивка стокового дисплея Kugoo S2 (Электросамокаты Kugoo S серии и аналоги ) от vlad-2015 (16.07.2019 в 11:44)5. Dualtron Spider 2018 (Электросамокаты MiniMotors) от Andruxa5 (16.07.2019 в 11:42)6. Контроллер (Электровелосипеды) от edw123 (16.07.2019 в 11:38)
7. Вопрос по КПД электродвигателей и контроллеров. (Электродвигатели и генераторы) от P.M. (16.07.2019 в 11:36)8. Обсуждение электросамокатов Starway Z9-серии (48В, 52В) (Электросамокаты StarWay (MaxSpeed)) от Bloody (16.07.2019 в 11:33)9. Помогите выбрать моноколесо! (Моноколеса (электроунициклы)) от Vais Tech (16.07.2019 в 11:32)10. Лучшая обувь для моноколеса (Моноколеса (электроунициклы)) от Vais Tech (16.07.2019 в 11:25)11. Хвастаемся своими еБАЙКАМИ :) (ОБСУЖДЕНИЕ) (Электровелосипеды) от Бешеный енот (16.07.2019 в 11:25)12. Электросамокат и ПДД (Электросамокаты) от АлександрМ (16.07.2019 в 11:25)
Не нравится реклама? Пройдите простую регистрацию на форуме и не будете видеть рекламу.

Прочитано 288 раз

0 Пользователи и 1 Гость просматривают эту тему.

06 Апр 2019 в 07:32
Прочитано 288 раз
Оффлайн

enek

Оренбург Сообщений: 160
Всем привет, пользуюсь GotWay mcm2s+. Не устраивает старое андроид приложение своей функциональностью, а именно общий пробег не показывает. Новые приложения не работают. Так в чем же проблема? Решил я разобраться...
С помощью приложения 232Analyzer и переходника usb-com сделал захват данных:
GotWay mcm2 выдает
Скрытый текст
Data received: // данные при включении
73,65,80,198,244,182,175,213,253,179,163,46,46,46,46,46,46,13,10,
179,245,202,188,187,175,205,234,179,201,46,46,198,244,182,175,180,206,202,253,58,49,180,206,13,10,
Data received: //периодически примерно 200мс выдает такое
85,170,24,193,0,0,0,0,0,0,255,246,255,27,0,1,255,248,0,24,90,90,90,90,85,170,0,140,166,79,0,0,0,0,0,0,0,0,0,0,0,0,4,24,90,90,90,90,
Data received: //ответ ок при изменении параметров (добавляется третий кусок пакета, там где в конце 3,24,90,90,90,90,)
85,170,13,50,0,0,0,0,0,0,255,255,8,144,0,1,255,248,0,24,90,90,90,90,85,170,0,140,166,79,0,0,0,0,0,0,0,0,0,0,0,0,4,24,90,90,90,90,85,170,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,24,90,90,90,90,
контроллер ACM16 выдает подобное:
Скрытый текст
Data received: 73,65,80,198,244,182,175,213,253,179,163,46,46,46,46,46,46,13,10,
Data received: 179,245,202,188,187,175,205,234,179,201,46,46,198,244,182,175,180,206,202,253,58,49,180,206,13,10,
Data received: 85,170,26,2,0,0,0,0,0,0,255,197,245,88,0,1,255,248,0,24,90,90,90,90,85,170,0,0,1,169,32,0,28,32,0,5,0,6,0,7,0,8,4,24,90,90,90,90,
Поковырявшись в исходниках ссылка
нашел то что искал
Скрытый текст
            mTotalDistance = ((data[6]&0xFF) <<24) + ((data[7]&0xFF) << 16) + ((data[8] & 0xFF) <<8) + (data[9] & 0xFF);
if (mUseRatio) mTotalDistance = Math.round(mTotalDistance * RATIO_GW);
Потом поковырял приложения GotWay, там алгоритм похожий.
Есть команды настройки поднятия педалей
Скрытый текст
      if ((paramString.equals("W")) && (bool)) {}
      switch (paramInt)
      {
      default:
        break;
      case 3:
        setSpeed(new String[] { "Y", "0", "3", "b" });
        break;
      case 6:
        setSpeed(new String[] { "Y", "0", "6", "b" });
        break;
      case 9:
        setSpeed(new String[] { "Y", "0", "9", "b" });
        break;
      case 12:
        setSpeed(new String[] { "Y", "1", "2", "b" });
        break;
И после этого накидал простой показометр на Ардуино

Общий пробег колеса 8065км :dance:
Скрытый текст
Скетч во вложении с частично замененным шрифтом библиотеки
* gotway.rar (442.11 кБ - загружено 3 раз.)

Еще добавлю что я купил контроллер ACM16 без bluetooth, у меня был адаптер типа HC-05/06. Удалось подружить его после изменения скорости обмена на 115200 командой AT+BAUD=115200, а командой AT+NAME<имя> поменял имя адаптера. Но приложение работало так же старое.
И куски кода из андроид приложений
* src.rar (15.35 кБ - загружено 3 раз.)
« Последнее редактирование: 15 Апр 2019 в 00:23 от enek »
Сообщение понравилось: Ghozt, Delight Device

08 Апр 2019 в 18:00
Ответ #1
Оффлайн

enek

Оренбург Сообщений: 160
Для тестирования и отладки можно взять блютус модуль типа HC-05/06 и спарить с модулем колеса. Опишу как это делается...
Для программирования я использовал среду Arduino IDE, поэтому для настройки HC-05 использовал встроенный монитор СОМ порта. Нужен usb-com адаптер, я использовал от программатора - ft232. На модуле замыкаем key - 3.3V, подаем питание 5V, соединяем rx-tx tx-rx. В мониторе порта baud 38400, оба NL & CR.
На моем примере имя модуля колеса GotWay_2966 адрес 00:14:17:72:76:DB (адрес взят из приложения в телефоне).
HC-05 выдает долгие мигания. Проверяем соединение командой AT, ответ OK.
AT+ROLE=1
AT+CMODE=0
AT+BIND=0014,17,7276DB
Проверяем командами
AT+ROLE?
AT+CMODE?
AT+BIND?
AT+BAUD?
Скорость обмена поменял в прошлом сообщении.

Снимаем перемычку KEY, передергиваем питаниеи включаем колесо. Модуль HC-05 при подключении должен периодически моргать по два коротких раза.
Данные с колеса идут :dance:
Скрытый текст
Дальше работаем с данными через ардуино. :wow:
Колесо выдает сигнал если ему отправить "b". Можно отправить команду смена режима (soft, comfort , madden) или поднятия педалей.
К данным о токе можно прикрутить стоп-сигнал когда при рекуперации ток ниже -5А
В скетче закомментировал строки для работы с датчиком ds18b20, его можно пристроить к обмотке двигателя/батареи/педалей, на ваше усмотрение.
« Последнее редактирование: 08 Апр 2019 в 18:07 от enek »
Сообщение понравилось: i, Delight Device

14 Апр 2019 в 23:59
Ответ #2
Оффлайн

enek

Оренбург Сообщений: 160
Руки потер и добрался до гироскутера... :kidding:
Запустил я анализатор 232Analyzer на скорости 115200 и увидел такие повторяющиеся пакеты:
Скрытый текст
Data received: 170 241 099 000 015 187
Data received: 170 242 000 000 019 187
Data received: 170 243 000 163 014 187
Data received: 170 244 000 000 019 187
Data received: 170 245 000 042 015 187
Data received: 170 246 019 058 011 187
Data received: 170 247 000 000 017 187
Data received: 170 248 000 000 019 187
Data received: 170 249 020 030 012 187
Data received: 170 250 060 001 013 187
Покрутил настройки приложения и начал искать изменения. Решил подобные пакеты кидать через блютус модуль в приложение.

Красная стрелочка это tx платы гироскопа, оттуда идут данные.
Подключил питание 3.3В и данные пошли при выключенном гироскутере:
Скрытый текст
Data received: 170 241 000 000 019 187
Data received: 170 242 000 000 019 187
Data received: 170 243 000 000 018 187
Data received: 170 244 000 000 019 187
Data received: 170 245 000 000 018 187
Data received: 170 246 016 011 014 187
Data received: 170 247 000 000 017 187
Data received: 170 248 000 000 019 187
Data received: 170 249 020 030 012 187
Data received: 170 250 000 001 017 187
Оказалось что плата гироскопа выдает параметры скорости, жесткости, чувствительности, а также версию ПО и ТО. Пришлось резануть дорожку и подключиться к блютус модулю, т.к. приложение другой блютус модуль не видит. Я накидал скетч "эмулятора гироскутера" в  архиве gscooter_emulator.ino
Там в коде наглядно расписал что где.

пробег получился больше одометра :laugh:
Самое сложное было определить алгоритм контрольной цифры. Вот к примеру пакет начинается на 170, далее 241 (как бы индентификатор), 99 (%батареи), 155(/10 = скорость), волшебное число Х, и заканчивается 187. Так же происходит и при заливке параметров, без этой цифры не воспринимает. Долго я сидел циферки перебирал... %-)
Потом посмотрел на них в двоичной системе 241 99 155 = 11110001 1100011 10011011, оказалось что нужно подсчитать единички (14 шт) и вычесть их количество из 24. И аналогично от 16 отнять количество единичек при заливке параметров. Незнаю как этот алгоритм называется, в коде я его назвал magic3 и magic2
Следующий эксперимент, скетч gscooter_params_upload.ino
Кидаю уже меняющиеся параметры и смотрю в приложении как они меняются в самом контроллере гироскутера ;-D
видео на яндекс.диске
Для удобства можно подключить энкодер/кнопки чтобы менять параметры.
Ну и накидал сам показометр для гироскутера в скетче gscooter_meter.ino

по порядку батарея% скорость ток температура
вторая строка trip odometr лим скорости прочности чувствительность
параметры соответствуют тем что в приложении:
Скрытый текст
Ну на этом всё, поигрался. Кому надо думаю что без проблем любой другой дисплей прикрутит.
P.S. Не нужно воспринимать это как серьезный прибор, это просто разминка для мозгов и освоение программирования. :kidding:
На очереди инфинеон :-)
« Последнее редактирование: 15 Апр 2019 в 00:52 от enek »
Сообщение понравилось: Delight Device