Ардуино в машину

Sergey-88
Offline
Зарегистрирован: 12.04.2013
Добрый день. имеется Arduino UNO R3
Хочу установить его в машину, для выполнения 2х задач для начала в будущем доработаю до ещё чего нибудь.
 
1. Цель: Закрытие авто после постановки на охрану. (авто со smartkey поэтому сигналка работает по принципу метка есть или нет и не умеет закрывать двери, приходится нажимать кнопку smartkey но бывало что забывал).
 
условия по которым должно выполняться действие: 
- автомобиль заглушен (определяется по "плюсу" есть или нету)
- двери закрыты (определяется по "минусу" есть или нету  (Могу инвертировать в "Плюс" если нужно)
- у сигнализации есть лампочка которая мигает рас в 2 секунды по несколько раза  имеет 2 цвета (зелёный снята с охраны, красный стоит на охране) цель брать пин от красного цвета. Пока по поводу лампочки не уверен не знаю как она устроена к ней идёт 2 провода как горит 2 цвета не понимаю ладно позже разберусь.
 
в итоги когда все эти условия срабатывают нужно
подать кратко временный сигнал закрытия дверей.
___
Нужно чтобы эта задача срабатывала один рас. И срабатывала заново только после запуска двигатель.
 
2. Цель подать сигнал после выполнения условий
 
условие:
- автомобиль заглушен
- если дверь открывалась, отсчитывается 10 секунд. на выполнение следующего условия.
- появляется "Плюс" на один из пин ардуино
 
и после этого через (0.5 секунды)
подаётся сигнал (на 1 секунды)
 
В электронике немного соображаю спаять смогу, а вот с программирование чего то как то не складывается.
Не знаю с чего начать. Прошу помочь с кодом.
leshak
Offline
Зарегистрирован: 29.09.2011

 

Возможные варианты:

1. Кто-то пишет скетч за вас
   а. Ищите исполнителя за деньги
   
б. Надеетесь что кому-то будет не лень "просто так" его написать (это возможно, случается)
2. Пишете сами, разбираетесь с програмированием в объеме необходимым для решения задачи.

 

Вариан 1 - там все очевидно. 

В варианте - 2. Читаете документацию, учитесь работать с кнопками, диодами, как согласовывать 5v и 12v. Вообщем дробите задачу на составляющие и ищите их решения (как читать состояние, как "выполнить через 0.5 сек) и т.п. Читаете форум, ищите как другие уже решали эти задачи. Не обязательно это будет "сигнализация в машине", это может быть и "как зажечь диод через 2 секунды после нажатия кнопки на 5 сек". Важно понять принцип. Вообщем "пробуете", что-то не получается - спрашиваете. В этом случае вопросы уже будут более конкретные и видно что "челвек сам пытается". Обычно в таких случаях помогают более охотно.

И еще есть "вариант 3": можете просто не обращать внимание на мои размышления/болтологию :)

leshak
Offline
Зарегистрирован: 29.09.2011

Если решите все-таки "сами делать", то 

>Не знаю с чего начать

Традиционно начинают со скетча Blink - учатся мигать диодом.

Потом  что подключите к дуине обычную кнопку. И научитесь ловить ее нажатие и отправлять в Serial сообщение что она нажата, или зажигать диод встроенный. Почитайте ветку прикрепленную про кнопки, потом... ну если пойдете по этому пути, тогда придумаем что дальше освоить нужно что-бы вашу задачу решить.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Доброго времени суток. Я ещё сам нубик, но могу помочь с кодом, там сложного ничего нет, блинки и кнопки уже прошёл, сейчас колдую с ЖКИ, но тоже нужно решить одну проблемку, которая будет являться частью Вашего кода, это мигание светодиода, точнее распочнать частоту 1 Гц (в Вашем случаи 0,5Гц). Если гуру этого форума нам в этой части кода помогут, остальное заболтаем, смоделируем и воплотите.   Для начала нужно немного решить аппаратный вопрос, т.е. в машине 12 вольт, ну нолик и в Африке нолик, главное чтоб не развязанны гальванически были или наоборот развязать через оптопары, тогда не важно что подавать, нолик или + 12В. Ещё более упрощённой схемой будет через резистор, входы подтянуть на 15, а лучше 10 Ком, и останется только подобрать резистор чтоб при подаче 14,5 вольт на пине было не больше 5 вольт. Можно конечно и кренить каждый сигнал......в общем определяйтесь аппаратно, а с кодом поэксперементируем.

во втором случаи, как я понял, нужен звуковой сигнал при открытой, или не плотно закрытой двери, там ещё легче. И...если заинтересует, дуинку можно "попросить" издавать свой сигнал.

Sergey-88
Offline
Зарегистрирован: 12.04.2013

Спасибо за помощь.

С ламопчкой разобрался, если +/- то зелёная, если -/+ то красная.

По поводу двери все равно открыта дверь или закрыта. Нужно что бы это событие срабатывало в момоент открытия двери отсчитывало 10 секунд может 15, и чтобы отсчёт продолжался после закрытия двери. 

По поводу сигнала не правильно объяснил нужно просто подать питание на одном из конетактов arduino.

leshak
Offline
Зарегистрирован: 29.09.2011

>По поводу сигнала не правильно объяснил нужно просто подать питание на одном из конетактов arduino.

Вот тут осторожно. В машине все 12-ти вольтовое. А дуина - пяти вольтова. 12-ть вольт - спалят ее входы.

Так что нужно согласовывать. Благо не сложно.

Принципы тут :Согласование логических уровней 5В и 3.3В устройств / Схемотехника / Сообщество EasyElectronics.ru

Там для согласования 3v/5v, а у вас 5v/12v - но принцип - тот же.

Лично мне импонирует вариант "диодный интерфейс" своем соотношением простота/безопастность. В случае когда нужно просто узнать "есть там напряжение или нет" - не обязательно искать именно диод шотки. Простой диод подойдет. Только с запасом взять. Как минимум на 25v. 

Кондер - думаю можно сократить если шума не много. Да и резистор R1 можно ставить, а можно внутрений подтягивающий попытатся включить.

Snubist
Offline
Зарегистрирован: 18.02.2013

Sergey-88 Ну раз вы определились с сигналами, что подключать, куда подключать, и как подключать. То нарисуйте полную схему, на какой пин через какое согласование что приходит и что, через какое согласование и на какой исполнительный механизм уходит (вам ведь все равно по ней собирать). А уж потом можно и про программу говорить.

toc
Offline
Зарегистрирован: 09.02.2013

Sergey-88,  предполагаю, что с этой задачей великолепно справится чип attiny13a. Но с ним сложнее, чем с UNO.

Sergey-88
Offline
Зарегистрирован: 12.04.2013

Нарисовал схему, сильно не пинайте...

Так как у меня под рукой только куча не использованных реле, решил на них заморочиться. 

Надеюсь все понятно если что спрашивайте...

Snubist
Offline
Зарегистрирован: 18.02.2013

Первое, на светодиод от сигналки сколько вольт идет? обычно 12,так что лучше поставить тоже реле в развязку.

Второе, при таком подключении к замкам двери, получишь КЗ,и как следствие выгорание предохранителей минимум. Или ты их совсем отключишь от штатной сигнализации?

А остальное вроде правильно. Хотя можно оптопарами развязать, но дело хозяйское.

Значит в итоге будет:

Пин 5 - (выход) закрытие двери,

Пин 6 - (выход) Сделать еще что то,

Пин 9 - (вход) Сигнализация в режиме охраны,

Пин 10- (вход) Дверь открыта,

Пин 11- (вход) Включен замок зажигания.

Sergey-88
Offline
Зарегистрирован: 12.04.2013

Светодиод от сигналки точно 5v. от замка двери попробую подключиться в приборной панели там думаю 12v светодиод. 

Что значит "можно оптопарами развязать"?

По пинам первоначально так, если нужно можно другие.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Оптопарами это значит что можно просто на светодиод оптопары через резистор подать 12 в. Это напрящение не как ни будет связано с контроллером, а эмитер и колектор той же оптопары посадить на +5В и нужный пин. Это и есть гальваническая развязка. На пин не прийдёт напряжение больше чем питание МК. DIP корпуса будет достаточно.

И зачем Вам китайская зарядка, подавайте на дуину бортпитание, у неё своя кренка установлена. ещё и защита от козы.

От диода сигналки лучше всё-равно добавить резистр на килоом, и так на пине будет логическая еденица, это страховка чтоб порт не спалить.

 

Snubist
Offline
Зарегистрирован: 18.02.2013

В случае пяти проводных замков двери, можно(и даже лучше добавить) Еще один сигнал, "дверь заперта"

Реле один и два, можно заменить на оптопары, о чем и говорилось выше.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

По пяти проводной я бы и верхнее реле с фото убрал. Те три провода, это управляющие сигналы, можно нолик прям на них подавать (импульсом на один из них), а если определиться со второй задачей, то и другое реле убрать (вобще без этого блока обойтись.

Snubist
Offline
Зарегистрирован: 18.02.2013

Можно, но если уж делать развязку, то развязывать все. А опто пару я просто изобразил что бы человек понял, на что заменить реле. Кстати и включение оптопары нарисовал не совсем корректно, но главное что бы человек понял.

Sergey-88
Offline
Зарегистрирован: 12.04.2013

 

Как работает оптопара я понял. пока нету её под рукой, буду искать. По поводу замка понял что нужно буду разбираться, всё же остаётся основная проблема это сам скетч.
 

 

Sergey-88
Offline
Зарегистрирован: 12.04.2013

Кстати по поводу питания ардуино от бортовой сети, где то прочитал что это не очень полезно для ардуино, может начать перегреваться.

Snubist
Offline
Зарегистрирован: 18.02.2013

ну если с пинами определились то начинаем писать

const int CloseDoor = 5;   //Выход на закрытие двери
const int Out2 = 6;        //Выход 2
const int DoorBlocked = 8; //Вход зипирание двери
const int SysAlarmOn = 9;  //Вход Включение сигнализации
const int DoorOpening = 10;//Вход открытие двери
const int IgnKeyOn = 10;   //Вход включение зажигания

void setup() {
  pinMode(CloseDoor, OUTPUT);       // устанавливает режим работы - выход
  pinMode(Out2, OUTPUT);            // устанавливает режим работы - выход
  pinMode(DoorBlocked, INPUT);      // устанавливает режим работы - вход 
  pinMode(SysAlarmOn, INPUT);       // устанавливает режим работы - вход 
  pinMode(DoorOpening, INPUT);      // устанавливает режим работы - вход 
  pinMode(IgnKeyOn, INPUT);         // устанавливает режим работы - вход 

}

void loop() {                        //Основная программа
  if (digitalRead(IgnKeyOn)==LOW)   //Проверяем выключено ли зажигание
    {
     //выполняем то что должно выполнятся при выключенном зажигании
    if (digitalRead(SysAlarmOn)==HIGH) // проверяем включен ли режим охраны
        {
        //выполняем
        } 

    }
   else
    { 
     // выполняем то что должно выполнятся при включенном зажигании
    }
  
}

Ну а дальше по аналогии сам.

Пробуй, спрашивай.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

"Sergey-88" пишет:
Кстати по поводу питания ардуино от бортовой сети, где то прочитал что это не очень полезно для ардуино, может начать перегреваться.

А что греться начнёт!? Там, если я не ошибаюсь, кренка на 1,5 Ампера, Вы будете использовать ресурс не более чем на 10%, с чего ей грется!? Я бы по этому поводу не парился, лишний хард не нужен, зачем усложнять. ИМХО всё нужное не сложно - всё сложное не нужно.

Osseum
Offline
Зарегистрирован: 25.04.2013

Если использовать питание напрямую от бортовой сети и если землю arduino подключить к массе, то вместь реле можно использовать делители напряжения на резисторах.

 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

При этом подтягиваем 10кОм, входное 22кОм - 24кОм, При значениях Uвх = 14,2В Uвых = 4,2В.

Sergey-88
Offline
Зарегистрирован: 12.04.2013

Вчера покапался в двери авто, нашол контакт по каторому можно определить закрыт замок или нет, но есть одно но: когда замок закрыт по нему 0.26v но через ~7 секунд становится 1.8v когда заком открыт там 0.0v. вопрос в следующем 0.26v достаточно для ардуино чтобы понять замок закрыт или нет?

olegab
Offline
Зарегистрирован: 09.04.2013

а если к аналоговому входу подключить?

Snubist
Offline
Зарегистрирован: 18.02.2013

Развяжешь диодом и подтянешь к плюсу.

Sergey-88
Offline
Зарегистрирован: 12.04.2013

Вот сочинил код, Возможно где то что то не так...

В коде написал где реально не знаю как писать, прошу помочь.

Написал 2 задачи но не знаю будут ли они так работать?

Сам код буду сегодня вечером проверять.

 

const int CloseDoor = 5;   //Выход на закрытие двери
const int Out2 = 6;        //Выход снятие блокировки
const int SecretKey = 7;   //Кнопка секретка 
const int DoorBlocked = 8; //Вход Замка двери LOW открыт HIGH закрыт
const int SysAlarmOn = 9;  //Вход Включение сигнализации
const int DoorOpening = 10;//Вход открытие двери    LOW закрыты HIGH открыты
const int IgnKeyOn = 11;   //Вход зажигания    LOW заглушен HIGH заведен

void setup() 
{
  pinMode(CloseDoor, OUTPUT);  // устанавливает режим работы - выход
  pinMode(Out2, OUTPUT);       // устанавливает режим работы - выход
  pinMode(SecretKey, INPUT);   // устанавливает режим работы - вход
  pinMode(DoorBlocked, INPUT); // устанавливает режим работы - вход 
  pinMode(SysAlarmOn, INPUT);  // устанавливает режим работы - вход 
  pinMode(DoorOpening, INPUT); // устанавливает режим работы - вход 
  pinMode(IgnKeyOn, INPUT);    // устанавливает режим работы - вход 
}

void loop() 

{    //Основная программа
  if (digitalRead(IgnKeyOn)==LOW) //Проверяем выключено ли зажигание
    {
     if (digitalRead(SysAlarmOn)==HIGH) // проверяем включен ли режим охраны
       {
        delay(10000);                       //Ждём 10 секунд
        if (digitalRead(DoorOpening)==LOW)  //проверяем закрыта ли дверь
         {
          if (digitalRead(DoorBlocked)==LOW)//проверяем замок двери
           {
            //выполняем
              digitalWrite(CloseDoor, HIGH);   
              delay(100);                  // пауза
              digitalWrite(CloseDoor, LOW);// закрываем замок
            //после этого DoorBlocked = HIGH
           }
         }
       } 
    }
   else
    { 
     //выполняем то что должно выполнятся при включенном зажигании
    }
}


{   //Задача вторая 
  if (digitalRead(IgnKeyOn)==LOW)       //Проверяем выключено ли зажигание
   {
    if (digitalRead(DoorOpening)==HIGH) //проверяем открывалась ли дверь

     // после этого нужно чтобы полош отсчёт 10 секунд
     // на выполнение следующего "if"
     // как этого написать незнаю.

      {
       if (digitalRead(SecretKey)==HIGH)  // проверяем нажата ли кнопка
        {
          digitalWrite(Out2, HIGH);
          delay(100);
          digitalWrite(Out2, LOW); 
          delay(5000);    //после этого делаем паузу 
                          //5 секунд чтобы задача не пошла заново.
                          //в течении 5 секунд я успею включить зажигание
        }
      } 
   }
   else
    { 
     // выполняем то что должно выполнятся при включенном зажигании
    }
}

 

Snubist
Offline
Зарегистрирован: 18.02.2013

Ничего для первого раза.

Только импульс на замок не 100мс, а 700.

условие if (digitalRead(IgnKeyOn)==LOW)  одинаково в обоих задачах, зачем проверять два раза, заведи в один блок

про отсчет времени почитай http://arduino.ru/tutorials/BlinkWithoutDelay

и убери если не используешь последнее else {}

Собери на прототипке, вместо датчиков кнопки и выключатели, вместо исполнительных светодиоды. Удобнее моментально менять программу и тудже проверять как работает.

Sergey-88
Offline
Зарегистрирован: 12.04.2013

Собрал прототип 

Вот что получилось

Когда собрал понял что нельзя использовать delay(100) придётся дальше мудрить с кодом.

Кстати заходил в один из магазинчиков за оптопарой, мне девушка дала каталог и говор выбирайте и говорите артикул какой вам нужен... а там их более 100 разновидностей я запутался и ушёл нес чем....

Прошу помочь с оптопарой.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Такая же фигня была, сказал дайте что с краю, взял жменьку, открыл параметры и подогнал под схему, промерел токи на пинах МК, оптопары и транзисторах, 20 - 30% от максимального. Вот пробуйте эти EL817 http://www.sztuofeng.com/pdf/亿光EL817.pdf

резистиор от пина 470 ом, ток 6,5 мА. ток КЭ оптопары 20мА (мах 50мА)