Зима, холода - вот что может сподвигнуть человека, который ни разу не видел даже, что такое программирование.
- Войдите на сайт для отправки комментариев
Прошу прощения сразу, если что-то где-то коряво. Решил сделать автоматический подсос на машинку, машинка старенькая ауди 80 с карбюратором от ВАЗа. вот настроил карбюратор, чтобы работал отменно, подумал, а почему бы не автоматизировать заслонку, когда-то год назад слышал про автозапуск на ардуино. Думаю, мне не светит, потом решил изучить программирование, хотя бы немножко, чтобы выполнять какие-нибудь цели интересные) ну думаю для этого и программируют так-то))) и что-то начало получаться, сначала подправил код, взятый тут https://sites.google.com/site/hobbyarduino/project-updates/arduhome/car-start на автозапуск, чтобы и глушить можно было, и не было произвольных запусков или остановок программы старта, если немного передержал сигнал с телефона, его приложу во втором сообщении ,пальцами еще не щупал, ардуинка никак с китая не придет, уже второй раз заказываю, на алиэкспрессе, хотя у магазина в основном все положительные отзывы, и заказов много. Ну это ладно, пустили слезу, пока все тестирую в протеусе. сСелал там эмулятор ардуино, так сказать. Благо чуть-чуть в электротехнике разбираюсь, ну, в общем, неделя моих упорных изучений и получилось!!! Сначала была идея с ПИД регулятором и сервоприводом, а потом подумал, почему бы не взять двигатель обычный для управления заслонки. таких много валяется, сварочным аппаратом пользуюсь, сделаю красивый кроншейн все будет не хуже сервы))) и вот в общем что получилось.
П.С. код полностью рабочий, но если покажите где можно упростить, буду рад!
int con1 = 7; // концевик полностью открытой заслонки int con2 = 4; // концевик полностью закрытой заслонки int temp = A3; // датчик температуры int rpm = A4; // датчик оборотов(датчик хола) int out1 = 5; //выход на любой мотор int out2 = 6; // выход на любой мотор int rpm2 = 0; // переменная для рассчета оборотов void setup() { Serial.begin(9600); // объявляем входом pinMode(con1, INPUT); // подтяжку к минусу реализуем аппаратно резистором в 10кОм pinMode(temp, INPUT); pinMode(rpm, INPUT); pinMode(con2, INPUT); // подтяжку к минусу реализуем аппаратно резистором в 10кОм // объявляем выходом pinMode(out1, OUTPUT); digitalWrite(out1, LOW); pinMode(out2, OUTPUT); digitalWrite(out2, LOW); } void loop() // сама программа { rpm2 = (analogRead(rpm)*2); // делаем рассчет температуры, что бы удобнее было потом прописывать в градусах if ((analogRead(temp) <= 30) && (rpm2 > 100)) // если температура меньше 30 и двигатель не заглушен то управлять первым режимом управления моторчиком { chek_serva();// первая программа управления моторчиком } else if ((analogRead(temp) <= 60) && (rpm2 > 100))// если температура меньше 60 и двигатель не заглушен то управлять первым режимом управления моторчиком { chek_serva2();// вторая программа управления моторчиком } else //если ни одно не верно то запускаем программу управления по температуре { chek_temp(); // программа управления по температуре } // тут ми считываем показания с датчиков что бы настроить под машину задержки нам не мешают, даже помогают, что бы моторчик бешано не крутился постоянно Serial.print("temp"); Serial.println(analogRead(temp)); Serial.print("rpm"); Serial.println(rpm2); delay(1000); } void chek_serva()// первая программа управления моторчиком { if(rpm2 >= 1500) // если обороты больше 1500 то провернуть моторчик с небольшой задержкой в одну сторону( сами выберете в какую) { digitalWrite(out1, HIGH); delay(50); digitalWrite(out1, LOW); } else if ((rpm2 <= 1200)&&(digitalRead(con2)==0)) // если обороты больше 1200 то провернуть моторчик в обратную сторону { digitalWrite(out2, HIGH); delay(50); digitalWrite(out2, LOW); } } void chek_serva2() // вторая программа управления моторчиком аналогичная только для диапазона от 1300 до 1100( потому что двигатель более менее уже устоялся. { if(rpm2 >= 1300) { digitalWrite(out1, HIGH); delay(50); digitalWrite(out1, LOW); } else if ((rpm2 <= 1100)&&(digitalRead(con2)==0)) { digitalWrite(out2, HIGH); delay(50); digitalWrite(out2, LOW); } } void chek_temp() // сюда попадаем если двигатель заглушен { if ((digitalRead(con1) ==0) && (analogRead(temp) > 60)) // если концевик еще не включен(т.е. если заслонка еще не <ОТКРЫЛАСЬ> полностью) а температура <БОЛЬШЕ> 60градусов то <ОТКРЫВАЕМ> на максимум заслонку { digitalWrite(out1, HIGH); delay(100); digitalWrite(out1, LOW); } else if ((digitalRead(con2) ==0) && (analogRead(temp) <60) ) // если концевик еще не включен(т.е. если заслонка еще не <ЗАКРЫЛАСЬ> полностью) а температура <МЕНЬШЕ> 60градусов то <ЗАКРЫВАЕМ> на максимум заслонку { digitalWrite(out2, HIGH); delay(100); digitalWrite(out2, LOW); } }
измененый автозапуск(моих коментариев нет) прошу прощения, какие были коментарии у автора те и оставил
???