Ребята помогите подключить датчики парковки от парктроника к ардуино

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

а может сейчас вывасти в сериал данные столбцами (7 столбцов) и в динамике посмотреть ? 

ustas
Offline
Зарегистрирован: 12.03.2012

Отличная идея. Надо будет скетч к этому приготовить (но это уже завтра).

Пока видится вот такая раскладка:

0 - B

1 - среднее CD?

2 - среднее AB?

3 - ??

4 - D

5 - A

6 - C

 

Догадки про "среднее" вроде как были похожи на правду, но для всех 4-х датчиков - не совсем сработали:

1 - среднее CD - получилось

2 - среднее AB - "не попал"

3 - среднее между всеми?

 

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

Как будут результаты - выложу тут.

 

Еще раз спасибо за помощь и направления мысли :)

ustas
Offline
Зарегистрирован: 12.03.2012

Новая порция данных (в динамике). 

Методика проста - все 4 датчика (A, B, C, D) расположены на одной планке. Между датчиками - около 30 см.

Планку (держу примерно за центр) подносил к стене на разные расстояния. Когда расстояние было мало - "покачивал" планкой (чтобы сначала один конец был ближе к стене, потом - другой).

Там где расстояние принимало значение 255 - приводится полный бинарный пакет (для понимания):

152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
152	149	152	145	151	152	149	
151	149	151	145	149	149	147	
147	146	146	143	149	144	143	
142	141	140	137	139	138	136	
135	133	133	127	130	129	126	
125	125	121	118	120	120	117	
117	115	115	104	112	112	103	
104	101	104	96	100	102	96	
101	99	103	95	99	102	96	
101	99	103	95	99	102	96	
101	99	103	95	99	102	96	
101	99	103	95	99	102	96	
101	99	103	95	99	102	96	
101	99	128	95	117	118	110	
111	105	104	95	99	96	95	
93	92	86	89	84	81	82	
80	79	77	76	75	75	75	
75	75	75	73	73	73	72	
72	71	70	69	67	67	66	
67	67	67	64	63	64	62	
64	62	63	59	59	60	57	
60	58	59	55	55	56	53	
55	55	54	53	51	51	51	
51	51	49	51	48	47	50	
49	49	47	51	47	47	50	
49	49	47	50	47	47	50	
49	49	47	50	47	47	50	
49	49	47	50	47	47	50	
49	49	47	50	47	47	50	
49	49	44	50	47	44	50	
48	49	39	50	47	40	50	
47	49	36	50	47	40	50	
46	49	34	68	47	40	50	
46	49	33	68	47	40	62	

0000 011 0 0111 01000 000	0	46
1000 011 0 1000 11000 000	1	49
0100 011 0 0000 01000 000	2	32
1100 011 0 0010 00100 000	3	68
0010 011 0 1111 01000 000	4	47
1010 011 1 1111 11110 000	5	255
0110 011 0 0111 11000 000	6	62

46	49	32	68	47	255	62	
46	57	32	68	47	255	62	
46	57	31	68	47	255	62	
46	57	31	68	47	255	62	
46	57	31	68	47	255	62	
46	57	31	68	47	255	62	
46	56	31	63	47	44	56	
46	54	31	56	47	44	52	
46	53	31	52	47	44	51	
46	53	56	49	47	44	49	
46	52	56	47	47	57	48	
56	52	56	44	47	57	45	
56	51	56	41	47	57	44	
56	50	56	38	47	57	41	
56	49	69	36	47	57	39	
56	48	69	34	47	57	38	
56	48	69	33	47	57	38	
56	48	69	32	47	57	38	
56	48	69	32	47	57	38	

0000 011 0 0001 1100 0000	0	56
1000 011 0 0000 1100 0000	1	48
0100 011 0 1010 0010 0000	2	69
1100 011 0 0000 0100 0000	3	32
0010 011 0 1111 0100 0000	4	47
1010 011 0 1010 0010 0000	5	69
0110 011 1 1111 1111 0000	6	255

56	48	69	32	47	69	255	
56	48	81	32	47	69	255	
56	48	80	32	55	69	255	
64	48	80	32	55	69	255	
64	48	80	32	55	69	255	
64	48	78	32	54	67	40	
60	48	69	32	52	62	40	
57	48	62	32	50	55	40	
52	48	54	32	45	49	40	
48	45	47	42	41	44	40	
43	42	42	40	41	44	40	
40	39	39	38	41	44	40	
37	37	37	37	41	44	40	

0000 011 0 0010 0100 000	0	36
1000 011 0 0010 0100 000	1	36
0100 011 0 1100 0100 000	2	35
1100 011 0 0010 0100 000	3	36
0010 011 1 1111 1111 000	4	255
1010 011 1 1111 1111 000	5	255
0110 011 1 1111 1111 000	6	255

36	36	35	36	255	255	255	
34	35	33	35	255	255	71	
33	34	32	34	65	49	66	
31	32	30	33	63	47	65	
31	31	16	32	62	47	63	
30	30	16	31	62	47	62	
30	30	16	31	62	47	62	
30	30	16	31	62	47	62	
30	30	16	31	62	47	62	
30	30	16	31	62	47	62	
30	30	16	31	62	47	62	
30	30	16	30	62	47	62	
30	30	16	16	62	47	62	
30	30	16	16	62	47	62	
30	30	16	16	62	54	62	
30	30	39	16	62	54	62	

0000 011 0 0111 1000 0000	0	30
1000 011 0 0111 1000 0000	1	30
0100 011 0 1110 0100 0000	2	39
1100 011 0 0000 1000 0000	3	16
0010 011 1 1111 1111 0000	4	255
1010 011 0 0110 1100 0000	5	54
0110 011 0 0111 1100 0000	6	62

30	30	39	16	255	54	62	
36	30	39	16	68	54	62	
36	30	37	16	68	54	62	
35	30	35	16	68	53	62	
35	30	35	16	68	53	62	
35	30	35	16	44	45	47	
35	30	35	56	44	45	47	
35	67	69	70	44	45	47	
78	80	83	84	85	87	88	
92	94	96	96	98	99	99	
101	101	103	96	98	99	99	
101	101	110	96	98	99	99	
101	101	119	96	98	99	99	
101	101	119	119	122	124	121	
122	120	119	118	122	123	121	
121	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120	
120	120	119	118	121	122	120

Видно, что "флаг" используется еще как индикация "аварийного состояния" (уперлись в преграду)

Ну и маленький листинг для ситуации, когда преграда далеко:

255	255	255	255	255	255	255	

0000 011 1 1111 1111 0000	0	255
1000 011 1 1111 1111 0000	1	255
0100 011 1 1111 1111 0000	2	255
1100 011 1 1111 1111 0000	3	255
0010 011 1 1111 1111 0000	4	255
1010 011 1 1111 1111 0000	5	255
0110 011 1 1111 1111 0000	6	255

255	255	255	255	255	255	255	
255	255	255	255	255	255	255	
255	255	255	255	255	255	255

Теперь осталось только выяснить последние детали про "средние" значения.. или там не средние?

Какие мысли по распределению параметров?

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

Уже интересней :)

Но методология измерений, выбраная вами не совсем удачна. 

Сделайте следующий 

1) все датчики подключены

2) получить данные для A с интервалом растояний 10 см от 20 до 100 см (остальные датчики 60 см)

3) сдеалть п.2 для B

4) сдеалть п.2 для C

5) сдеалть п.2 для D

При измерении, упирать датчики в стену или направлять в бесконечность не стоит, так как тогда результаты будут искажены (11111111)

 

 

ustas
Offline
Зарегистрирован: 12.03.2012

ух.. сделал по Вашей методике:

Три датчика из четырех на дистанции 0.6м от преграды. 

Двигаем датчик A:

1,3м		62	65	129	65	63	104	63
1.2м		62	65	118	65	63	99	63 
1.1м		62	65	110	65	63	95	63
1.0м		62	65	97	65	63	91	63
0,9м		62	65	94	65	63	85	63
0,8м		62	65	77	65	63	82	63
0,7м		62	65	65	64	63	72	63
0,6м		62	65	62	65	63	72	63
0,5м		62	65	57	65	63	69	63
0,4м		62	65	48	65	63	67	63
0,3м		62	65	38	65	63	63	63

Датчик A = 2?

Двигаем датчик B:

1,3м		126	65	62	65	91	96	63
1,2м		119	65	62	65	85	91	63
1,1м		112	65	62	65	85	91	63
1,0м		100	65	62	65	84	90	63
0,9м		90	65	62	65	81	87	63
0,8м		77	65	62	65	76	83	63
0,7м		68	65	62	65	72	80	63
0,6м		62	65	62	65	69	78	63
0,5м		56	65	62	64	68	76	63
0,4м		49	65	62	64	255	76	63
0,3м		38	65	62	64	255	255	63

Датчик B - 0?

Двигаем датчик C:

1,2м		65	120	62	65	95	63	88
1,1м		65	112	62	65	91	63	84
1,0м		65	104	62	65	89	63	82
0,9м		65	87	62	65	84	63	73
0,8м		65	83	62	65	77	63	67
0,7м		65	75	62	65	77	63	67
0,6м		65	65	62	65	72	63	84
0,5м		65	59	62	65	72	63	83
0,4м		65	44	62	65	127	63	75
0,3м		65	38	62	65	255	63	255

Датчик C - 1

Двигаем датчик D:

1,2м		65	65	62	122	64	63	84
1,1м		65	65	62	112	64	63	84
1,0м		65	65	62	99	64	63	79
0,9м		65	65	62	88	64	63	75
0,8м		65	65	62	78	63	63	71
0,7м		65	64	62	75	63	63	69
0,6м		65	64	62	62	63	63	119
0,5м		65	64	62	52	63	63	78
0,4м		65	64	62	48	63	63	76
0,3м		65	64	62	39	63	63	73

Датчик D - 3?

Еще интересно - датчики C и D (те, что должны быть расположены ближе к центру машины) - вызывают "ошибку" (значение 255 в одной или двух посылках)

Что-то я уже совсем запутался :)))
ustas
Offline
Зарегистрирован: 12.03.2012

В общем, похоже, что когда все 4 датчика подключены - картинка проясняется.

0 - B

1 - C

2 - A

3 - D

4 - ?

5 - ?

6 - ?

Это подтверждается, например при моей методике следущим пакетом (из предыдущего испытания):

56  48  69  32  47  57  38
 B   C   A   D   ?   ?   ?

При этом, если поставить значения удаленностей от датчиков по порядку (A-B-C-D) - получится соответственно, 69-56-48-32 - и это соответствует датчикам, расположенным на одной прямой (на планке) под углом к преграде (датчик D - ближе всех, A - дальше всех).

Теперь бы еще понять, что за параметры скрываются в посылках 4-5-6...

P.S. ну и понять логику обработки ситуаций, когда один или несколько датчиков не подключены (неисправны)...

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

С номерами датчиков согласен. Разовые выбросы на C и D - возможно глюки либо самого партроника либо ПО. Если их немного ИМХО можно пока не обращать внимание. (в посте #195 я этот вариант предлагал :) )

На последние 3 посылки предлагаю не обращать внимание, так как данных по датчикам у Вас достаточно. Остальную обработку можете уже делать самостоятельно. 

Контроль работоспособности датчика по флагу наличия данных (1 или нолик в посылке, кажется 8 бит с начала посылки). Если в 1 -> игнорируем датчик или выводим предупрежэдение и т.д. зависит от того где вы это хотите обрабатывать и куда выводить.

ustas
Offline
Зарегистрирован: 12.03.2012

а как быть, когда расстояние мало (или наоборот, очень велико) - при этом "флаг" ошибки взводится... 

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

Вы парктроник делаете или хотите для каких то других задач датчики использовать ?

В любом случае флаг возводится когда партроник не может предоставить правильные данные. А не правильные данные считаем ошибкой. Фактически, если флаг возведен то данным мы не верим... Особенность работы. Просто контроля работоспособности датчика здесь похоже не предусмотренно.

ustas
Offline
Зарегистрирован: 12.03.2012

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

И "контроль" работоспособности - есть. Если отключить любое количество датчиков (к примеру, два) - при включении парктроника на штатном дисплее на долю секунды появится надпись "E2", что как-бы указывает, что контроль-таки есть...

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

Возможно, информация о подключении датчиков, передается в момент включения системы, отдельным пакетом. 

ustas
Offline
Зарегистрирован: 12.03.2012

Собственно, вот так получилось пока: https://www.youtube.com/watch?v=gyNNjQz3kfI

Creat0r
Offline
Зарегистрирован: 23.01.2015

Привет всем!

Как-то у вас всё просто. Как вам такой вариант?

Парктроник Airline APS-WL-04. Сигнал беру с входа передатчика. Сначала несколько синхронизирующих импульсов (по 0.4 мс), затем 2х16 бит данных (синяя линия):

Написал декодер бит (красная линия - как раз отладка декодера на ардуинке). Подразумевая, что широкий импульс (0.66 мс) - ноль, узкий (0.33 мс) - единица. И в конце ещё один импульс 0.4 мс.

Вот немного декодированных данных. Подключен только сенсор А:





      32bitHEX              cm
Got: .3939C932 - sensor A - INF
Got: .19292952 - sensor A - 109
Got: .2909E952 - sensor A - 107
Got: .29192952 - sensor A - 106
Got: .29296952 - sensor A - 105
Got: .2939A952 - sensor A - 104
Got: .39092952 - sensor A - 103
Got: .39196952 - sensor A - 102
Got: .3929A952 - sensor A - 101
Got: .3939E952 - sensor A - 100
Got: .19293962 - sensor A - 99
Got: .19397962 - sensor A - 98
Got: .2909F962 - sensor A - 97
Got: .29193962 - sensor A - 96
Got: .29297962 - sensor A - 95
Got: .2939B962 - sensor A - 94
Got: .39093962 - sensor A - 93
Got: .39197962 - sensor A - 92
Got: .3929B962 - sensor A - 91
Got: .3939F962 - sensor A - 90
Got: .19294972 - sensor A - 89
Got: .19398972 - sensor A - 88
Got: .29090972 - sensor A - 87
Got: .29194972 - sensor A - 86
Got: .29298972 - sensor A - 85
Got: .2939C972 - sensor A - 84
Got: .39094972 - sensor A - 83
Got: .39198972 - sensor A - 82
Got: .3929C972 - sensor A - 81
Got: .39390972 - sensor A - 80
Got: .19295982 - sensor A - 79
Got: .19399982 - sensor A - 78
Got: .29091982 - sensor A - 77
Got: .29195982 - sensor A - 76
Got: .29299982 - sensor A - 75
Got: .2939D982 - sensor A - 74
Got: .39095982 - sensor A - 73
Got: .39199982 - sensor A - 72
Got: .3929D982 - sensor A - 71
Got: .39391982 - sensor A - 70

Некоторая система просматривается - данные размазаны по верхним 4-битным нибблам каждого байта. У нибблов первых двух байт почему-то есть соответствие с единицами сантиметров независимо от десятков.

Пробовал сделать эмулятор парктроника, чтобы скармливать экранчику произвольные наборы байт. Оказалось, что экранчик тупо гаснет, если посылка не соответствует каким-то его внутренним критериям.

В ближайшее время срисую посылки при подключении по одному остальных датчиков и их сочетаний.

Если кто-нибудь уже видит систему - делитесь :)

Creat0r
Offline
Зарегистрирован: 23.01.2015

Немного дополню широту китайской мысли:



3939B922 - no sensors
3939C932 - sensor A
3979BA22 - sensor B
7939BA22 - sensor C
3939BA23 - sensor D
3979CA32 - sensor A+B
7979BB22 - sensor B+C
7939BB23 - sensor C+D
3939CA33 - sensor A+D
7979CB32 - sensor A+B+C
7979BC23 - sensor B+C+D
7979CC33 - sensor A+B+C+D

подключал по очереди датчики, показания всё время "бесконечность". В общем по первому впечатлению - не то, что отдельные нибблы, а все биты перемешаны. По датчику А 1й ниббл 3го байта похож на некую контрольную сумму. 1й ниббл 4го байта - соответствует десяткам сантиметров (только наоборот). При этом по датчику B десяткам соответствует 2й ниббл 3го байта:



Got: .3979BA22 - sensor B INF
Got: .1D690A22 - sensor B 109
Got: .1D794A22 - sensor B 108
Got: .2D49CA22 - sensor B 107
Got: .2D590A22 - sensor B 106
Got: .2D694A22 - sensor B 105
Got: .2D798A22 - sensor B 104
Got: .3D490A22 - sensor B 103
Got: .3D594A22 - sensor B 102
Got: .3D698A22 - sensor B 101
Got: .3D79CA22 - sensor B 100
Got: .1DA90B22 - sensor B 98
Got: .1DB94B22 - sensor B 98
Got: .2D89CB22 - sensor B 97
Got: .2D990B22 - sensor B 96
Got: .2DA94B22 - sensor B 95
Got: .2DB98B22 - sensor B 94
Got: .3D890B22 - sensor B 93
Got: .3D994B22 - sensor B 92
Got: .3DA98B22 - sensor B 91
Got: .3DB9CB22 - sensor B 90
Got: .1DE90C22 - sensor B 89
Got: .1DF94C22 - sensor B 88
Got: .2DC9CC22 - sensor B 87
Got: .2DD90C22 - sensor B 86
Got: .2DE94C22 - sensor B 85
Got: .2DF98C22 - sensor B 84
Got: .3DC90C22 - sensor B 83
Got: .3DD94C22 - sensor B 82
Got: .3DE98C22 - sensor B 81
Got: .3DF9CC22 - sensor B 80

Есть предположение, что десятки см идут со всех датчиков, а единицы - только с того, на котором меньшие показания. Тогда 32 бит хватит на все датчики и на контрольную сумму и на кучу статусных битов.

Creat0r
Offline
Зарегистрирован: 23.01.2015

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


 

Creat0r
Offline
Зарегистрирован: 23.01.2015

Данные по датчику А с вкраплениями подключения датчика B, подтверждающими, что единицы сантиметров кодируются для ближайшего датчика:

крайние справа 4 бита кодируют десятки сантиметров для датчика А. Бледно-зеленые, похоже, десятки см датчика B (или какую-то типа разницу от датчика А). Контрольные суммы по-прежнему контрольные.

Creat0r
Offline
Зарегистрирован: 23.01.2015

А вот подключен только датчик B. Его десятки см почему-то разбросаны по двум нибблам. Единицы см на своих местах.

Кстати, 1111 в битах единиц см означают, похоже, достигнутый минимум или максимум расстояния. А отмеченный тёмно-зеленым столбец - видимо, дополнительный бит для датчика B (у C тоже есть), позволяющий отображать большие, чем у крайних датчиков, расстояния.

Creat0r
Offline
Зарегистрирован: 23.01.2015

Ну в общем и целом протокол раскопан, на данный момент. Кода для ардуинки не выложу, т.к. расшифровывать буду уже на хосте.

По контрольным суммам, если пронумеровать 32 бита, то суммируются 4-битные значения с отбросом бит переполнения по следующим формулам:

CRC1 (биты 20,19,18,17) = (16,15,2,1) + (10,9,8,7) + (28,27,26,25) - 1

CRC2 (биты 24,23,22,21) = (6,5,4,3) + (14,13,12,11) + (32,31,30,29) - 11

где CRC - Chinese Redundancy Check

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

alehandr0
Offline
Зарегистрирован: 07.03.2015

Ты не думай, Креатор, что спасибо уже сказать некому за твои нолики-единички... Спасибо!

alehandr0
Offline
Зарегистрирован: 07.03.2015

Но прицепить парктрониковские датчики к ардуине напрямую не решаемая задача, как я понял... Да?(( На и-бэе есть вот такие дорогущие модули: http://www.ebay.com/itm/Ultrasonic-Module-Distance-Measuring-Transducer-... , а все привыкли к HC-SR04 за 1$. Диссонанс!

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Дико дорогущие, почти 13 уе, и главное что, гады, 4 штуки датчиков кладут, плату в коробку ставят, питание ей обеспечивают от 9-ти до 16-ти Воль, индикатор зачем-то на длиннющем кабеле и с пищалкой внутри.

http://www.ebay.com/itm/Car-Rear-View-Reverse-Radar-System-Kit-Sound-Ale...

Издеваются прямо,  нет слов какие подлецы! И зачем-то сверло никуда не годное..... ;)

uchar
Offline
Зарегистрирован: 07.05.2015

А может кто-нибудь объяснить строки из кода ув. ustas'a?

  attachInterrupt(1, isr_CS, CHANGE);

Перед началом работы главного цикла программы настраиваем работу прерывания INT1 - проверяем линию CS.

Сам обработчик:

void isr_CS(){
  // когда CS прижат к земле - включаем обработчик прерываний на D2
  if (waitCS == true) {
    // взведем прерывание 0
    attachInterrupt(0, isr_DATA, RISING);
  }
  else {
    // уберем обработчик прерывания 0
    detachInterrupt(0);
  }
  // инвертируем значение флага
  waitCS =! waitCS;
}

Не понимаю логику работы :(

Обработчик будет вызываться при любом изменении состояния линии CS. Предположим, что изначально переменная WaitCS была false.

Тогда при появлении низкого уровня на линии CS попадаем в обработчик, отключаем прерывание INT0, в WaitCS пишем true и выходим из обработчика.. В следующий раз попадем в обработчик при появлении высокого уровня на линии CS, настроим обработку прерывания INT0, но данных уже не будет - ведь линия CS имеет высокий уровень..

Mistiword
Offline
Зарегистрирован: 26.09.2015

Всем привет.

Разрешите поучаствовать

Mistiword
Offline
Зарегистрирован: 26.09.2015

У меня схожая задача.

Посвятите в наработки. Я тоже хочуподключится к парктронику.

Только у меня 8 датчиков и 4 входа.

Я хочу сзади поставить 4 и по бортам по два и выводить все на монитор.

У меня 4 провода соединяют блок и табло.

протокол обмена мне не известен.

Планирую в выходные поработать над этим.

Кто нибудь выяснил что за микросхема стоит там?

 

Mistiword
Offline
Зарегистрирован: 26.09.2015

у меня блок и табло соединены 4 проводами:

1. красный 5В

2. черный общий

3. зеленый зуммер

4. белый сигнал

пошел писать прогу по считыванию посылки

 

Mistiword
Offline
Зарегистрирован: 26.09.2015

тихо сам с собою веду я разговор

закрывайте тему

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну спасибо что разрешил)))

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

Mistiword пишет:

тихо сам с собою веду я разговор

закрывайте тему

тема закрывается - всем покинуть тему.

Baikan4ik
Offline
Зарегистрирован: 10.10.2016

Добрый день. Остался ли код для parkmaster 4dj-06?

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Я не помню какой у меня был парктроник( Щас гляну че есть у меня.

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013
#include <string.h>

const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 5;
const int buttonPin5 = 6;
const int buttonPin6 = 7;
const int buttonPin7 = 8;    // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

//переменные-----------------------------------------------------------------------------------
char unitID_in[10];
char command_in[10];
char data_in[100];

//инициализируем------------------------------------------------------------------------------
void setup() 
{
Serial.begin(9600);
  pinMode(buttonPin1, INPUT);  
  pinMode(buttonPin2, INPUT); 
  pinMode(buttonPin3, INPUT); 
  pinMode(buttonPin4, INPUT); 
  pinMode(buttonPin5, INPUT); 
  pinMode(buttonPin6, INPUT); 
  pinMode(buttonPin7, INPUT);   
}

//основной цикл программы------------------------------------------------------------------------ 
void loop() {  
//-----------------------------ПОЛУЧЕНИЕ ДАННЫХ И ОБРАБОТКА------------------------------------------------
  int i=0;
  char buffer[100];
  if(Serial.available()){                                            //если есть данные - читаем
  delay(100);                                 
  while( Serial.available() && i< 99) {buffer[i++] = Serial.read();} //загоняем прочитанное в буфер
  buffer[i++]='\0';                                                  //закрываем массив
  }
  if(i>0){sscanf(buffer, "%[^','],%[^','],%s", &unitID_in, &command_in, &data_in);} //если буфер наполнен
   
//Исполнительная часть
    if ((String)unitID_in == "X"){  //test serial read
    if (digitalRead(buttonPin7) == HIGH){Serial.println('X');}; 
    unitID_in [0] = '\0';    
    }
    if ((String)unitID_in == "K"){  //test serial read
    if (digitalRead(buttonPin6) == HIGH){Serial.println('K');}; 
    unitID_in [0] = '\0';    
    }
    if ((String)unitID_in == "Ka"){  //test serial read
    if (digitalRead(buttonPin5) == HIGH){Serial.println('Ka');}; 
    unitID_in [0] = '\0';    
    }
    if ((String)unitID_in == "L"){  //test serial read
    if (digitalRead(buttonPin4) == HIGH){Serial.println('L');}; 
    unitID_in [0] = '\0';    
    }
    if ((String)unitID_in == "d"){  //test serial read
    if (digitalRead(buttonPin3) == HIGH){Serial.println('2');}; 
    if (digitalRead(buttonPin2) == HIGH){Serial.println('3');}; 
    if (digitalRead(buttonPin1) == HIGH){Serial.println('4');}; 
    unitID_in [0] = '\0';    
    }
//конец-------------------------------------------------------------------------------------
}

 

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Это код для радар детектора не то сори щас кину для парктроника че есть

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013
#include <TimerOne.h> 

#define LEDPIN 13        // Вывод светодиода 
#define BTNPIN 2  

#define BUFFER_LENGTH 100 

volatile uint16_t startImpuls; 
volatile uint16_t lengthImpuls; 
volatile uint16_t timerCount=0; 

byte buffPos = 0; 
byte Buffer[BUFFER_LENGTH]; 

byte packet[4]; 
byte posInPacket=0; 

byte startBYTE = 15; 

void setup() 
{  /* 
    LOW — вызов прерывания всякий раз, когда на порту низкий уровень напряжения; 
    CHANGE – прерывание вызывается при изменении значения на входе; 
    RISING – вызов прерывания при изменении уровня напряжения с низкого (LOW) на высокое(HIGH) 
    FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкое (LOW) 
  */ 
  startImpuls=0; 
  lengthImpuls=0; 
   
  pinMode(BTNPIN, INPUT);   
   
  for(int i=0; i< BUFFER_LENGTH; i++) 
    Buffer[i]=0; 
     
  Serial.begin(115200); 
   
  Timer1.initialize(20); 
  Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt 

  attachInterrupt(0, fireUp, RISING); 
} 
void callback() {  timerCount++; } 

void loop() 
{ 
  if (lengthImpuls > 0) 
  { 
    uint16_t temp=0; 
    uint16_t li = lengthImpuls; 
    lengthImpuls=0; 
     
    //--------------------------// 
    // получена приамбула "1 1 1 1" 
    if (li >50 && li <60) 
    { 
       posInPacket =0; 
    } 
    // Расчитываю позицию массиве 
    temp = posInPacket / 8; 
    uint16_t bitPos = posInPacket; 
    // Разворачиваю позицию для метода bitSet(x,n) 
    bitPos = 7 - bitPos; 
    if (bitPos >= 8) 
    { 
      bitPos =  posInPacket - (8*temp); 
    } 
    
    // Получен "0" 
    if (li >4 && li <6) 
    { 
      posInPacket ++; 
    } 

     // Получен "1" 
    else if (li >10 && li <15) 
    { 
      bitSet(packet[temp],bitPos); 
      posInPacket ++; 
    } 
    //digitalWrite(13,LOW); 
    // Отправить пакет "большему брату" 
    if (posInPacket > 15) 
    { 
      detachInterrupt(0); 
    //  Serial.println("------"); 

      for(int i=0; i<4; i++) 
      { 
        Serial.print(packet[i], BIN); 
        Serial.print(" "); 
        packet[i]=0; 
      } 
      Serial.println(""); 
      posInPacket = 0; 
      attachInterrupt(0, fireUp, RISING); 
    } 
     
    //--------------------------// 
  } 
 } 

// Функция обработки прерывания на подъем 
void fireUp() 
{ 

  detachInterrupt(0); 
  startImpuls = timerCount; 
  attachInterrupt(0, fireDown, FALLING); 
} 

// Функция обработки прерывания на подъем 
void fireDown() 
{ 
  detachInterrupt(0); 
  lengthImpuls = timerCount - startImpuls; 
  startImpuls=0; 
  timerCount=0; 
  attachInterrupt(0, fireUp, RISING); 
}  

 

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Последний код у меня работал 100 проц. Если кому надо. Получал пакеты обрабатывал и уже принимающая прогармма делала свое дело. Эт очисто скетч для считывания преобразования в числовые переменные по которым уже прогармма разбирала пакет и понимала с какойго датчика какое расстояние. ПРограмма на делфе была

Baikan4ik
Offline
Зарегистрирован: 10.10.2016

Спасибо. Думаю по аналогии получится, раз ustas от него отталкивался

Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

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

Baikan4ik
Offline
Зарегистрирован: 10.10.2016

Да, но тайминги свои только поставить, я так понимаю?

Baikan4ik
Offline
Зарегистрирован: 10.10.2016

Данные получил кодом ustas, шина spi потому что. Н, к сожалению, данные передаются ттолько о ближайшем препятствии с правой и левой стороны, а данных по конкретному датчику нет

vb
Offline
Зарегистрирован: 15.09.2016

Можно использовать для парктроника дешевый датчик HC-SR04. Вот крутой проект своими руками на Arduino.

Baikan4ik
Offline
Зарегистрирован: 10.10.2016

Вы считаете, что лучше в бампере 8 отверстий сделать вместо 4?

Zom
Offline
Зарегистрирован: 20.04.2017

https://habrahabr.ru/sandbox/87055/ тут вот он с экраном и пищалкой как то сделал.

Baikan4ik
Offline
Зарегистрирован: 10.10.2016

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Мало того, их еще и защищать надоть. От воды и грязи.

b707
Offline
Зарегистрирован: 26.05.2017

Baikan4ik пишет:
А вы бы себе в машину поставили такую систему?) Вышеуказанные коды рабочие, после прочтения темы сложностей не возникло. А эти модули для ардуино использовать разве что там, где их не видно человеку

да в практическом плане ни один из этих вариантов смысла не имеет, все равно покупной парктроник будет в разы надежнее. А с учетом потраченного времени - и дешевле. ИМХО, жалко тратить столько времени на то, что давно придумано и продается на каждом углу за совсем небольшие деньги . Лучше делать что-то новое, чего у других нет.

Ну или только в образовательных целях... но это скучно

Baikan4ik
Offline
Зарегистрирован: 10.10.2016

Насчёт практического применения не совсем согласен. У меня штатный монитор в машине, заменил его на nexus 7, написал софт под андроид и ардуино и на выходе имею красивое отображение данных на экране в виде зон...ну как на Ауди, Фольксваген

Претензия к тому, чтобы не лениться и использовать модули, а посидеть немного и заставить работать штатные датчики парктроника

b707
Offline
Зарегистрирован: 26.05.2017

Baikan4ik пишет:
Насчёт практического применения не совсем согласен. У меня штатный монитор в машине, заменил его на nexus 7, написал софт под андроид и ардуино и на выходе имею красивое отображение данных на экране в виде зон...ну как на Ауди, Фольксваген Претензия к тому, чтобы не лениться и использовать модули, а посидеть немного и заставить работать штатные датчики парктроника

согласен, это интереснее

dreamwait
Offline
Зарегистрирован: 09.06.2014

Baikan4ik пишет:
Насчёт практического применения не совсем согласен. У меня штатный монитор в машине, заменил его на nexus 7, написал софт под андроид и ардуино и на выходе имею красивое отображение данных на экране в виде зон...ну как на Ауди, Фольксваген Претензия к тому, чтобы не лениться и использовать модули, а посидеть немного и заставить работать штатные датчики парктроника

 

софтом не поделишься? Тоже Нексус стоит...

Baikan4ik
Offline
Зарегистрирован: 10.10.2016

Напиши на почту. baikan4ik@gmail.com.

OrDer
Offline
Зарегистрирован: 15.10.2017
Чтобы новую тему не создавать, отпишу в этой. ( оч. близкая по вопросу, но ответа именно на свой вопрос в ней не нашол).
А вопрос такой:
 
Преамбула:
 
готовится ТЗ на тележку, которая ездиит туда-сюда. 
Т.к. ездиит на улице, то водостойкость имеет значение. Свет тоже не должен помех создавть. Одним словом, по всему, оптимален ультразвуковой датчик, чтото вроде HC-SR04.
Какраз потому, что HC-SR04 исполнены сразу на плате, их размещение в виде плат по сторонам тележки неудобно. Тут надо илибо видимо излучатели выпаивать а саму схему прятать кудато в общее защищенное место к остальным мозгам. Но по водостойкости это проблему не решит все равно. Короче, HC-SR04 не айс.
Есть также и уже влагозащищенные ардуиносовместимые такие штуки как герметичный JSN-SR04T (излучатель отдельно от платы на кабеле - видимо на базе сонара для парктроника). Это почти то что надо, но недешево (цена за шт.)даже на али. А с учотом, что их понадобится 5 шт. ( слишком узкий угол направленности), то и подавно.
Не совсем эстетично и ставить кучу отдельных управляющих сенсором плат. 
Т.е. пока отложил эту железку на крайний случай.
 
И наконец, есть сенсоры для парктроников или весь в комплекте ( и не только на 4 но и на 6 сенсоров), что весьма уже приемлемо по цене. Вопрос в том, как подрубить данные с этих сенсоров собсно к ардуине ( без всяких дисплеев и лед-индикаторов ) и, таким образом, получить весьма  бюджетное комплектное решение для вышеописанной задачи.
Другой вариант - приобретение отдельно самих пищалок-приемников (тоже идут комплектами по 4-6 шт.)  и гдето отдельно либо готовая либо сделанная на заказ, единая плата для всех этих датчиков ( включая генератор сигнала и усилитель), которую уже можно подрубить непосредственно к ардуине.
 
Подытоживая:
 
буду благодарен за инфу (если кому то чтото встречалось) по обслуживанию нескольких влагозащищенных УЗ-дальномеров или опыт по прикручиванию существующих парктрониковых комплектов к ардуине.
 
Seltvik
Seltvik аватар
Offline
Зарегистрирован: 24.10.2013

Странно что вы ничего не нашли в теме))) Читайте еще раз значит) ТА все это есть. Т.е. у меня был парктроник (не важно какой) так как у всех принцип один и тот же. И за место дисплея мне надо было читать данные с каждого датчика и выводить на компьютер как бы. У Вас все еще проще Вам не надо выводить на компьютер а сразу обрабатывать в дуне. Так что дерзайте. берите парктроник читайте его сигналы. ПОтом разжевывайте их и берите которые скетчи и подпиливайте под Ваш парктроник. Все просто в реальности. НО ЕСЛИ ЧЕСТНО. На вашем месте я бы купил готовые с выносным датчиком. Я брал такие вот последние разы для тех проектов которые на улице: https://ru.aliexpress.com/item/Integrated-Ultrasonic-Module-Distance-Measuring-Sensor-Module-Reversing-Radar-Waterproof/32312190912.html?ws_ab_test=searchweb0_0,searchweb201602_0_10152_10065_10151_10344_10068_10345_10342_10343_10340_10341_10543_10541_10562_10084_10083_10307_10301_10539_10312_10059_10313_10314_10534_10533_100031_10211_10604_10603_10103_10128_10129_10594_10557_10596_10595_10142_10107,searchweb201603_14,ppcSwitch_0&algo_expid=9d374039-d445-4afc-a4fe-45ebf669f534-0&algo_pvid=9d374039-d445-4afc-a4fe-45ebf669f534&rmStoreLevelAB=0

Так как с парктроником надо будет повтыкаться и в моем случии все равно 100 проц работы не было. Т.е. бывали ложные сигналы.