Andruino nano 3 отсоединения контакта если...
- Войдите на сайт для отправки комментариев
Мне нужно что бы нано проверял какой ток получает где то максимум это 14 (от аккумулятора) вольт и если ток меньше заданного числа к примеру 10.8 вольт то он отсоединит контакт (ремоут от зажигания ключа) что бы возможно было завести машину.
Адруино подключён к УСБ компа а тот к блоку питания М4-АТХ.
У меня уже подключено к нему управления кнопками руля.
вот скетч если нужно
// Для рулевых кнопок // Задержки между нажатиями конкретных кнопок, миллисекунды #define KEY_CH_MINUS_DELAY (200) #define KEY_CH_PLUS_DELAY (200) #define KEY_VOL_MINUS_DELAY (150) #define KEY_VOL_PLUS_DELAY (150) #define KEY_MODE_DELAY (300) // Значения кнопок #define KEY_CH_MINUS (445) #define KEY_CH_PLUS (640) #define KEY_VOL_MINUS (90) #define KEY_VOL_PLUS (270) #define KEY_MODE (805) // Погрешность при чтении кнопок #define KEY_DELTA (30) // Коды кнопок, что отсылаем в порт внешней проге #define CH_MINUS (1) #define CH_PLUS (2) #define VOL_MINUS (3) #define VOL_PLUS (4) #define MODE (5) #define NONE (0) unsigned long LastTimeKeyPressed = millis(); int LastKeyPressed = NONE; void setup() { Serial.begin(57600); } void loop() { ReadSteering(); delay(50); } // Читает рулевые кнопки и пишет в порт код нажатой кнопки void ReadSteering() { unsigned long TimeKeyPressed; int KeyPressed = NONE; int dt1 = analogRead(3); delay(50); int dt2 = analogRead(3); if (abs(dt1-dt2)<=5 and dt1<900 ) //если нет дребезга и что-то есть { // Регистрируем время нажатия кнопки TimeKeyPressed = millis(); //CH_MINUS if ( (dt1-KEY_DELTA <= KEY_CH_MINUS) and (dt1+KEY_DELTA >= KEY_CH_MINUS) ) { if ( (LastKeyPressed != CH_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_MINUS_DELAY) ) { LastKeyPressed = CH_MINUS; KeyPressed = CH_MINUS; LastTimeKeyPressed = TimeKeyPressed; } } //CH_PLUS else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) ) { if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) ) { LastKeyPressed = CH_PLUS; KeyPressed = CH_PLUS; LastTimeKeyPressed = TimeKeyPressed; } } //VOL_MINUS else if ( (dt1-KEY_DELTA <= KEY_VOL_MINUS) and (dt1+KEY_DELTA >=KEY_VOL_MINUS) ) { if ( (LastKeyPressed != VOL_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_VOL_MINUS_DELAY) ) { LastKeyPressed = VOL_MINUS; KeyPressed = VOL_MINUS; LastTimeKeyPressed = TimeKeyPressed; } } //VOL_PLUS else if ( (dt1-KEY_DELTA <= KEY_VOL_PLUS) and (dt1+KEY_DELTA >=KEY_VOL_PLUS) ) { if ( (LastKeyPressed != VOL_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_VOL_PLUS_DELAY) ) { LastKeyPressed = VOL_PLUS; KeyPressed = VOL_PLUS; LastTimeKeyPressed = TimeKeyPressed; } } //MODE else if ( (dt1-KEY_DELTA <= KEY_MODE) and (dt1+KEY_DELTA >=KEY_MODE) ) { if ( (LastKeyPressed != MODE) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_MODE_DELAY) ) { LastKeyPressed = MODE; KeyPressed = MODE; LastTimeKeyPressed = TimeKeyPressed; } } if (KeyPressed != NONE) { Serial.print(char(255)); Serial.print(KeyPressed,DEC); } //Serial.print(dt1,DEC); //Serial.print(" "); //Serial.println(dt2,DEC); } }
Немножко теории один аналоговый вход уже занят управлением кнопок, нужно подключить еще 2 аналоговых входа из них один сделать IN для считывания вольтажа а другой OUT что бы соединял и отсоединял ремоут зажигания.
Вопросы новичка нужно сделать все в один скетч и загрузить? или можно по отдельности? на сколько я помню то нужно все в один и загрузить в андруино.
Я не селен в программировании если можно слегка помочь в этом простом для вас вопросе.
Спасибо.
делай делитель напряжения до 15-17 В чтобы на всякий случай не поднять напряжения на входи МК выше 5В.
поробуй, с делителем окуратно!
поробуй, с делителем окуратно!
А лучше поставить диод защитный на вход. С хорошим запасом. Вольт на 25 или 50-т. Что-бы если с делителем ошибетесь (или нижние плечо делителя "отпаяется"/плохой контакт) - диод "уперся" и не пустил лишний вольтаж в дуину.
чето я с просони вчера накосячил... добавил зачитный промежуток на включение после падения, чтобы не скакала по включению или выключению на пороге срабатывания