Страница 1 из 6 123456 ПоследняяПоследняя
Показано с 1 по 10 из 57
  1. #1
    Продвинутый Аватар для Pinin
    Регистрация
    04.01.2009
    Возраст
    59
    Сообщений
    213
    Вес репутации
    231

    По умолчанию Радар-детектор и Arduino

    Исходные данные:

    РД Stinger S650 - две управляющие кнопки (выбор режимов, навигация по меню и т.п.), потенциометр регулировки громкости (он же включение/выключение), разъем внешнего питания.

    Задача:

    Скрытый монтаж в салоне. Т.е. доступа к управлению нет, цифровой индикатор вынесен, корпус выкинут и т.п. Система завязана на карписю. Включаться должна вместе с ним, при подаче АСС, так же должна быть возможность вырубить ее в любой момент, не выключая при этом комп (ну и естественно - не глуша двигатель).

    Ньюансы:

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

    Воплощение:

    Собран макет. Схема в принципе понятна из листинга: к цифровым выходам подключены управляющие входы сильноточных (других под рукой не оказалось) оптронов, выходы двух из которых будут замыкать контакты управляющих кнопок РД, выход третьего - коммутировать 12 V питания на него. Чтобы не париться с короткими/длинными нажатиями, в интерфейсе управления планируется сделать отдельные кнопки на каждый тип нажатия (т.е. с учетом кнопки питания - 5 штук пока).

    В этой редакции проги не учтена пока еще необходимость регулировки уровня звука (откровенно забыл про это ), и самое главное - ввиду непонимания пока как именно будет организовано плечо "комп-ардуина" - управление идет не по COM-порту, а замыканием на питание управляющих входов контроллера...

    PHP код:
    /*
      Пять кнопок: 
      Вкл/Выкл питания нагрузки
      Режим 1 (короткое нажатие)
      Режим 1 (длинное нажатие)
      Режим 2 (короткое нажатие)
      Режим 2 (длинное нажатие)
     
     Питание на нагрузку подается либо при начальной инициализации системы, 
     либо программно (для вкл/выкл нагрузки без снятия питания со всей системы)
     По включению питания формируется импульс сброса самотестирования нагрузки. 
     
     
     The circuit:
     * Оптрон Режима 1  attached from pin 9 to ground 
     * Оптрон Режима 2  attached from pin 11 to ground
     * Оптрон Вкл/Выкл  attached from pin 7 to ground
     * Иммитация короткого нажатия режима 1 attached to pin 2 from +5V
     * 10K resistor attached to pin 2 from ground
     * Иммитация длинного нажатия режима 1 attached to pin 3 from +5V
     * 10K resistor attached to pin 2 from ground
     * Иммитация короткого нажатия режима 2 attached to pin 4 from +5V
     * 10K resistor attached to pin 4 from ground
     * Иммитация длинного нажатия режима 2 attached to pin 5 from +5V
     * 10K resistor attached to pin 5 from ground
     * pin 8 attached to pin 11   
     * pin 7 attached to pin 12
      
      ******************
     modified 22.01.2010
      */

    // constants won't change. They're used here to 
    // set pin numbers:
    const int buttonPin1 12;     // Вход с питания
    const int buttonPin2 8;     // Вход с формирователя сброса
    const int buttonPin3 2;     // Режим 1 короткое нажатие
    const int buttonPin4 3;     // Режим 1 длинное нажатие
    const int buttonPin5 4;     // Режим 2 короткое нажатие
    const int buttonPin6 5;     // Режим 2 длинное нажатие
    const int buttonPin7 6;     // Включение/выключение питания
    const int ledPin4 =  9;       // Управление 1 режимом
    const int ledPin5 =  11;      // Управление 2 режимом/Ипульс сброса теста
    const int ledPin2 =  7;      // Включение нагрузки



    // variables will change:
    int buttonState 0;         // variable for reading the pushbutton status

    void setup() {
      
    // initialize the LED pin as an output:
      
    pinMode(ledPin2OUTPUT);
      
    pinMode(ledPin4OUTPUT); 
      
    pinMode(ledPin5OUTPUT);
        
    // initialize the pushbutton pin as an input:
      
    pinMode(buttonPin1INPUT);
      
    pinMode(buttonPin2INPUT);
      
    pinMode(buttonPin3INPUT);  
      
    pinMode(buttonPin4INPUT);
      
    pinMode(buttonPin5INPUT);  
      
    pinMode(buttonPin6INPUT);
      
    pinMode(buttonPin7INPUT);

        
    // turn LED on:    
        
    digitalWrite(ledPin2HIGH); // Первое включение системы
       
      // read the state of the pushbutton value:
      
    buttonState digitalRead(buttonPin1);

      
    // check if the pushbutton is pressed.
      // Если питание подано, формируется импульс сброса с задержкой 2 сек:
      
    if (buttonState == HIGH) {     
        
    // turn LED on: 
       
    delay(2000);                  // пауза на сброс теста for a 2 second 
        
    digitalWrite(ledPin5HIGH); // Импульс сброса 2 сек 
       
    delay(1000);  
      } 
      else {
      }
    }

    void loop() {
      
    // Если нагрузка уже инициалирована, переход в рабочую программу
      
    while (digitalRead(buttonPin1) == HIGH) {
         
    work(); 
       }
        
    // Если нагрузка не инициалирована, переход в инициализацию
      
    while (digitalRead(buttonPin1) == LOW) {
         
    initial(); 
       }
    }
    void initial(){   
      
    delay(1000);                  // пауза на включение
       // Выбор режима Вкл/Выкл:
      
    buttonState digitalRead(buttonPin7);
      
      
    // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (buttonState == HIGH) {     
        
    // turn LED on:    
        
    digitalWrite(ledPin2HIGH); // Включение питания
         

      else {
          }
      
    // read the state of the pushbutton value:
      
    buttonState digitalRead(buttonPin1);

      
    // check if the pushbutton is pressed.
      // Если питание подано, формируется импульс сброса с задержкой 2 сек:
      
    if (buttonState == HIGH) {     
        
    // turn LED on: 
       
    delay(2000);                  // пауза на сброс теста for a 2 second 
        
    digitalWrite(ledPin5HIGH); // Импульс сброса 2 сек 
       
    delay(1000);  
      } 
      else {
      }

       
    // Если импульс сброса сформирован, переход к рабочему циклу
       
    while (digitalRead(buttonPin2) == HIGH) {
         
    work(); 
       }
    }

    void work(){
      
    digitalWrite(ledPin5LOW); // Снятие импульса сброса
      // Выбор режима 1 короткое/длинное нажатие:
      
    buttonState digitalRead(buttonPin3);
      
      
    // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (buttonState == HIGH) {     
        
    // turn LED on:    
        
    digitalWrite(ledPin4HIGH); 
       
    delay(1000);                  // Короткое нажатие (Реж.1)
      
    digitalWrite(ledPin4LOW);    // set the LED off 
      

      else {
        
    // turn LED off:
        
    digitalWrite(ledPin4LOW); 
      }
      
    buttonState digitalRead(buttonPin4);
      
      
    // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (buttonState == HIGH) {     
        
    // turn LED on:    
        
    digitalWrite(ledPin4HIGH); 
       
    delay(5000);                  // Длинное нажатие (Реж.1)
      
    digitalWrite(ledPin4LOW);    // set the LED off 
      

      else {
        
    // turn LED off:
        
    digitalWrite(ledPin4LOW); 
      }
      
    // Выбор режима 2 короткое/длинное нажатие:
      
    buttonState digitalRead(buttonPin5);
      
      
    // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (buttonState == HIGH) {     
        
    // turn LED on:    
        
    digitalWrite(ledPin5HIGH); 
       
    delay(1000);                  // Короткое нажатие (Реж.2)
      
    digitalWrite(ledPin5LOW);    // set the LED off 
      

      else {
        
    // turn LED off:
        
    digitalWrite(ledPin5LOW); 
    }
    // read the state of the pushbutton value:
      
    buttonState digitalRead(buttonPin6);
      
      
    // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (buttonState == HIGH) {     
        
    // turn LED on:    
        
    digitalWrite(ledPin5HIGH); 
       
    delay(5000);                  // Длинное нажатие (Реж.2)
      
    digitalWrite(ledPin5LOW);    // set the LED off 
      

      else {
        
    // turn LED off:
        
    digitalWrite(ledPin5LOW); 
      }
      
      
    // Включение/выключение питания:
      
    buttonState digitalRead(buttonPin7);
      
      
    // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (buttonState == HIGH) {     
        
    // turn LED on:    
        
    digitalWrite(ledPin2LOW); 
       
    delay(1000);                  // 
      
    digitalWrite(ledPin2LOW);    // set the LED off 
      

      else {
      }
      

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

  2. #2
    Наисистемниший Аватар для Stasik
    Регистрация
    09.06.2008
    Возраст
    43
    Сообщений
    595
    Вес репутации
    410

    По умолчанию Re: Радар-детектор и Arduino

    А цель то какая всего этого? Просто скрыть от глаз и ушей? Вот еслиб данные в комп вводить....

  3. #3
    Продвинутый Аватар для Pinin
    Регистрация
    04.01.2009
    Возраст
    59
    Сообщений
    213
    Вес репутации
    231

    По умолчанию Re: Радар-детектор и Arduino

    Для начала - да: просто втыкать РД на торпедо - провоцировать слишком многих. Опять же, врожденный дефект зверушки (реакция ее на включение питания) раздражает, а это - прекрасная возможность изящно обойти его. Ну и концептуально - все системы должны быть интегрированы (и между собой, и в целом).

    А касательно введения данных в комп - тут уже столько копий поломали на эту тему...
    Я пока для себя не вижу такой необходимости.

    Можно было бы звук оповещения отключать в зависимости от скорости (глушить его, например, при скоростях ниже 30 км/ч) - так опять же: смысл РД не только в том, чтобы упредить определение твоей текущей скорости, но еще и в предупреждении о самом факте засады на дороге. А в свете этого - идея бессмысленная... Хотя завести в прогу данные из GPS, полагаю, несложно.

    Вот только зачем?
    Последний раз редактировалось Pinin; 27.01.2010 в 09:47.

  4. #4
    Продвинутый Аватар для Pinin
    Регистрация
    04.01.2009
    Возраст
    59
    Сообщений
    213
    Вес репутации
    231

    По умолчанию Re: Радар-детектор и Arduino

    Версия программы для Arduino под управление через последовательный порт компа.

    PHP код:
    /*
      Управление радар-детектором Stinger S650 с carpc через интерфейс RR
      
     Питание на нагрузку подается либо при начальной инициализации системы, 
     либо программно (для вкл/выкл нагрузки без снятия питания со всей системы)
     По включению питания формируется импульс сброса самотестирования нагрузки. 
     
     
     The circuit:
     * Оптрон Режима 1  attached from pin 9 to ground 
     * Оптрон Режима 2  attached from pin 11 to ground
     * Оптрон Вкл/Выкл  attached from pin 7 to ground
     * pin 8 attached to pin 11   
     * pin 7 attached to pin 12
      
      ******************
     modified 29.01.2010
      */

    // constants won't change. They're used here to 
    // set pin numbers:
    const int buttonPin1 12;     // Вход с питания
    const int buttonPin2 8;     // Вход с формирователя сброса
    const int buttonPin7 6;     // Включение/выключение питания
    const int ledPin4 =  9;       // Управление 1 режимом
    const int ledPin5 =  11;      // Управление 2 режимом/Ипульс сброса теста
    const int ledPin2 =  7;      // Включение нагрузки
    int val;


    // variables will change:
    int buttonState 0;         // variable for reading the pushbutton status

    void setup() {
      
    Serial.begin(115200);              //установка порта 
      // initialize the LED pin as an output:
      
    pinMode(ledPin2OUTPUT);
      
    pinMode(ledPin4OUTPUT); 
      
    pinMode(ledPin5OUTPUT);
        
    // initialize the pushbutton pin as an input:
      
    pinMode(buttonPin1INPUT);
      
    pinMode(buttonPin2INPUT);
      
    pinMode(buttonPin7INPUT);

        
    // turn LED on:    
        
    digitalWrite(ledPin2HIGH); // Первое включение системы
       
      // read the state of the pushbutton value:
      
    buttonState digitalRead(buttonPin1);

        
    // Если питание подано, формируется импульс сброса с задержкой 2 сек:
      
    if (buttonState == HIGH) {     
        
    // turn LED on: 
       
    delay(2000);                  // пауза на сброс теста for a 2 second 
        
    digitalWrite(ledPin5HIGH); // Импульс сброса 1 сек 
       
    delay(1000);  
      } 
      else {
      }
    }

    void loop() {
      
    // Если нагрузка уже инициалирована, переход в рабочую программу
      
    while (digitalRead(buttonPin1) == HIGH) {
         
    work(); 
       }
        
    // Если нагрузка не инициалирована, переход в инициализацию
      
    while (digitalRead(buttonPin1) == LOW) {
         
    initial(); 
       }
    }
    void initial(){   
      
    delay(1000);                  // пауза на включение
       // Выбор режима Вкл/Выкл:
      
    if (Serial.available())          //если есть принятый символ, 
      
    {
        
    val Serial.read();            //  то читаем его и сохраняем в val  
       
      
    buttonState digitalRead(buttonPin7);
      
      
    // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (val == 'd') {     
        
    // turn LED on:    
        
    digitalWrite(ledPin2HIGH); // Включение питания
         

      else {
          }
      
    // read the state of the pushbutton value:
      
    buttonState digitalRead(buttonPin1);

      
    // check if the pushbutton is pressed.
      // Если питание подано, формируется импульс сброса с задержкой 2 сек:
      
    if (buttonState == HIGH) {     
        
    // turn LED on: 
       
    delay(2000);                  // пауза на сброс теста for a 2 second 
        
    digitalWrite(ledPin5HIGH); // Импульс сброса 2 сек 
       
    delay(1000);  
      } 
      else {
      }

       
    // Если импульс сброса сформирован, переход к рабочему циклу
       
    while (digitalRead(buttonPin2) == HIGH) {
         
    work(); 
       }
    }
    }

    void work(){
      
    digitalWrite(ledPin5LOW); // Снятие импульса сброса
      // Выбор режима 1 короткое/длинное нажатие:
      
      
    if (Serial.available())          //если есть принятый символ, 
      
    {
        
    val Serial.read();            //  то читаем его и сохраняем в val 
      
      //buttonState = digitalRead(buttonPin3);
      
      // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (val == '1') {     
        
    // turn LED on:    
        
    digitalWrite(ledPin4HIGH); 
       
    delay(1000);                  // Короткое нажатие (Реж.1)
      
    digitalWrite(ledPin4LOW);    // set the LED off 
      

      else {
        
    // turn LED off:
        
    digitalWrite(ledPin4LOW); 
      }
      
    //buttonState = digitalRead(buttonPin4);
      
      // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (val == '3') {     
        
    // turn LED on:    
        
    digitalWrite(ledPin4HIGH); 
       
    delay(3000);                  // Длинное нажатие (Реж.1)
      
    digitalWrite(ledPin4LOW);    // set the LED off 
      

      else {
        
    // turn LED off:
        
    digitalWrite(ledPin4LOW); 
      }
      
    // Выбор режима 2 короткое/длинное нажатие:
      //buttonState = digitalRead(buttonPin5);
      
      // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (val == '5') {     
        
    // turn LED on:    
        
    digitalWrite(ledPin5HIGH); 
       
    delay(1000);                  // Короткое нажатие (Реж.2)
      
    digitalWrite(ledPin5LOW);    // set the LED off 
      

      else {
        
    // turn LED off:
        
    digitalWrite(ledPin5LOW); 
    }
    // read the state of the pushbutton value:
      //buttonState = digitalRead(buttonPin6);
      
      // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (val == '7') {     
        
    // turn LED on:    
        
    digitalWrite(ledPin5HIGH); 
       
    delay(3000);                  // Длинное нажатие (Реж.2)
      
    digitalWrite(ledPin5LOW);    // set the LED off 
      

      else {
        
    // turn LED off:
        
    digitalWrite(ledPin5LOW); 
      }
      
      
    // Включение/выключение питания:
      //buttonState = digitalRead(buttonPin7);
      
      // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      
    if (val == 'd') {     
        
    // turn LED on:    
        
    digitalWrite(ledPin2LOW); 
       
    delay(1000);                  // 
      
    digitalWrite(ledPin2LOW);    // set the LED off 
      

      else {
      }
      }

    В данной версии еще не реализовано управление громкостью динамика.

    Мои благодарности Chip`у и AlexNS за неоценимую помощь, оказанную при написании проги для фронт-энда (тема об этом)

  5. #5
    Новичок
    Регистрация
    21.08.2009
    Сообщений
    4
    Вес репутации
    0

    По умолчанию Re: Радар-детектор и Arduino

    Pinin если не сложно, расскажи куда именно спрятал радар-детектор... т.к. сам голову ломаю над этим...

    У самого Sho-Me 520, очень хочется его спрятать, вывести дисплей отдельно на торпеду, а звук просто отключить...

    Думал, может спрятать куда-нибудь в фару, т.к. в районе лобовухи по моим прикидкам, как-то всё уж больно колхозно смотрится =))) но тогда теряется обещанные 360 градусов поиска, а это весьма не обходимо на МКАДе =)

    Как вариант поставить два, но как-то это затратно и проблематично…

  6. #6
    Продвинутый Аватар для Pinin
    Регистрация
    04.01.2009
    Возраст
    59
    Сообщений
    213
    Вес репутации
    231

    По умолчанию Re: Радар-детектор и Arduino

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

    Планирую все-таки поставить под лобовое, между солнечных козырьков над зеркалом заднего вида. Корпус будет выкинут в топку, сделана наставка на потолок, в которой и будет размещен сабж (перевернутый относительно штатного положения на 180 градусов). Фотоэлемент на плате расположен таким образом, что на него идут два потока: один - с морды прибора, второй - со сферической линзы с бывшей верхней его части (будущей нижней). Дисплей будет вынесен либо над зеркалом, либо вделан в потолок (пока еще не решил). Кнопки/регуляторы при этом будут недоступны - отсюда и вся эта бодяга с софтом.

    В принципе, могу выложить фото потрохов РД - м.б. тогда намерения будут более понятны, хотя вообще-то собирался написать полный отчет уже по завершению проекта...

    P.S. Да, и кстати - идея смонтировать сабж где-то вне салона (в фару, под капот и т.п.) вряд ли хороша: все-таки температурные диапазоны там по-любому далеки от приемлемых для девайса...
    Последний раз редактировалось Pinin; 01.02.2010 в 13:12.

  7. #7
    Ломастер
    Регистрация
    24.02.2008
    Сообщений
    287
    Вес репутации
    258

    По умолчанию Re: Радар-детектор и Arduino

    Цитата Сообщение от Pinin Посмотреть сообщение
    Исходные данные:

    РД Stinger S650 - две управляющие кнопки (выбор режимов, навигация по меню и т.п.), потенциометр регулировки громкости (он же включение/выключение), разъем внешнего питания.
    Всё плохо...... Причём плохо с детекторами и новыми радарами.
    Сейчас в "научном" поиске. Катаюсь с разобранными радарами, с доработками и заведением контролем сигнала через звуковуху.
    (сигналов с выхода приёмников, которые идут на процессор обработки)
    Радаров разобрал уже много. К слову сказать стингер внутри - основан на приёмнике кранч - а кранч на порядок дешевле. Отличается только процессорной частью.

    По результатам. Процессор обработки игнорирует ЛИСД , хотя приёмник видит и обнаруживает радар. Кроме того фотодетектор видит работу подсветки радара "Стрелки" , достаточно далеко.

    В планах - прикрутить приёмник к Arduino и на компе уже обрабатывать и принимать решение радар это или нет.
    Кроме того при работе со "Стрелкой" нет сигнала с приёмника (из-за слишком коротких импульсов) в планах доработка приёмника - введение накопительных ёмкостей, чтобы импульс измерения сделать на выходе более широким и чтобы его можно было наблюдать низкочастотными детекторами.
    Для справки - "Стрелка" - новый комплекс, который сопровождает все цели с дальности около 1000метров раздельно и примерно за 300м делает видео фиксацию номера нарушителя.

  8. #8
    Ломастер
    Регистрация
    24.02.2008
    Сообщений
    287
    Вес репутации
    258

    По умолчанию Re: Радар-детектор и Arduino

    Сегодня доработанный аппарат Saver прамого усиления с частотой генератора на диоде 60Мгц , на выходе усилителя D триггер на 74ALVC зачуял за 1300М стрелку в Мытищенском районе
    Пока собрал воздушным монтажом, нужно собраться с мыслями как это сделать более красиво.
    Последний раз редактировалось dragon; 20.05.2010 в 01:00.

  9. #9
    Продвинутый Аватар для Pinin
    Регистрация
    04.01.2009
    Возраст
    59
    Сообщений
    213
    Вес репутации
    231

    По умолчанию Re: Радар-детектор и Arduino

    2 dragon

    Да, серьезный задел... Поделишься наработками?

    2 ALL

    Если интересно - установил:



    Сам РД - под колпаком монитора, индикатор вывел на напольную консоль



    Сказать по-правде, избирательностью/чувствительностью сабжа не парюсь: пока налететь на фен без заблаговременного предупреждения от РД еще не довелось. Хотя, наверное, и такое когда-нибудь случится...

  10. #10
    Ломастер
    Регистрация
    24.02.2008
    Сообщений
    287
    Вес репутации
    258

    По умолчанию Re: Радар-детектор и Arduino

    Наработки пока такие , гетеродинные детекторы все в топку. Либо нужно пробовать частоту сканирования повышать на 6 порядков (вряд ли правда оно работать будет, но хрен знает)
    Савер на приёмнике прямого усиления после доработки и установки на выходе D триггера чует стрелку. У стрелки импульсы по 30нс каждые 20мс , в результате получается на выходе меандр (кривенький) , но 30нс успевает переключить состояние Д триггера до следующего импульса измерения. Пока ясно одно, что нужно брать приёмник прямого усиления и делать сразу от него интерфейс ввода в комп, пусть даже и Arduino , но намертво

Страница 1 из 6 123456 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •