Вложений: 3
Стеклоподъемники с сенсорными кнопками
Ну вот теперь новый проект все конечно знают мой первый http://compcar.ru/forum/showthread.php?t=9067 так вот почему я решил выделить его в отдельную тему по тому что здесь все по другому с самого начала я хотел это сделать довеском уже к имеющейся плате (управление голосом и ее компоненты) но потом мне не хватило выходов на плате я начал их множить при помощи сдвигового регистра хотел все реализовать на доводчиках аннн нет после юзанья такого доводчика я понял (он не удовлетворял моим требованиям) что придется делать все самому С тех пор понеслась я заказал ардуино мега2560 Вот она к стате лежит сверкает по левую мою руку
Вложение 17570
стабилизатор напряжения у меня был все с тогоже сайта заказывал ранее плата для зборки у меня была.
Вложение 17571
схема нарисовал только вчера
Вложение 17572
Принцип работы:
Всего 9 кнопок, по 2 на каждую дверь и 3 на дверь водителя. На всех дверях функция атомата которая срабатывает по двойному клику, почму двойному, по тому, что может получиться эффект скольжения. Те кто ставили доводчики сктекол с функцией автомата, поймут меня (стекло очень трудно подогнать в то место в которое хочешь ), а тут гоняй сколько хочешь . Автомат и вуерх и вниз. И только по двойному клику, на практике посмотрим как это будет выглядить. В водительской двери третья кнопка, будет иметь функцию переключателя. Например нажатие на 2 секунды на табло загорается соответствующий диод или цифра (пока еще не определился) и уже с водительской двери можно будет управлять любым стеклоподъемником, в зависимости от цифры или индикатора. А если ее зажать на 4 секунды то сработает режим блока, все три стеклоподъемника закроются и заблокируются, а водитель сможет ими управлять путем 2-х секундного переключения между ними. Tще была мысль, поставить бипер с условными сигналами, было бы удобно. Еще можно будет управлять магнитолой. На рисунке, на втором, который я нарисовал от руки, я нарисовал сдвиговый регистр, от которого я отказался, так как у меги вполне хватает выходов и все управление магнитолой, можно будет сделать на одной плате с минимальной разводкой. Управлять я смогу громкостью, переключениями треков и тишиной. Все это работает через блютус. Сначала нано принимает сигнал, а потом по Тх и Рх посылает на мегу, а та в свою очередь управляет магнитолой. Так же с телефона по блютус можно будет управлять и стеклоподъемниками, но только по парам и по сторонам и то, только в крайних полождениях, либо открыть, либо закрыть. Еще думал, но уже в качестве прикола, попробывать сделать при одновременном зажатии 2-х кнопок, на любой из задних дверей, на 2 секунды, отключение управления стеклоподъемником и подключением функции управления магнитолой. Например громгостью! При отключении питания, (постановке на сигнализацию) ардуино будет видеть это и закрывать все стеклоподъемники, по парам или нет, еще не определился и отключаться путем, отключения питания на транзисторе, который будет отключать полностью питание, на всем устройстве! Естесственно, при обрыве тросика, стеклоподъемник будет работать в ту или иную сторону, не более 10-15 секунд, а потом отклюаться.
вууух вроде как то так ес что вспомню то напишу по ходу
есть уже первые наработки во первых мне удалось вынести сенсорную кнопку на конец 6-и метрового провода (обязательно экранированного ) и удалось опять же таки не без помощи manu_245 сделать эту кнопку мулькликовой
PHP код:
/* 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-Bt...ature=youtu.be
на сегодняшний день жду датчики тока но уже сейчас подбираю кое какие компоненты к примеру на рисунке к каждому входу ULN2003A параллельно подключены светодиоды для визуализации и отладки процессов так вот планирую теперь применять резисторные сборки принимается любая критика)))) ааа чуть не забыл доп информация, покупал все в магазине https://duino.ru/
Re: Стеклоподъемники с сенсорными кнопками
только что опытным путем выяснил что вполне достаточно резистора в 50 кОм при касании значение в мониторе порта не превышает 50 - 60 а при состоянии покоя 2-3 а когда был 1 мОм то значение при касании могло подняться до 170000 и скорость значительно падала а вот от конденсатора избавиться не удалось иногда значения подвисали!
Re: Стеклоподъемники с сенсорными кнопками
При использовании 50к, через пластиковую карту срабатывает?
Re: Стеклоподъемники с сенсорными кнопками
нет у меня концелярские кнопки разноцветные так вот при 50 кОм работает отлично а когда слой изоленты сверху налепишь то уже гораздо сложнее думаю что через пластиковую карту уже это будет не возможно при таком номинале Я планмрую перекрасить кнопки в спец краску светоотражающую кислотного цвета в слоев 5 )))) по этому в моем случае 50 кОм то что надо
Re: Стеклоподъемники с сенсорными кнопками
идея конечно хороша! но-о! вся проблема в том как этим управлять в пути(тактильность) и случайные прикосновения рук?! и ещё: насколько увеличится кол-во проводов на каждую дверь?
Re: Стеклоподъемники с сенсорными кнопками
Насчет тактильности, я же использую канцелярские кнопки из любой поверхности они будут выпирать, этого достаточно. На классических ручках я уже прикинул где они будут стоять! Там случайных касаний не будет, получится как кнопки на штурвале, только когда там будет рука, туда можно будет докоснуться пальцем. Количество проводов в водительскую дверь 3 экранированных и два на подъемник, во все остальные по 2 экранированных и по 2 на подъемники. Прошу заметить, что не получится пустить три жили вместе в одном экране, каждая жила должна быть в экране. От подсветки я отказался по тому как у меня не решений по этому поводу.
Re: Стеклоподъемники с сенсорными кнопками
Вложений: 1
Re: Стеклоподъемники с сенсорными кнопками
неет такие штуки придется располагать в каждой двери я думал о том что бы сделать как на VW - ганех в каждой двери по блоку а между собой они общаются по шине данных но потом отошел от этой идеи и решил сделать все в одном устройстве а так можно было и так сделать
Вложение 17580
но у меня получается полноценный блок стеклоподъемников с функцией автомат доводчиками и всеми вытекающими прелестями :D
Вложений: 2
Re: Стеклоподъемники с сенсорными кнопками
У меня вот такое индикаторное табло по которому я планирую показывать какой стеклоподъемник находится под моим контролем.
Вложение 17583
Из даташита я понял, что у него напряжение питания 2.1 вольта. Если я собираюсь подсоединять его напрямую к ардуино, то получается нужно вешать резисторы, как по плюсу, так и по минусу, что бы получился делитель напряжения вот схема:
Вложение 17584
я правильно рассуждаю?
Re: Стеклоподъемники с сенсорными кнопками
Нужно только ограничить ток, включив последовательно светодиоду резистор