-
Вложений: 4
Объединенный проект для Arduino, All-In-One.
Объединил в один скетч для arduino: ИК-Пульт, Управление рулевыми кнопками, Энкодер, Авто регулировка яркости, Активатор камеры ЗХ, Задержка включения камеры ЗХ , измерение напряжения, измерение уровня топлива.
Не нужные функции можно закоментировать в главном цикле loop
Улучшеный скетч от echo
Внимание
Программа работает на прямую с драйвером USB-Моста FT232
аналоги arduino с другими преобразователями com to usb работать не будут
PHP код:
//http://compcar.ru
#include <IRremote.h>
byte bytes[13]; // 0-3 байт энкодер, рулевые кнопки, ИК приемник, веб камера
// 4 байт датчик света
// 5 байт датчик напряжения
// 6 байт датчик топлива
// 7-12 зарезервированы
int LIGHT_SENS = 0 ; // Вход датчика освещености
int VOLT_SENS = 1 ; // Вход датчика напряжения
int FUEL_SENS = 2 ; // Вход датчика уровня топлива
int JOYSTIK_PIN = 5 ; // Вход для рулевых Кнопок
int NC2_SENS = 4 ; // Вход датчика
int NC1_SENS = 5 ; // Вход датчика
int NC3_SENS = 6 ; // Вход датчика
int NC4_SENS = 7 ; // Вход датчика
int RECV_PIN = 11; //вход ИК приемника
int back_cam = 6; //Вход активации камера заднего вида
int temperature = 5; //Вход датчика температуры
int encoder0PinA = 2 ; //Вывод А энкодера
int encoder0PinB = 3 ; //Вывод В энкодера
int encoder_botton = 4; //Вход кнопки энкодера
unsigned long res_dt, ir_dt, old_ir, time;
byte temp, cam_status;
IRrecv irrecv(RECV_PIN);
decode_results results;
//******************************************
void setup()
{
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор
pinMode(encoder_botton, INPUT);
digitalWrite(encoder_botton, HIGH); // подключить подтягивающий резистор
pinMode(back_cam, INPUT);
digitalWrite(back_cam, HIGH); // подключить подтягивающий резистор
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание interrupt 0 на pin 3
Serial.begin(115200); // настроить скорость com порт
irrecv.enableIRIn(); // включить приемник
}
//******************************************
void loop()
{
IR_resiver();
joystik();
cam();
if ((millis()-time)>1000 && results.value ==0) //запуск процедур по таймеру
{
time = millis();
autolight();
fuel();
voltmetr();
}
}
//*******************ИК приемник***********************
void IR_resiver()
{
if ((millis()-time)>1000 )
{
time = millis();
results.value=0;
}
if (irrecv.decode(&results))
{
if (results.value > 0 && results.value < 0xFFFFFFFF)
{
ir_dt = results.value;
bytes[0] = ir_dt & 0xFF; // преобразовать в 4-байта
bytes[1] = (ir_dt & 0xFF00) >> 8;
bytes[2] = (ir_dt & 0xFF0000) >> 16;
bytes[3] = (ir_dt & 0xFF000000) >> 24;
Serial.write( bytes,13); // отправить прочитаное значение компьютеру
if (old_ir == ir_dt){delay(300);} // Пауза после нажатия и удержания(перед повторами)
else {delay(500);}
old_ir = ir_dt;
}
if (results.value == 0xFFFFFFFF )
{
delay(130); //пауза между повторами
Serial.write( bytes,13);
}
irrecv.resume();
}
}
//****************резистивные кнопки**************************
void joystik()
{
res_dt = analogRead(JOYSTIK_PIN); // прочитать данные АЦП
if( res_dt < 1023 && results.value == 0)
{
delay(50); // пауза для проверки дребезга
if(res_dt == analogRead(JOYSTIK_PIN)) //если нет дребезга
{
bytes[0] = res_dt & 255; // преобразовать в 2-байта
bytes[1] = (res_dt & 768) >> 8;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,13); // отправить прочитаное значение компьютеру
delay(250); // Пауза между нажатиями
}
}
}
//******************Датчик освещения************************
void autolight()
{
byte light;
byte sens = analogRead(LIGHT_SENS)/4;
if ((sens > 0) && (sens<30)) {light = 2;}
if ((sens > 30) && (sens<60)) {light = 60;}
if ((sens > 60) && (sens<90)) {light = 90;}
if ((sens > 90) && (sens<120)) {light = 120;}
if ((sens > 120) && (sens<150)) {light = 150;}
if ((sens > 150) && (sens<190)) {light = 190;}
if (sens > 190) {light = 255;}
if(light != bytes[4]) // если были изменения
{
clear_buf();
bytes[4] = light;
Serial.write( bytes,13);
}
}
//*******************Измерение Напряжения***********************
void voltmetr()
{
temp = analogRead(VOLT_SENS)/4;
if(temp != bytes[5])
{
clear_buf();
bytes[5]=temp;
Serial.write( bytes,13);
}
}
//*******************Датчик топлива***********************
void fuel()
{
temp = analogRead(FUEL_SENS)/4;
if(temp != bytes[6])
{
clear_buf();
bytes[6]=temp;
Serial.write( bytes,13);
}
}
//*******************Активация веб камеры по сигналу ЗХ***********************
void cam()
{
temp=digitalRead(back_cam);
if(temp==HIGH && cam_status==0)
{
clear_buf();
cam_status=255;
bytes[1]=8;
Serial.write( bytes,13);
}
if(temp==LOW && cam_status==255)
{
clear_buf();
cam_status=0;
bytes[1]= 9;
Serial.write( bytes,13);
}
}
//*******************Активация веб камеры по сигналу ЗХ***********************
void clear_buf()
{
bytes[0] = 0;
bytes[1] = 0;
bytes[2] = 0;
bytes[3] = 0;
}
//*******************обработка прерывания***********************
void doEncoderA()
{
cli();
if(digitalRead(encoder0PinB)==HIGH){bytes[1]=24;}else{bytes[1]=15;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,13);
sei();
}
//*******************обработка прерывания***********************
void doEncoderB()
{
cli();
if(digitalRead(encoder0PinA)==HIGH){bytes[1]=15;}else{bytes[1]=24;}
bytes[0] = 0;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,13);
sei();
}
Схема
Вложение 11285
-
Re: Начинаю по тихоньку обьеденять в один скетчь.
Мне очень интересно, я тока вчера с кардуиной познакомился, но уже загорелся)). Желательно, чтобы скетч состоял из модулей, которые по желанию можно было убрать, чтобы освободить порты.
Например энкодер и рулевые кнопки одновременно в одном проекте мало кто будет использовать.
Кстати не нашел по форуму кода для задержек камеры ЗХ. Если выкладывал - ткни, плиз.
-
Re: Начинаю по тихоньку обьеденять в один скетчь.
Я постараюсь сделать программу на ПК универсальной по максимуму, а скетчи на кардуино всегда подправить можно.
Задержку камеры ЗХ сделаю.
-
Re: Начинаю по тихоньку обьеденять в один скетчь.
Это отличная идея. Удалить то что не требуется всегда легче чем вставить. Я уже все прошивки какие буду использовать по отдельности проверил а вот слепить их воедино никак не получается. Осталось только одну прошивку доделать для управления портами Arduino с кнопок руля по I-Bus шине.
-
Re: Начинаю по тихоньку обьеденять в один скетчь.
Chip, еще измерение температуры и вольтметр пожалуйста...
-
Re: Начинаю по тихоньку обьеденять в один скетчь.
Может энкодер который с нажатием? лишняя кнопочка добавится.
-
Re: Начинаю по тихоньку обьеденять в один скетчь.
Будет вращение, нажатие, нажатие + вращение
-
Re: Начинаю по тихоньку обьеденять в один скетчь для Carduino.
Предлагаю использовать конструкции #ifdef..#endif - чтобы весь функционал определять в одном месте программы
-
Re: Начинаю по тихоньку обьеденять в один скетчь для Carduino.
Можно попробовать и #ifdef..#endif использовать.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
У меня такое предложения.
Наверняка у многих уже есть неинтеллектуальные блоки питания... а тут такие возможности. Вот например я планирую управление питанием с использованием carduino, предлагаю добавить код для этого. Гибкое изменение режимов работы под себя - это однозначный плюс.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Потихоньку буду расширять функционал
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Вопрос всем, в первую очередь CHIPу. Кто как размещал или думал разместить Carduino в автомобиле. Хочется сделать какой-нибудь хитрый разъем, чтобы подключать туда по мере надобности новые датчики и прочие прибамбасы.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Плата с панелькой и обвесом.
А вообще пока все навесом и в термоусадку
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Активатор камеры ЗХ, Задержка включения камеры ЗХ
а вот это зачем?
у меня камера к подсветке ЗХ подключена.
И зачем ей делать задержку?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Это больше для коробки автомата. На автомате переключение с Паркинга на Драйв проходит через ЗХ. И монитор переключается на камеру и обратно. Учитывая инерционность переключения, это создает определенные неудобства. Т.е. нужно, чтобы монитор пропускал короткие импульсы переключения.
А при парковке в сложных условиях наоборот удобно, чтобы монитор не переключался туда-сюда, а создавал задержку на выключение камеры секунд на 10.
Т.е. алгоритм такой если от ЗХ поступает ипульс < Тзадан, то монитор не реагирует, если >Tзадан, то монитор переключается на КЗХ
и удерживается в этом режиме некоторое время.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
ааа
спасибо
то-то я думаю, что у меня моник с затормаживанием переходит на камеру
видать, такой же принцип применен
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
у мну идея маньяка уже неделю из головы не вылазием хочу создать модуль управления органами авто взять усб дилитель воткнуть туда 3 этих платки и флешку вставить релюхи и тд и тп что бы можно было и уровень топлива и скорость , тахометор положение ДЗ и т.д и т.п наблюдать на мониторе , + управлять люком зеркалами печкой стеклами и светом а также чтобы комп включил на таче пароль ввел а там кнопочка авто старт и кнопочка ручного управление чтобы зажигание бензо насос и стартер отдельно включались . по поводу параметров авто мне лично нуно у меня диагностику не подрубить а хочется поэтому хочу свой интерфейс диагностики сделать только вот одно но : не понимаю я нихрена в програмирование толком как делать в чем делать и тд . помогите кто нить ):D
-
Вложений: 1
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Для Chip.
Правильно ли я собрал в схему: резисторные кнопки, ИК-приемник, яркость монитора, вольтметр и темпиратуру?
Будет ли все пять работать вместе? Потянет ли Arduino?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Нет не правильно. Зачем столько резисторов на один вход вешать?
int LIGHT_SENS = 0 ; // Вход датчика освещености
int VOLT_SENS = 1 ; // Вход датчика напряжения
int FUEL_SENS = 2 ; // Вход датчика уровня топлива
int JOYSTIK_PIN = 3 ; // Вход для рулевых Кнопок
int RECV_PIN = 6; //вход ИК приемника
int back_cam = 5; //Вход активатора камеры
int encoder0PinA = 2 ; //Вывод А энкодера
int encoder0PinB = 3 ; //Вывод В энкодера
int encoder_botton = 4; //Вход кнопки энкодера
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Не селен я в этой схемотехнике... А как правильно объединить эти 5 проектов? Там нет температуры.
Спасибо.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
A0 ; // Вход датчика освещености
A1 ; // Вход датчика напряжения
A2 ; // Вход датчика уровня топлива
A3 ; // Вход для рулевых Кнопок
D6; //вход ИК приемника
D5; //Вход активатора камеры
D2 ; //Вывод А энкодера
D3 ; //Вывод В энкодера
D4; //Вход кнопки энкодера
-
Вложений: 1
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Уважаемый Chip,
нарисовал как мог после нашего вчерашнего разговора, просьба проверить.
- ИК-приемник
- Резисторные кнопки
- Энкодер
- Яркость монитора
Спасибо.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Поздно заметил :)
Выложил в шапке свою схему
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Chip спасибо за схемку:
1. Какие номиналы конденсаторов нужны для подключения энкодера?
2. В посте http://www.compcar.ru/forum/showthread.php?t=4640 есть еще конденсатор 0,1 мкф - куда его лучьше воткнуть в эту схему?
3. Простите за "тупость": вход А1 - это "+" на вольтметр, а "-" - подключаем на GND?
4. Просьба добавить температуру.
Спасибо.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
1- 0,1м
2-туда же где он нарисован
3- только не на сам вход а через делитель
-
Вложений: 1
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Правильно ли я модифицировал схему?
1. Конденсаторы по 1мкФ
2. Конденсатор 0,1 мкФ вставил между входом A5 и GND
3. Нашел по делителю напряжения http://www.gelezo.com/electricity/54...ryajeniya.html - нарисовал, попробовал расчитать по методике Chipa: "R1+R2=Rобщ Вычисляем общее сопротивление, сопротивление не должно быть меньше чем 1к на 5в
Vmax/Rобщ=Vpad Вычисляем напряжение падения на 1ком сопротивления
Vmax-(R2*Vpad)=Vout Вычисляем максимальное напряжение на аналоговом входе при максимальном на входе Vmax
Vout не должен превышать +5в , лучше с запасом расчитывайте"
- R1+R2=Rобщ=0,5+2=2,5
- Vmax/Rобщ=Vpad=20/2,5=8
- Vmax-(R2*Vpad)=Vout=20-(2*8)=4
Следовательно: R1=0,5k R2=2k - это правильно?
4. Добавил датчик темпиратуры, повесил его на вход D12.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Я бы D12 оставил для будующего этот вывод с SPI завязан.
лучше на D5 повесь
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Хорошо, а как быть с делителем напряжения?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Подправил и выложил в шапке
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
[QUOTE]"R1+R2=Rобщ Вычисляем общее сопротивление, сопротивление не должно быть меньше чем 1к на 5в
Vmax/Rобщ=Vpad Вычисляем напряжение падения на 1ком сопротивления
Vmax-(R2*Vpad)=Vout Вычисляем максимальное напряжение на аналоговом входе при максимальном на входе Vmax
Vout не должен превышать +5в , лучше с запасом расчитывайте"
- R1+R2=Rобщ=0,5+2=2,5
- Vmax/Rобщ=Vpad=20/2,5=8
- Vmax-(R2*Vpad)=Vout=20-(2*8)=4
Следовательно: R1=0,5k R2=2k - это правильно?/QUOTE]
почти правильно только на 1 нолик ошибся , будет как на схеме 5,1к и 22к читом виде 5к в природе не бывает
-
Вложений: 1
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Спасибо за разъяснения.
Еще вопросик: в теме http://www.compcar.ru/forum/showthread.php?t=4600 одна ножка фото-резистора подключена на +5В, а другая на вход А0 и через резистор на GND, а в схеме All-in-one - наоборот. Как правильно?
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
По большому счету без разницы, просто сигнал будет инверсный
Если не мудрить с инвертированием то правильно ФР к +5
-
Вложений: 1
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Тогда более правильная объединенная схема будет выглядеть вот так:
еще добавил фильтр на ИК-приемник.
-
Вложений: 1
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Доделываю блок управления (осталось фоторезистор встроить).
Объединил: энкодер, резисторные кнопки, ИК-пульт и яркость монитора.
Все работает, но есть замечание: когда меняется освещенность - ничего больше не работает (а происходит это довольно часто)!!!
Chip, просьба подправить объединенный скетч и программу. Добавить нажатие энкодера. Можно удалить все лишнее...
Спасибо.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Serg_w, а можно лицевую часть данного девайса выложить, очень понравилась твоя идея..
-
Вложений: 1
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Пожалуйста...
Нижний ряд - резисторные кнопки. Вырезаны из клавиатуры Жениус и встроены. За ними плата с микриками и сопротивлениями http://www.compcar.ru/forum/showpost...&postcount=106
Второй ряд - ИК-приемник, кнопка вкл/выкл всей системы, кнопка вкл PC, диоды HDD и Power-led, Энкодер, два USB.
Резисторные кнопки, ИК-приемник и Энкодер заведены по проекту All-In-One на Arduino.
Туда же заведен фото-резистор, но пока не встроен. По нему терзают сомнения - когда он отрабатывает, все остальное не работает, а отробатывает он несколько секунд (выход - увеличить диапазоны срабатывания).
Еще раз попрошу Chipa подправить скетч и программу для All-In-One...
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Подскажите в чем беда, подаю на ардуину нано 12в на VIN, по идее все нормально, с выхода +5 выходит 5в, схема работает, но через неско секунд выходы перестают работать, а чип BL05A дико греется.
если запитать 5ю вольтами то все ок.
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
А что еще подключено к Ардуино?
-
Вложений: 1
Re: Объединенный проект для Carduino (Arduino) All-In-One.
много чего подключено. я пробовал частично отрубать вх-выходы и проверять - ничего.
стало так греться после подключения выходов (к светодиодной шкале) таким способом...
-
Re: Объединенный проект для Carduino (Arduino) All-In-One.
Судя по схеме ничего криминального.
Но если греется то значит гдето большой ток , нужно все подключения смотреть.