Показать сообщение отдельно
Старый 07.12.2014, 17:28   #3
alexnf
Старший Пользователь
 
Регистрация: 07.04.2013
Регион: Беларусь
Машина: Opel Insignia
Сообщений: 112
alexnf will become famous soon enoughalexnf will become famous soon enough
По умолчанию

Программирование Arduino.

Скетч для блока питания, как уже и писал выше, а взял у Chubaka885 только обрезал его, оставив лишь управление питанием.
Все вместе со схемой выложил тут. Светодиоды это реле датчика холла и питания хаба, а выключатель, это ACC автомобиля.
На всякий случай скетч выложу и тут: Rabochiy_Bloc_Pitania.rar

Скетч для подключения к Can-шине с целью подключения кнопок на руле и прочих фишек, пока не доступных. Тут буду писать заметки по ходу работы, в дальнейшем систематизирую.

Хочу отметить огромную работу, проведенную в этом направлении, пользователем Farman Фактически это все его разработка, я лишь повторил его опыт с максимальным упрощением, тк моего опыта не хватало для полного воплощение в жизнь его проекта, да мне и не нужно было. Я взял только основные вещи. Ссылки на темы и приложения, созданные им:
"CarPC на базе Radxa" на Drive2
Подробнее на www.opel-insignia.su
Демо и полная версия программы под Android
И наконец его видео

Надо заметить, что я пошел немного другим путем почти во всем, поэтому пришлось во многом разбираться самостоятельно. В частности, кроме того что Farman использовал не Nexus7, а полноценный компьютер на Radxa, он так же использовал не Arduino, а ее клон Elduino CAN128, вот сайт разработчика, там же можно с ним связаться и приобрести данный микроконтроллер. Из отличий - это уже встроенный Canbus Shild, а так же Lin - что дает практически не ограниченные возможности в управлении автомобилем, в частности дает возможность например подключения штатных кнопок, и джойстика Insignii. Когда Farman воплотит это в жизнь, я наверно тоже подумаю о переходе на данный контроллер. Пока же я, как упоминал ранее, стараюсь пойти наиболее простым и универсальным путем.

Итак, после первоначальных опытов с Arduino, осталась одна Leonardo, и блютуз модуль к ней, с ними и будем работать.
Что бы снять лишние вопросы, покупал тут:
Leonardo R3 Pro Micro ATmega32U4
Wireless Serial 6 Pin Bluetooth RF Transceiver Module HC-05 RS232
CAN-BUS Shield В качестве канбас шилда Farman мне советовал CAN-BUS Shield от Seeedstudio , но меня задушила жаба, и я купил аналог от ElecFreaks в 2 раза дешевле, о чем и не жалею. Вот на него вся документация.

Рабочие заметки:
1. Макет для опытов.
Тк все хочу объединить в одной Ардуине, то для начала собрал копию блока питания на столе:
Источник 12в - аккумулятор от мото.
Преобразователь 12 в 5 использовал от разломанной автомобильной зарядки телефона.
Залил выше указанный скетч, все заработало.

2. Разберемся с подключением блютуза.
Подбирал Bluetoth модуль с индексом HC-05 (он имеет больший функционал чем 06, советовал его мне farman, вот тут можно по подробнее почитать).
Из имеющихся на Bluetoth модуле пинов, нам нужны только 4: питание "+" и "-", и сигналы "Rx" и "Tx". К сожалению штатно ее в Leonardo не воткнешь, поэтом припаиваем провода и подключаем "+" и "-" питания к 5-ти вольтам, а сигнальные выводы к аналогичным выводам Leonardo, только с перекрещиванием, те "Rx" подключаем к "Tx" и наоборот "Rx" подключаем к "Tx".
Заливаем скетч для проверки правильности подключения Bluetooth (внутри подробные комментарии):
Bluetooth_OK.rar
-Запитываем Arduino (можно по USB, подключив кабелем к компьютеру)
-Устанавливаем на телефоне или планшете простейший Bluetooth Terminal, заходим в настройки Bluetooth на Android, находим наше устройство, подключаем (попросит пароль - 0000 или 1234 или 1111 - пробуйте, как менять написано тут), далее заходим в Bluetooth Terminal, выбираем наше устройство и на экране должны побежать цифры счетчика.
-Посылаем символ "1" - видим загоревшийся диод на выводе 13 (он впаян в плату, можно и свой подключить к 13-му пину через резистор 1-10кОм на землю), посылаем "0" - диод гаснет. В общем смотрите скетч, там все описано.
Нажмите на изображение для увеличения
Название: IMG_20151108_183339_HDR.jpg
Просмотров: 1001
Размер:	173.8 Кб
ID:	41579,

Ну че, заработало? Поехали дальше

3. Подключаемся непосредственно к CAN
Отключаем все диоды, втыкаем Каншилд в Ардуину. Если разъемы не распаяны, то проследите, что бы соединились выводы питания 5в и gnd, пин 10 и шестиштырьковый разъем ICSP (там достаточно соединить только 4 вывода) Питать будем от USB.
Скетч к Леонардо с указанным выше Кан шилдом для работы на скорости 33.33 с Can-шиной. В нем все описано моими словами, так что не судите строго.
Работать можно с таким скетчем и через блютуз и юсб.
GMLAN_Leonardo_Podrobno.rar


Теперь подключение к машине:
Для тестов я соединял Can шилд с диагностическим разъемом авто, через вот такой кабель: OBD2 16Pin to DB9 Serial Port RS232 Adapter Connector Cable
Нажмите на изображение для увеличения
Название: rs2321.jpg
Просмотров: 1033
Размер:	68.1 Кб
ID:	41609
Он не имеет ни какой электроники, единственное, что нужно проверить, это соответствие пинов в машине, пинам в кабеле и соответственно в Can шилде:
1. Номера пинов кабеля со стороны шилда:
Название: rs232f9.jpg
Просмотров: 9924

Размер: 6.4 Кб
на самом шилде соответственно зеркальное отражение
2. Номера пинов диагностического разъема авто
Вид на разъем машины (или подключаемый разъем шнура со стороны пайки):
Название: opelobd.jpg
Просмотров: 9950

Размер: 17.8 Кб Нажмите на изображение для увеличения
Название: opel_insignia.jpg
Просмотров: 1283
Размер:	9.4 Кб
ID:	41611

3. Распиновка кабеля, обязательные пины выделены:
OBD II 16 Pin Connector ----------> RS232 9 Pin Connector
Pin 1 - SW-LS-CAN (33kB) ----------> Pin 3 - CAN H
or DW-FT-CAN (+) (<125kB)
для наших целей нужна именно эта шина и читать мы ее будем на скорости 33kB
Pin 2 - J1850 ----------> Pin 7 - не задействован
Pin 3 - MS-CAN (+) (95kB) ----------> не подключен
Pin 4 - Battery - (Chassis Ground), Pin 5 - Signal Ground ----------> Pin 2 Ground, Pin 5 CAN L
Шину мы читаем по CAN H, поэтому не задействованный CAN L заземляем, я это сделал внутри разъема OBD
Pin 6 - ISO 15765 HS-CAN (+) (500kB) ----------> не задействован
при работе с шиной 500kB, в разъеме ODB, провод припаянный к пину 3 перепаять на пин 6
Pin 7 - K-Line ----------> Pin 4 не задействован
Pin 8 не задействован ----------> Pin 6 не задействован
Pin 9 - DW-FT-CAN (-) (<125kB) ----------> не задействован
Pin 10 - PWM ----------> не задействован
Pin 11 - MS-CAN (-) (95kB) ----------> не задействован
Pin 12 - K-Line (KW82 Prot.) ----------> не задействован
Pin 13 - Reserved ----------> не задействован
Pin 14 - ISO 15765 HS-CAN (-) (500kB) ----------> не задействован
Pin 15 - L-Line ----------> Pin 8 не задействован
Pin 16 - Battery + (Constant 12V Power) ----------> Pin 9 Vin
Ардуино может питаться от сети машины через 9 пин, который через диод соединен с Vinn Leonardo. Но на сколько я энаю, это не рекомендуется, тк микроконтроллер расчитан на максимальное входное напряжение 12в, а напряжение в сети автомобиля доходит до 15в. Отключить питание от OBD можно переключателем на Can шилде.

Подключение на прямую без кабеля:
Используем контакты Can шилда с винтами:
CanH на Pin1 на OBD разъём машины при подключении к шине 33кб или к Pin6 при подключении к шине 500кб.
CanL соединить с GND леонардо или шилда и подключить на Pin4 на OBD

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

Если все соединили, то после подачи питания к Leonardo и соединения по USB или Bluetooth, увидим бегущие по шине данные. (смотреть в Bluetooth Terminal или мониторе порта приложения Arduino)
У меня выглядел девайс вот так:
Нажмите на изображение для увеличения
Название: IMG_20151111_225146_HDR.jpg
Просмотров: 1120
Размер:	50.4 Кб
ID:	41630Нажмите на изображение для увеличения
Название: IMG_20151111_225231_HDR.jpg
Просмотров: 1253
Размер:	54.5 Кб
ID:	41631
При подключении к шине 500кб, меняем подключение с пин 1 на пин 6 в разъеме OBD и меняем в скетче строку:
mcp2515_init(33, 0x00)
на
mcp2515_init(500, 0x00)


При монтировании в панель, подключиться можно к Модулю контроля кузова, BCM (body controle module)
Нажмите на изображение для увеличения
Название: 239a7a2s-480.jpg
Просмотров: 844
Размер:	43.9 Кб
ID:	41633


............ скоро продолжение .........

Последний раз редактировалось alexnf; 07.01.2017 в 12:25.
alexnf вне форума   Ответить с цитированием