Стеклоподъемники с сенсорными кнопками.
- Войдите на сайт для отправки комментариев
У меня ваз 2106. Вообще, идея пришла ко мне, где то, за пару недель до просмотра, вот этого видео.
http://www.youtube.com/watch?v=PrvyvyRhAYw
Я уже могу запускать, глушить автомобиль с голосовых команд.
http://www.youtube.com/watch?v=x8XzUHNXHPM
На данный момент, я могу управлять светом, открытием багажника и делать mute, на магнитоле, раньше я делал все это с голосовых команд, но после добавления (блю тус) БТ и небольшого изменения скетча, я смог все это делать и с телефона. В будущем я смогу управлять мультимедийными функциями, заводить, глушить автомобиль (для демонстрации потом отключу в целях безопасности). Расстояние на открытой месности 4-10 метров.
Стеклоподъемники, я мог бы реализовать и на обычных вазовских кнопках, но не устраивают габариты. При продумывании алгоритмов работы, пришел к выводу, что получится, что то типо, блока комфорта, как на приорах или VW
алгоритмы следующие:
На каждой двери по 2 кнопки, на водительской 3. Все работает без зажигания. При кратковременном нажатии на 3-ю кнопку, я переключаю управление с водительской двери на пассажирскую и т. д. по часовой стрелке. Все это сопровождается сведовой индикацией, на панели приборов (диод), а при длителном нажатии, более 3-х секунд, автомотическое поднятие 3-х стекол, с их блокировкой. По БТ я смогу поднимать стеклоподъемники по сторонам или опускать их (только крайние положения), естесственно при постановке на сигнализаыию, все стекла понимаются.
Ардуино будет контролировать только кнопки и будет связанна с другой ардуинкой, по тх и рх, которая в свою очередь, контролирует БТ, модуль распознования голоса и сдвиговый регистр.
При движении автомобиля, с телефона, можно будет управлять только мультимедиа и стеклоподъемниками
Что за голосовой модуль?
Привет Omigovolt!
Делись какой модуль и тд))
тоже обдумываю подобную штуку в машину что бы можно было голосом управлять и еще интересные плюшки какие нибудь.
у меня ваз 2109.
С радостью объединил бы усилия в таком эксклюзивном деле)
http://compcar.ru/forum/showthread.php?t=9067
там все
Ок, почитаю 25 страниц флуда ради одного названия
Модуль вроде такой у товарища http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=168_170&products_id=2151
Все это будет стоять в автомобиле самый длинный провод будет 6 метров. Вопрос мне поставить конденсатор как на картинке (указан пунктиром) или поставить экранированные провода, что бы небыло наводок?
Все это будет стоять в автомобиле самый длинный провод будет 6 метров. Вопрос мне поставить конденсатор как на картинке (указан пунктиром) или поставить экранированные провода, что бы небыло наводок?
и, себя заземлить на корпус автомобиля,.. что бы наводок не было - цирк получится, детям поиграться
от сенсорных кнопок даже на бытовой аппаратуре производители давно отказались из-за невнятного их срабатывания, тем более на серьёзном оборудовании.
сенсорными телефонами пользуются все!
сенсорными телефонами пользуются все!
вот и ставьте сенсорную панель на кнопку, как у сенсорного телефона, вместо обкладки конденсатора
[освобождаю андроидов из телефона - свободу роботам!]
Попробывал поработать с 6-ю метрами провода))) Приобрел в радио магазине экранированный многожильный провод написал простейший скетч. На просторах интернета нашел даташит на at42qt1010 (одноканальный емкостный датчик)
и в даташите выяснил емкости конденсаторв Сs от 2 до 50 nF и Cх от 2 до 50 pF
в своем случае я взял Сх 5 pF
провод у меня 4-х жильный 3 жилы я замкнул на массу и оставил только одну а ее через конденсатор на массу.
http://youtu.be/7W_4EfdcxyY
01
#include <CapacitiveSensor.h>
02
int
Light = 12;
03
CapacitiveSensor Sensor1 = CapacitiveSensor(4,2);
// назначить пины для сенсора
04
05
void
setup
()
06
{
07
Serial
.begin(115200);
// настроить скорость порта
08
pinMode(Light, OUTPUT);
09
}
10
11
void
loop
()
12
{
13
long
temp1 = Sensor1.capacitiveSensor(30);
// измерить емкость и сохранить в temp1
14
15
16
if
(temp1 > 1000)
// изменяя значение 60 мы регулируем чуствительность сенсора
17
{ digitalWrite(12, HIGH); }
// включить светодиод
18
else
{ digitalWrite(12, LOW); }
// выключить светодиод]
19
20
21
22
Serial
.println(temp1);
// для клибровки вашего датчика // или для использования этого значения в компьютере
23
24
}
в видео видно на мониторе порта что при косаниях число возростает от 150 до 9 тысяч когда провод я держал в руке то чисто было где то 150 может чуть больше когда я его положил то от 25 до 80 а потом я положил локоть на все провода число поднялось
опять где то до 150 я считаю что это не значительные наводки по с равнению с прикосноыением тем более что провод будет растянут )))
так же я эксперементировал с 2-мя жилами в одном экране так не получается так как один провод даст наводку на дргой внутри экрана и загорятся 2 диода одновременно. Продолжаем эксперементировать)))
Пересмотрел общую схему работы. От доводчиков придется отказаться так как не удовлетворяют они моим требованиям. Да и поиграться с таймерами можно будет на данный момент выкладываю общую схему.
Не забывайте также о ёмкости кабеля...
Electrical characteristics for Cat 5e UTP
.............................
................................
trembo спасибо хочу попробывать вообще без конденсатора на конце и посмотреть значения
а вы работали с емкостными датчиками?
Появился вопрос так как у меня функция автомата будет присутствовать на всех 4 подъемниках и вверх и вниз нужно это как то контролировать на данный момент склоняюсь к
вопрос кто с ними работал если я его поставлю в одну из цепей и буду пускать ток согласно схеме он покажет одно значение а если я пусчу ток в обратном направлении значения поменяются т. е. они будут со знаком минус или нет? по аналогии с цифровым амперметром.
Он при нулевом протекающем токе показывает половину напряжения. Потек ток в одну сторону, пошел рост напряжения от половины вверх. Если ток изменил направление, то напряжение на сенсоре пошло вниз.
наконец определился с датчиком ACS706ELC-20A
думаю 20 ампер на один мотор будет с запасом да же при условии нагрузки можно было конечно взять 15 А но я чуть подстраховался да и размеры у него по меньше чем у предыдущего)
вопрос хочется сделать кнопки многофункциональными например что бы у меня работал двойной клик или зажатие более 1 секунды это можно сделать при помощи функции Millis или ввести таймер хотел узнать ваше мнение что проще в плане кода и где я смогу поэксперементировать с долями секунд (пауза между двумя нажатиями) ?
Наконец решена задача по многофункциональности на нглийской версии сайта Arduino наткнулся а точнее меня туда завел поиск на статью по многофункциональности там она называлась мультиклик
http://forum.arduino.cc/index.php/topic,14479.0.html
оставалось только совместить все это в один скетч
спасибо огромное manu_245 с сайта http://compcar.ru/ которы помог мне это сделать
в итоге я получил именно то что хотел это двойной клик и зажатие в данном скетче все работает с обыкновенной кнопкой
осталось поэксперементировать с сенсором
001
/* 4-Way Button: Click, Double-Click, Press+Hold, and Press+Long-Hold Test Sketch
002
003
By Jeff Saltzman
004
Oct. 13, 2009
005
006
To keep a physical interface as simple as possible, this sketch demonstrates generating four output events from a single push-button.
007
1) Click: rapid press and release
008
2) Double-Click: two clicks in quick succession
009
3) Press and Hold: holding the button down
010
4) Long Press and Hold: holding the button for a long time
011
*/
012
013
#define buttonPin 19 // analog input pin to use as a digital input
014
#define ledPin1 18 // digital output pin for LED 1
015
#define ledPin2 17 // digital output pin for LED 2
016
#define ledPin3 16 // digital output pin for LED 3
017
#define ledPin4 15 // digital output pin for LED 4
018
019
020
// LED variables
021
boolean ledVal1 =
false
;
// state of LED 1
022
boolean ledVal2 =
false
;
// state of LED 2
023
boolean ledVal3 =
false
;
// state of LED 3
024
boolean ledVal4 =
false
;
// state of LED 4
025
026
// Button timing variables
027
int
debounce = 20;
// ms debounce period to prevent flickering when pressing or releasing the button
028
int
DCgap = 250;
// max ms between clicks for a double click event
029
int
holdTime = 1000;
// ms hold period: how long to wait for press+hold event
030
int
longHoldTime = 3000;
// ms long hold period: how long to wait for press+hold event
031
032
033
034
035
int
checkButton();
036
037
038
// Button variables
039
boolean buttonVal = HIGH;
// value read from button
040
boolean buttonLast = HIGH;
// buffered value of the button's previous state
041
boolean DCwaiting =
false
;
// whether we're waiting for a double click (down)
042
boolean DConUp =
false
;
// whether to register a double click on next release, or whether to wait and click
043
boolean singleOK =
true
;
// whether it's OK to do a single click
044
long
downTime = -1;
// time the button was pressed down
045
long
upTime = -1;
// time the button was released
046
boolean ignoreUp =
false
;
// whether to ignore the button release because the click+hold was triggered
047
boolean waitForUp =
false
;
// when held, whether to wait for the up event
048
boolean holdEventPast =
false
;
// whether or not the hold event happened already
049
boolean longHoldEventPast =
false
;
// whether or not the long hold event happened already
050
051
052
//=================================================
053
054
void
setup
() {
055
// Set button input pin
056
pinMode(buttonPin, INPUT);
057
digitalWrite(buttonPin, HIGH );
058
// Set LED output pins
059
pinMode(ledPin1, OUTPUT);
060
digitalWrite(ledPin1, ledVal1);
061
pinMode(ledPin2, OUTPUT);
062
digitalWrite(ledPin2, ledVal2);
063
pinMode(ledPin3, OUTPUT);
064
digitalWrite(ledPin3, ledVal3);
065
pinMode(ledPin4, OUTPUT);
066
digitalWrite(ledPin4, ledVal4);
067
068
069
070
}
071
072
void
loop
()
073
074
{
075
int
b = checkButton();
076
077
if
(b == 1) clickEvent();
078
if
(b == 2) doubleClickEvent();
079
if
(b == 3) holdEvent();
080
if
(b == 4) longHoldEvent();
081
}
082
// Get button event and act accordingly
083
084
int
checkButton()
085
{
086
int
event
= 0;
087
buttonVal = digitalRead(buttonPin);
088
089
090
091
// Button pressed down
092
if
(buttonVal == LOW && buttonLast == HIGH && (millis() - upTime) > debounce)
093
{
094
downTime = millis();
095
ignoreUp =
false
;
096
waitForUp =
false
;
097
singleOK =
true
;
098
holdEventPast =
false
;
099
longHoldEventPast =
false
;
100
if
((millis()-upTime) < DCgap && DConUp ==
false
&& DCwaiting ==
true
) DConUp =
true
;
101
else
DConUp =
false
;
102
DCwaiting =
false
;
103
}
104
// Button released
105
else
if
(buttonVal == HIGH && buttonLast == LOW && (millis() - downTime) > debounce)
106
{
107
if
(not ignoreUp)
108
{
109
upTime = millis();
110
if
(DConUp ==
false
) DCwaiting =
true
;
111
else
112
{
113
event
= 2;
114
DConUp =
false
;
115
DCwaiting =
false
;
116
singleOK =
false
;
117
}
118
}
119
}
120
// Test for normal click event: DCgap expired
121
if
( buttonVal == HIGH && (millis()-upTime) >= DCgap && DCwaiting ==
true
&& DConUp ==
false
&& singleOK ==
true
&&
event
!= 2)
122
{
123
event
= 1;
124
DCwaiting =
false
;
125
}
126
// Test for hold
127
if
(buttonVal == LOW && (millis() - downTime) >= holdTime) {
128
// Trigger "normal" hold
129
if
(not holdEventPast)
130
{
131
event
= 3;
132
waitForUp =
true
;
133
ignoreUp =
true
;
134
DConUp =
false
;
135
DCwaiting =
false
;
136
//downTime = millis();
137
holdEventPast =
true
;
138
}
139
// Trigger "long" hold
140
if
((millis() - downTime) >= longHoldTime)
141
{
142
if
(not longHoldEventPast)
143
{
144
event
= 4;
145
longHoldEventPast =
true
;
146
}
147
}
148
}
149
buttonLast = buttonVal;
150
return
event
;
151
}
152
153
154
155
156
157
//=================================================
158
// Events to trigger
159
160
void
clickEvent()
161
162
{
163
ledVal1 = !ledVal1;
164
digitalWrite(ledPin1, ledVal1);
165
}
166
void
doubleClickEvent() {
167
ledVal2 = !ledVal2;
168
digitalWrite(ledPin2, ledVal2);
169
}
170
void
holdEvent() {
171
ledVal3 = !ledVal3;
172
digitalWrite(ledPin3, ledVal3);
173
}
174
void
longHoldEvent() {
175
ledVal4 = !ledVal4;
176
digitalWrite(ledPin4, ledVal4);
177
}
http://www.youtube.com/watch?v=G3fwmjtVAQ8
Вчера вечером дописав несколько строк с manu_245 все заработало с сенсором )
001
/* 4-Way Button: Click, Double-Click, Press+Hold, and Press+Long-Hold Test Sketch
002
003
By Jeff Saltzman
004
Oct. 13, 2009
005
006
To keep a physical interface as simple as possible, this sketch demonstrates generating four output events from a single push-button.
007
1) Click: rapid press and release
008
2) Double-Click: two clicks in quick succession
009
3) Press and Hold: holding the button down
010
4) Long Press and Hold: holding the button for a long time
011
*/
012
013
#include <CapacitiveSensor.h>
014
015
CapacitiveSensor Sensor1 = CapacitiveSensor(4,2);
016
#define buttonPin 19 // analog input pin to use as a digital input
017
#define ledPin1 18 // digital output pin for LED 1
018
#define ledPin2 17 // digital output pin for LED 2
019
#define ledPin3 16 // digital output pin for LED 3
020
#define ledPin4 15 // digital output pin for LED 4
021
022
023
// LED variables
024
boolean ledVal1 =
false
;
// state of LED 1
025
boolean ledVal2 =
false
;
// state of LED 2
026
boolean ledVal3 =
false
;
// state of LED 3
027
boolean ledVal4 =
false
;
// state of LED 4
028
029
// Button timing variables
030
int
debounce = 20;
// ms debounce period to prevent flickering when pressing or releasing the button
031
int
DCgap = 250;
//
032
int
holdTime = 1000;
// ms hold period: how long to wait for press+hold event
033
int
longHoldTime = 3000;
// ms long hold period: how long to wait for press+hold event
034
035
036
037
boolean flag=
false
;
038
int
checkButton();
039
040
041
// Button variables
042
boolean buttonVal = HIGH;
// value read from button
043
boolean buttonLast = HIGH;
// buffered value of the button's previous state
044
boolean DCwaiting =
false
;
// whether we're waiting for a double click (down)
045
boolean DConUp =
false
;
// whether to register a double click on next release, or whether to wait and click
046
boolean singleOK =
true
;
// whether it's OK to do a single click
047
long
downTime = -1;
// time the button was pressed down
048
long
upTime = -1;
// time the button was released
049
boolean ignoreUp =
false
;
// whether to ignore the button release because the click+hold was triggered
050
boolean waitForUp =
false
;
// when held, whether to wait for the up event
051
boolean holdEventPast =
false
;
// whether or not the hold event happened already
052
boolean longHoldEventPast =
false
;
// whether or not the long hold event happened already
053
054
055
//=================================================
056
057
void
setup
() {
058
059
Serial
.begin(115200);
060
061
// Set button input pin
062
pinMode(buttonPin, INPUT);
063
digitalWrite(buttonPin, HIGH );
064
// Set LED output pins
065
pinMode(ledPin1, OUTPUT);
066
digitalWrite(ledPin1, ledVal1);
067
pinMode(ledPin2, OUTPUT);
068
digitalWrite(ledPin2, ledVal2);
069
pinMode(ledPin3, OUTPUT);
070
digitalWrite(ledPin3, ledVal3);
071
pinMode(ledPin4, OUTPUT);
072
digitalWrite(ledPin4, ledVal4);
073
074
075
076
}
077
078
079
void
loop
()
080
{
081
082
083
084
085
int
b = checkButton();
086
087
if
(b == 1) clickEvent();
088
if
(b == 2) doubleClickEvent();
089
if
(b == 3) holdEvent();
090
if
(b == 4) longHoldEvent();
091
}
092
// Get button event and act accordingly
093
094
int
checkButton()
095
{
096
int
event
= 0;
097
098
long
temp1 = Sensor1.capacitiveSensor(30);
099
Serial
.println(temp1);
100
if
(temp1>1000)
101
102
{
103
buttonVal=0;
104
}
105
else
buttonVal=1;
106
107
108
109
// Button pressed down
110
if
(buttonVal == LOW && buttonLast == HIGH && (millis() - upTime) > debounce )
111
{
112
downTime = millis();
113
ignoreUp =
false
;
114
waitForUp =
false
;
115
singleOK =
true
;
116
holdEventPast =
false
;
117
longHoldEventPast =
false
;
118
if
((millis()-upTime) < DCgap && DConUp ==
false
&& DCwaiting ==
true
) DConUp =
true
;
119
else
DConUp =
false
;
120
DCwaiting =
false
;
121
}
122
// Button released
123
else
if
(buttonVal == HIGH && buttonLast == LOW && (millis() - downTime ) > debounce)
124
{
125
if
(not ignoreUp)
126
{
127
upTime = millis();
128
if
(DConUp ==
false
) DCwaiting =
true
;
129
else
130
{
131
event
= 2;
132
DConUp =
false
;
133
DCwaiting =
false
;
134
singleOK =
false
;
135
}
136
}
137
}
138
// Test for normal click event: DCgap expired
139
if
( buttonVal == HIGH && (millis()-upTime) >= DCgap && DCwaiting ==
true
&& DConUp ==
false
&& singleOK ==
true
&&
event
!= 2 )
140
{
141
event
= 1;
142
DCwaiting =
false
;
143
}
144
// Test for hold
145
if
(buttonVal == LOW && (millis() - downTime) >= holdTime ) {
146
// Trigger "normal" hold
147
if
(not holdEventPast)
148
{
149
event
= 3;
150
waitForUp =
true
;
151
ignoreUp =
true
;
152
DConUp =
false
;
153
DCwaiting =
false
;
154
//downTime = millis();
155
holdEventPast =
true
;
156
}
157
// Trigger "long" hold
158
if
((millis() - downTime) >= longHoldTime)
159
{
160
if
(not longHoldEventPast)
161
{
162
event
= 4;
163
longHoldEventPast =
true
;
164
}
165
}
166
}
167
buttonLast = buttonVal;
168
return
event
;
169
170
}
171
172
173
174
175
176
//=================================================
177
// Events to trigger
178
179
void
clickEvent()
180
181
{
182
ledVal1 = !ledVal1;
183
digitalWrite(ledPin1, ledVal1);
184
}
185
void
doubleClickEvent() {
186
ledVal2 = !ledVal2;
187
digitalWrite(ledPin2, ledVal2);
188
}
189
void
holdEvent() {
190
ledVal3 = !ledVal3;
191
digitalWrite(ledPin3, ledVal3);
192
}
193
void
longHoldEvent() {
194
ledVal4 = !ledVal4;
195
digitalWrite(ledPin4, ledVal4);
196
197
198
Serial
.println (buttonVal);
199
}
http://www.youtube.com/watch?v=s2-Bthqtv9o&feature=youtu.be
теперь осталось приобрести датчики тока и можно будет собирать первый тестовый вариант
Еще мне объяснили что нужно что бы все окружающие понимали чего я хочу от этого проэкта и как я его вижу его у себя в голове ))))
Постараюсь объяснить. Всего 9 кнопок, по 2 на каждую дверь и 3 на дверь водителя. На всех дверях функция атомата которая срабатывает по двойному клику, почму двойному, по тому, что может получиться эффект скольжения. Те кто ставили доводчики сктекол с функцией автомата, поймут меня (стекло очень трудно подогнать в то место в которое хочешь ), а тут гоняй сколько хочешь . Автомат и вуерх и вниз. И только по двойному клику, на практике посмотрим как это будет выглядить. В водительской двери третья кнопка, будет иметь функцию переключателя. Например нажатие на 2 секунды на табло загорается соответствующий диод или цифра (пока еще не определился) и уже с водительской двери можно будет управлять любым стеклоподъемником, в зависимости от цифры или индикатора. А если ее зажать на 4 секунды то сработает режим блока, все три стеклоподъемника закроются и заблокируются, а водитель сможет ими управлять путем 2-х секундного переключения между ними. Tще была мысль, поставить бипер с условными сигналами, было бы удобно. Еще можно будет управлять магнитолой. На рисунке, на втором, который я нарисовал от руки, я нарисовал сдвиговый регистр, от которого я отказался, так как у меги вполне хватает выходов и все управление магнитолой, можно будет сделать на одной плате с минимальной разводкой. Управлять я смогу громкостью, переключениями треков и тишиной. Все это работает через блютус. Сначала нано принимает сигнал, а потом по Тх и Рх посылает на мегу, а та в свою очередь управляет магнитолой. Так же с телефона по блютус можно будет управлять и стеклоподъемниками, но только по парам и по сторонам и то, только в крайних полождениях, либо открыть, либо закрыть. Еще думал, но уже в качестве прикола, попробывать сделать при одновременном зажатии 2-х кнопок, на любой из задних дверей, на 2 секунды, отключение управления стеклоподъемником и подключением функции управления магнитолой. Например громгостью! При отключении питания, (постановке на сигнализацию) ардуино будет видеть это и закрывать все стеклоподъемники, по парам или нет, еще не определился и отключаться путем, отключения питания на транзисторе, который будет отключать полностью питание, на всем устройстве! Естесственно, при обрыве тросика, стеклоподъемник будет работать в ту или иную сторону, не более 10-15 секунд, а потом отклюаться.
Вроде все рассказал! Приминаю любую критику комментируйте.
после выключения питания ардуина должна закрыть все окна и отключить питание (обесточить себя ) можно это сделать несколькими способами один из которых такой:
вопрос какой транзистор использовать и на сколько правильно я рассуждаю?
кажется кое что нашел)))
нарисовал почти полноценную схему))))
только что опытным путем выяснил что вполне достаточно резистора в 50 кОм при косании значени в мониторе порта не превышает 50 - 60 а при состоянии покоя 2-3 а когда был 1 мОм то значение при косании могло подняться до 170000 и скорость значительно падала а вот от конденсатора избавиться не удалсь иногда значения подвисали
Давно ни чего не писал но проект не умер а перерос в нечто другое! Я купил др автомобиль и он уже имеет 2 стеклоподъемника. От сенсорных кнопок я отказался. Вот схема последней редакции.
Нет, не могу я найти на этой карте место, где зарыт клад. :)