Стеклоподъемники с сенсорными кнопками.
- Войдите на сайт для отправки комментариев
У меня ваз 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
#include <CapacitiveSensor.h> int Light = 12; CapacitiveSensor Sensor1 = CapacitiveSensor(4,2); // назначить пины для сенсора void setup() { Serial.begin(115200); // настроить скорость порта pinMode(Light, OUTPUT); } void loop() { long temp1 = Sensor1.capacitiveSensor(30); // измерить емкость и сохранить в temp1 if (temp1 > 1000) // изменяя значение 60 мы регулируем чуствительность сенсора { digitalWrite(12, HIGH); } // включить светодиод else { digitalWrite(12, LOW); } // выключить светодиод] Serial.println(temp1); // для клибровки вашего датчика // или для использования этого значения в компьютере }в видео видно на мониторе порта что при косаниях число возростает от 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/ которы помог мне это сделать
в итоге я получил именно то что хотел это двойной клик и зажатие в данном скетче все работает с обыкновенной кнопкой
осталось поэксперементировать с сенсором
/* 4-Way Button: Click, Double-Click, Press+Hold, and Press+Long-Hold Test Sketch By Jeff Saltzman Oct. 13, 2009 To keep a physical interface as simple as possible, this sketch demonstrates generating four output events from a single push-button. 1) Click: rapid press and release 2) Double-Click: two clicks in quick succession 3) Press and Hold: holding the button down 4) Long Press and Hold: holding the button for a long time */ #define buttonPin 19 // analog input pin to use as a digital input #define ledPin1 18 // digital output pin for LED 1 #define ledPin2 17 // digital output pin for LED 2 #define ledPin3 16 // digital output pin for LED 3 #define ledPin4 15 // digital output pin for LED 4 // LED variables boolean ledVal1 = false; // state of LED 1 boolean ledVal2 = false; // state of LED 2 boolean ledVal3 = false; // state of LED 3 boolean ledVal4 = false; // state of LED 4 // Button timing variables int debounce = 20; // ms debounce period to prevent flickering when pressing or releasing the button int DCgap = 250; // max ms between clicks for a double click event int holdTime = 1000; // ms hold period: how long to wait for press+hold event int longHoldTime = 3000; // ms long hold period: how long to wait for press+hold event int checkButton(); // Button variables boolean buttonVal = HIGH; // value read from button boolean buttonLast = HIGH; // buffered value of the button's previous state boolean DCwaiting = false; // whether we're waiting for a double click (down) boolean DConUp = false; // whether to register a double click on next release, or whether to wait and click boolean singleOK = true; // whether it's OK to do a single click long downTime = -1; // time the button was pressed down long upTime = -1; // time the button was released boolean ignoreUp = false; // whether to ignore the button release because the click+hold was triggered boolean waitForUp = false; // when held, whether to wait for the up event boolean holdEventPast = false; // whether or not the hold event happened already boolean longHoldEventPast = false;// whether or not the long hold event happened already //================================================= void setup() { // Set button input pin pinMode(buttonPin, INPUT); digitalWrite(buttonPin, HIGH ); // Set LED output pins pinMode(ledPin1, OUTPUT); digitalWrite(ledPin1, ledVal1); pinMode(ledPin2, OUTPUT); digitalWrite(ledPin2, ledVal2); pinMode(ledPin3, OUTPUT); digitalWrite(ledPin3, ledVal3); pinMode(ledPin4, OUTPUT); digitalWrite(ledPin4, ledVal4); } void loop() { int b = checkButton(); if (b == 1) clickEvent(); if (b == 2) doubleClickEvent(); if (b == 3) holdEvent(); if (b == 4) longHoldEvent(); } // Get button event and act accordingly int checkButton() { int event = 0; buttonVal = digitalRead(buttonPin); // Button pressed down if (buttonVal == LOW && buttonLast == HIGH && (millis() - upTime) > debounce) { downTime = millis(); ignoreUp = false; waitForUp = false; singleOK = true; holdEventPast = false; longHoldEventPast = false; if ((millis()-upTime) < DCgap && DConUp == false && DCwaiting == true) DConUp = true; else DConUp = false; DCwaiting = false; } // Button released else if (buttonVal == HIGH && buttonLast == LOW && (millis() - downTime) > debounce) { if (not ignoreUp) { upTime = millis(); if (DConUp == false) DCwaiting = true; else { event = 2; DConUp = false; DCwaiting = false; singleOK = false; } } } // Test for normal click event: DCgap expired if ( buttonVal == HIGH && (millis()-upTime) >= DCgap && DCwaiting == true && DConUp == false && singleOK == true && event != 2) { event = 1; DCwaiting = false; } // Test for hold if (buttonVal == LOW && (millis() - downTime) >= holdTime) { // Trigger "normal" hold if (not holdEventPast) { event = 3; waitForUp = true; ignoreUp = true; DConUp = false; DCwaiting = false; //downTime = millis(); holdEventPast = true; } // Trigger "long" hold if ((millis() - downTime) >= longHoldTime) { if (not longHoldEventPast) { event = 4; longHoldEventPast = true; } } } buttonLast = buttonVal; return event; } //================================================= // Events to trigger void clickEvent() { ledVal1 = !ledVal1; digitalWrite(ledPin1, ledVal1); } void doubleClickEvent() { ledVal2 = !ledVal2; digitalWrite(ledPin2, ledVal2); } void holdEvent() { ledVal3 = !ledVal3; digitalWrite(ledPin3, ledVal3); } void longHoldEvent() { ledVal4 = !ledVal4; digitalWrite(ledPin4, ledVal4); }http://www.youtube.com/watch?v=G3fwmjtVAQ8
Вчера вечером дописав несколько строк с manu_245 все заработало с сенсором )
/* 4-Way Button: Click, Double-Click, Press+Hold, and Press+Long-Hold Test Sketch By Jeff Saltzman Oct. 13, 2009 To keep a physical interface as simple as possible, this sketch demonstrates generating four output events from a single push-button. 1) Click: rapid press and release 2) Double-Click: two clicks in quick succession 3) Press and Hold: holding the button down 4) Long Press and Hold: holding the button for a long time */ #include <CapacitiveSensor.h> CapacitiveSensor Sensor1 = CapacitiveSensor(4,2); #define buttonPin 19 // analog input pin to use as a digital input #define ledPin1 18 // digital output pin for LED 1 #define ledPin2 17 // digital output pin for LED 2 #define ledPin3 16 // digital output pin for LED 3 #define ledPin4 15 // digital output pin for LED 4 // LED variables boolean ledVal1 = false; // state of LED 1 boolean ledVal2 = false; // state of LED 2 boolean ledVal3 = false; // state of LED 3 boolean ledVal4 = false; // state of LED 4 // Button timing variables int debounce = 20; // ms debounce period to prevent flickering when pressing or releasing the button int DCgap = 250; // int holdTime = 1000; // ms hold period: how long to wait for press+hold event int longHoldTime = 3000; // ms long hold period: how long to wait for press+hold event boolean flag=false; int checkButton(); // Button variables boolean buttonVal = HIGH; // value read from button boolean buttonLast = HIGH; // buffered value of the button's previous state boolean DCwaiting = false; // whether we're waiting for a double click (down) boolean DConUp = false; // whether to register a double click on next release, or whether to wait and click boolean singleOK = true; // whether it's OK to do a single click long downTime = -1; // time the button was pressed down long upTime = -1; // time the button was released boolean ignoreUp = false; // whether to ignore the button release because the click+hold was triggered boolean waitForUp = false; // when held, whether to wait for the up event boolean holdEventPast = false; // whether or not the hold event happened already boolean longHoldEventPast = false;// whether or not the long hold event happened already //================================================= void setup() { Serial.begin(115200); // Set button input pin pinMode(buttonPin, INPUT); digitalWrite(buttonPin, HIGH ); // Set LED output pins pinMode(ledPin1, OUTPUT); digitalWrite(ledPin1, ledVal1); pinMode(ledPin2, OUTPUT); digitalWrite(ledPin2, ledVal2); pinMode(ledPin3, OUTPUT); digitalWrite(ledPin3, ledVal3); pinMode(ledPin4, OUTPUT); digitalWrite(ledPin4, ledVal4); } void loop() { int b = checkButton(); if (b == 1) clickEvent(); if (b == 2) doubleClickEvent(); if (b == 3) holdEvent(); if (b == 4) longHoldEvent(); } // Get button event and act accordingly int checkButton() { int event = 0; long temp1 = Sensor1.capacitiveSensor(30); Serial.println(temp1); if(temp1>1000) { buttonVal=0; } else buttonVal=1; // Button pressed down if (buttonVal == LOW && buttonLast == HIGH && (millis() - upTime) > debounce ) { downTime = millis(); ignoreUp = false; waitForUp = false; singleOK = true; holdEventPast = false; longHoldEventPast = false; if ((millis()-upTime) < DCgap && DConUp == false && DCwaiting == true ) DConUp = true; else DConUp = false; DCwaiting = false; } // Button released else if (buttonVal == HIGH && buttonLast == LOW && (millis() - downTime ) > debounce) { if (not ignoreUp) { upTime = millis(); if (DConUp == false) DCwaiting = true; else { event = 2; DConUp = false; DCwaiting = false; singleOK = false; } } } // Test for normal click event: DCgap expired if ( buttonVal == HIGH && (millis()-upTime) >= DCgap && DCwaiting == true && DConUp == false && singleOK == true && event != 2 ) { event = 1; DCwaiting = false; } // Test for hold if (buttonVal == LOW && (millis() - downTime) >= holdTime ) { // Trigger "normal" hold if (not holdEventPast) { event = 3; waitForUp = true; ignoreUp = true; DConUp = false; DCwaiting = false; //downTime = millis(); holdEventPast = true; } // Trigger "long" hold if ((millis() - downTime) >= longHoldTime) { if (not longHoldEventPast) { event = 4; longHoldEventPast = true; } } } buttonLast = buttonVal; return event; } //================================================= // Events to trigger void clickEvent() { ledVal1 = !ledVal1; digitalWrite(ledPin1, ledVal1); } void doubleClickEvent() { ledVal2 = !ledVal2; digitalWrite(ledPin2, ledVal2); } void holdEvent() { ledVal3 = !ledVal3; digitalWrite(ledPin3, ledVal3); } void longHoldEvent() { ledVal4 = !ledVal4; digitalWrite(ledPin4, ledVal4); Serial.println (buttonVal); }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 стеклоподъемника. От сенсорных кнопок я отказался. Вот схема последней редакции.
Нет, не могу я найти на этой карте место, где зарыт клад. :)