Re: Запуск автомобиля с голоса
Сегодня с manu_245 допилили код под педаль тормоза в целом работает как и задумывалось есть правда пару задержек но я отписываюсь сейчас так как код уже достаточно сильно изменится и я хочу выкинуть его переходную версию что бы он был сохранен
строки которые мы добавили для работы педали
PHP код:
if(stopflag && digitalRead(2)==LOW && digitalRead(4)==LOW && startflag
)
{
digitalWrite(Start, HIGH);
delay(100);
digitalWrite(Start, LOW);
flag=false;
startflag=false;
digitalWrite(Mute, LOW);
c=0;
}
if ( (digitalRead(2)==HIGH && !startflag) || digitalRead(4)==HIGH)
startflag=true;
и весь код в сборе:
PHP код:
#include <MsTimer2.h>
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(11, 12); // RX, TX
char c;
int Mute = 19; // Pin 19 - Mute
int Start = 18; // Pin 18 - Start
int Stopi = 17; // Pin 17 - Stop
int Opening = 15; // Pin 15 - Open
int Light = 16; // Pin 16 - Light
int Lampbattery = 4;
int Stopisignal = 2;
int Speedisensor = 3;
int tick = 0 ;
byte com = 0; //reply from voice recognition
boolean running = false;
boolean flag=false;
boolean stopflag=true;
boolean a=false;
boolean startflag=true;
void Time()
{
tick++;
}
void flash()
{
if(tick<2){stopflag=true;}
else {stopflag=false;}
tick=0;
}
void setup() {
// initialize the digital pins as output
pinMode(Mute, OUTPUT);
pinMode(Start, OUTPUT);
pinMode(Stopi, OUTPUT);
pinMode(Opening, OUTPUT);
pinMode(Light, OUTPUT);
pinMode(Lampbattery, INPUT);
digitalWrite(Lampbattery, HIGH);
pinMode(Stopisignal, INPUT);
digitalWrite(Stopisignal, HIGH);
pinMode(Speedisensor, INPUT);
digitalWrite (Speedisensor, HIGH);
attachInterrupt(1, Time, FALLING);
MsTimer2::set(500, flash);
MsTimer2::start();
flag=true;
digitalWrite(Mute, HIGH);
BTSerial.begin(9600);
Serial.begin(9600); // Start serial communication at 9600bps
delay(2000);
Serial.write(0xAA);
Serial.write(0x37);
delay(1000);
Serial.write(0xAA);
Serial.write(0x21);
}
void loop() // run over and over again
{
if(stopflag && digitalRead(2)==LOW && digitalRead(4)==LOW && startflag
)
{
digitalWrite(Start, HIGH);
delay(100);
digitalWrite(Start, LOW);
flag=false;
startflag=false;
digitalWrite(Mute, LOW);
c=0;
}
if ( (digitalRead(2)==HIGH && !startflag) || digitalRead(4)==HIGH)
startflag=true;
if (BTSerial.available())
{
c = (char)BTSerial.read();
Serial.println(c);
if (c == '1' && !flag)
{
flag=true;
digitalWrite(Mute, HIGH);
c=0;
}
switch(c)
{
case 50:
if (stopflag)
{
digitalWrite(Opening, HIGH);
delay(700);
digitalWrite(Opening, LOW);
delay(1000);
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
}
case 51:
running = !running;
digitalWrite(Light, running);
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
}
if(flag)
{
switch(c)
{
case 49:
flag=false;
digitalWrite(Mute, LOW);
c=0;
break;
}
}
}
if (digitalRead(4)==LOW)
{
a=false;
flag=true;
digitalWrite(Mute, HIGH);
}
if (digitalRead(4)==HIGH && !a)
{
a=true;
flag=false;
delay(1000);
digitalWrite(Mute, LOW);
}
if(Serial.available())
{
com = Serial.read();
if(com==0x13 && !flag)
{
flag=true;
digitalWrite(Mute, HIGH);
com=0;
}
if(flag)
{
switch(com)
{
case 0x15:
running = !running;
digitalWrite(Light, running);
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
case 0x11:
if(stopflag && digitalRead(2)==LOW && digitalRead(4)==LOW
)
{
digitalWrite(Start, HIGH);
delay(100);
digitalWrite(Start, LOW);
flag=false;
digitalWrite(Mute, LOW);
com=0;
}
break;
case 0x12:
if(stopflag && digitalRead(2)==LOW && digitalRead(4)==HIGH
)
{
digitalWrite(Stopi, HIGH);
delay(1000);
digitalWrite(Stopi, LOW);
flag=false;
delay(1000);
digitalWrite(Mute, LOW);
com=0;
}
break;
case 0x14:
if (stopflag)
{
digitalWrite(Opening, HIGH);
delay(700);
digitalWrite(Opening, LOW);
flag=false;
digitalWrite(Mute, LOW);
com=0;
}
break;
case 0x13:
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
}
}
}
}
Re: Запуск автомобиля с голоса
наконец то снял видео
http://www.youtube.com/watch?v=RPFaYmqWYH0
код после обработки (задержки исчезли ) строки на запуск и глушения я убрал за ненадобностью
PHP код:
#include <MsTimer2.h>
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(11, 12); // RX, TX
char c;
int Mute = 19; // Pin 19 - Mute
int Start = 18; // Pin 18 - Start
int Stopi = 17; // Pin 17 - Stop
int Opening = 15; // Pin 15 - Open
int Light = 16; // Pin 16 - Light
int Lampbattery = 4;
int Stopisignal = 2;
int Speedisensor = 3;
int tick = 0 ;
byte com = 0; //reply from voice recognition
boolean running = false;
boolean flag=false;
boolean stopflag=true;
boolean a=false;
boolean startflag=true;
void Time()
{
tick++;
}
void flash()
{
if(tick<2){stopflag=true;}
else {stopflag=false;}
tick=0;
}
void setup() {
// initialize the digital pins as output
pinMode(Mute, OUTPUT);
pinMode(Start, OUTPUT);
pinMode(Stopi, OUTPUT);
pinMode(Opening, OUTPUT);
pinMode(Light, OUTPUT);
pinMode(Lampbattery, INPUT);
digitalWrite(Lampbattery, HIGH);
pinMode(Stopisignal, INPUT);
digitalWrite(Stopisignal, HIGH);
pinMode(Speedisensor, INPUT);
digitalWrite (Speedisensor, HIGH);
attachInterrupt(1, Time, FALLING);
MsTimer2::set(500, flash);
MsTimer2::start();
BTSerial.begin(9600);
Serial.begin(9600); // Start serial communication at 9600bps
delay(2000);
Serial.write(0xAA);
Serial.write(0x37);
delay(1000);
Serial.write(0xAA);
Serial.write(0x21);
}
void loop() // run over and over again
{
if(stopflag && digitalRead(2)==LOW && digitalRead(4)==LOW && startflag
)
{
digitalWrite(Start, HIGH);
delay(100);
digitalWrite(Start, LOW);
flag=false;
startflag=false;
digitalWrite(Mute, LOW);
c=0;
}
if ( (digitalRead(2)==HIGH && !startflag) || digitalRead(4)==HIGH)
startflag=true;
if (BTSerial.available())
{
c = (char)BTSerial.read();
Serial.println(c);
if (c == '1' && !flag)
{
flag=true;
digitalWrite(Mute, HIGH);
c=0;
}
switch(c)
{
case 50:
if (stopflag)
{
digitalWrite(Opening, HIGH);
delay(700);
digitalWrite(Opening, LOW);
delay(1000);
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
}
case 51:
running = !running;
digitalWrite(Light, running);
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
}
if(flag)
{
switch(c)
{
case 49:
flag=false;
digitalWrite(Mute, LOW);
c=0;
break;
}
}
}
if(Serial.available())
{
com = Serial.read();
if(com==0x13 && !flag)
{
flag=true;
digitalWrite(Mute, HIGH);
com=0;
}
if(flag)
{
switch(com)
{
case 0x15:
running = !running;
digitalWrite(Light, running);
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
case 0x14:
if (stopflag)
{
digitalWrite(Opening, HIGH);
delay(700);
digitalWrite(Opening, LOW);
flag=false;
digitalWrite(Mute, LOW);
com=0;
}
break;
case 0x13:
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
}
}
}
}
:cool:
Re: Запуск автомобиля с голоса
Фишка со сцеплением понравилась. +100
Re: Запуск автомобиля с голоса
я просмотрел или запуск с голоса неудался?
сцепа конечно хорошо, но нужна доп. блокировка думаю... например от детей.
Re: Запуск автомобиля с голоса
они в принципе не включат зажигание брелок всегда у меня в кармане а если хотите посмотреть как это все работает с голоса посмотрите на 16 страничке видео
Re: Запуск автомобиля с голоса
Цитата:
Сообщение от
Murkur
Машины Тесла в прошлом году прошли тесты в скандинавских странах и сейчас там ездят. Правда, сами производители сообщили, что ход на одном заряде в таком климате будет на 20-40% ниже, чем в тёплых странах - всё зависит от температуры. Можно, конечно, и подогрев батарей сделать, чтобы не мёрзли постоянно, но это тоже дополнительний расход энергии. Понятно, что в Сибирь их лучше не запускать
Поздно, одна из первых Тесла в России была куплена автолюбителем из Барнаула (Алтайский край, юг западной Сибири). К слову, климат резко-континентальный, этой зимой недели две держалось под -40.
Вижу её тут постоянно, в том числе зимой. Местные новости сюжет снимали про запуск в -30. Ехать можно почти сразу, она только небольшое время тратит на запуск обогрева салона. Никакого ощущения тормознутости, замороженности. Ресурс на одной зарядке - да, снижается процентов на 30. При заявленных 300 км ресурса это не особо принципиально, на день в городском режиме хватит.
Re: Запуск автомобиля с голоса
Цитата:
Ресурс на одной зарядке - да, снижается процентов на 30
Сомневаюсь что при -30 ресурс снизится всего на 30%
Re: Запуск автомобиля с голоса
Скетч последней редакции был убран дребезг контактов
PHP код:
#include <MsTimer2.h>
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(11, 12); // RX, TX
char c;
int Mute = 19; // Pin 19 - Mute
int Start = 18; // Pin 18 - Start
int Stopi = 17; // Pin 17 - Stop
int Opening = 15; // Pin 15 - Open
int Light = 16; // Pin 16 - Light
int Lampbattery = 4;
int Stopisignal = 2;
int Speedisensor = 3;
int tick = 0 ;
byte com = 0; //reply from voice recognition
boolean running = false;
boolean flag=false;
boolean stopflag=true;
boolean a=false;
boolean startflag=true;
void Time()
{
tick++;
}
void flash()
{
if(tick<2){stopflag=true;}
else {stopflag=false;}
tick=0;
}
void setup() {
// initialize the digital pins as output
pinMode(Mute, OUTPUT);
pinMode(Start, OUTPUT);
pinMode(Stopi, OUTPUT);
pinMode(Opening, OUTPUT);
pinMode(Light, OUTPUT);
pinMode(Lampbattery, INPUT);
digitalWrite(Lampbattery, HIGH);
pinMode(Stopisignal, INPUT);
digitalWrite(Stopisignal, HIGH);
pinMode(Speedisensor, INPUT);
digitalWrite (Speedisensor, HIGH);
attachInterrupt(1, Time, FALLING);
MsTimer2::set(500, flash);
MsTimer2::start();
BTSerial.begin(9600);
Serial.begin(9600); // Start serial communication at 9600bps
delay(2000);
Serial.write(0xAA);
Serial.write(0x37);
delay(1000);
Serial.write(0xAA);
Serial.write(0x21);
}
void loop() // run over and over again
{
if (digitalRead(2)==LOW)
{
delay(30);
if(stopflag && digitalRead(2)==LOW && digitalRead(4)==LOW && startflag
)
{
digitalWrite(Start, HIGH);
delay(100);
digitalWrite(Start, LOW);
flag=false;
startflag=false;
digitalWrite(Mute, LOW);
c=0;
}
if ( (digitalRead(2)==HIGH && !startflag) || digitalRead(4)==HIGH)
startflag=true;
}
if (BTSerial.available())
{
c = (char)BTSerial.read();
Serial.println(c);
if (c == '1' && !flag)
{
flag=true;
digitalWrite(Mute, HIGH);
c=0;
}
switch(c)
{
case 50:
if (stopflag)
{
digitalWrite(Opening, HIGH);
delay(700);
digitalWrite(Opening, LOW);
delay(1000);
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
}
case 51:
running = !running;
digitalWrite(Light, running);
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
}
if(flag)
{
switch(c)
{
case 49:
flag=false;
digitalWrite(Mute, LOW);
c=0;
break;
}
}
}
if(Serial.available())
{
com = Serial.read();
if(com==0x13 && !flag)
{
flag=true;
digitalWrite(Mute, HIGH);
com=0;
}
if(flag)
{
switch(com)
{
case 0x15:
running = !running;
digitalWrite(Light, running);
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
case 0x14:
if (stopflag)
{
digitalWrite(Opening, HIGH);
delay(700);
digitalWrite(Opening, LOW);
flag=false;
digitalWrite(Mute, LOW);
com=0;
}
break;
case 0x13:
flag=false;
digitalWrite(Mute, LOW);
com=0;
break;
}
}
}
}
:)
Re: Запуск автомобиля с голоса
Цитата:
Сообщение от
Omigovolt
Слежу за темой давно, но, походу, что-то пропустил... А как завести, если машина стоит на передаче? Есть какой-нибудь определитель, что машина не на нетралке?
Re: Запуск автомобиля с голоса
Цитата:
Сообщение от
Murkur
Слежу за темой давно, но, походу, что-то пропустил... А как завести, если машина стоит на передаче? Есть какой-нибудь определитель, что машина не на нетралке?
Нет определителя нет! Лично я уже давно оставляю машину на нейтрали, так как у меня уже получается функция технологической нейтрали, как на сигнализациях. Выхожу из автомобиля ставлю на сигнализацию, она закрывается и глушится (выключается зажигание). При снятии с охраны, она открывается и зажигание включается, нажимаю тормоз она заводится, даже если в этот момент, я не сниму со скорости, стартер включится, я почувствую рывок и нажму педаль тормоза еще сильнее и рефлекторно сниму со скорости и стартер заведет машину! Все действия будут происходить не более 1 секунды, так что ни чего страшного, у меня было такое пару раз, так что я знаю о чем говорю) Надеюсь мой ответ исчерпывающий. При желании можно сделать что бы ардуино контролировала и ручник (через реле или оптопару) входов свободных валом )