Тема что, умерла что ли?((
Тема что, умерла что ли?((
у меня получилось следующее.
код ардуино:
схема:Код:#include <DallasTemperature.h> #include <EEPROM.h> int address = 0; DallasTemperature tempSensor; #define m1_l 7 //первый влево #define m1_r 8 //первый вправо #define m2_l 5 //второй влево #define m2_r 3 //второй вправо #define m3_l 4 //третий влево #define m3_r 2 //третий вправо #define en1 6 //enable #define JOY 0 //АЦП первого мотора #define val1 1 //АЦП первого мотора #define val2 3 //АЦП второго мотора #define val3 2 //АЦП третьего мотора #define vent 10 //ШИМ вентилятора #define kran 11 //управление клапаном ОЖ byte bytes[8]; int res_dt1;//джойстик int motor1, motor2, motor3;//АЦП приводов int vent_speed; //значение ШИМ вентилятора int min_1 = 190; //боковые int max_1 = 445; //стекло int centr_1 = 310; //среднее первый int min_2 = 260; //ноги int max_2 = 499; //ноги закрыто int centr_2 = 380; //среднее второй int temp0, temp_s; //temp0 - в салоне, temp_s - заданая int t=5, f=5; int flow=5; void setup() { pinMode(m1_l,OUTPUT); pinMode(m1_r,OUTPUT); pinMode(m2_l,OUTPUT); pinMode(m2_r,OUTPUT); pinMode(en1,OUTPUT); pinMode(kran, OUTPUT); digitalWrite(m1_l,LOW); digitalWrite(m1_r,LOW); digitalWrite(m2_l,LOW); digitalWrite(m2_r,LOW); digitalWrite(en1,LOW); digitalWrite(kran,LOW); tempSensor.begin(12); //Вешаем Датчик на 12 порт Serial.begin(115200); // настроить скорость com порт temp_s = EEPROM.read(address);//читаем заданую температуру из еепром bytes[0] = 0x5A; //шлем ее в комп bytes[1] = temp_s; Serial.write( bytes,2); } void loop() { res_dt1 = analogRead(JOY); // прочитать данные АЦП motor1 = analogRead(val1); // прочитать данные АЦП motor2 = analogRead(val2); // прочитать данные АЦП //motor3 = analogRead(val3); // прочитать данные АЦП termometer(); byte a, b; if (Serial.available() > 1) { a = Serial.read(); b = Serial.read(); if(a==0x64)temp_s=b; if(a==0xFF)f=b; } if((res_dt1>=843 && res_dt1<=853) || f==0)// на стекло. кнопка MODE { digitalWrite(en1,HIGH); if (analogRead(val2)<max_2) { digitalWrite(m2_l,HIGH); while (analogRead(val2)<max_2) {} digitalWrite(m2_l,LOW); } if (analogRead(val1)<max_1) { digitalWrite(m1_r,HIGH); while (analogRead(val1)<max_1) {} digitalWrite(m1_r,LOW); } digitalWrite(en1,LOW); flow=0; f=5; bytes[0] = 0x4B; bytes[1] = flow; Serial.write( bytes,2); } if((res_dt1>=401 && res_dt1<=411) || f==1)//в ноги. кнопка FILE { digitalWrite(en1,HIGH); if (analogRead(val2)>min_2) { digitalWrite(m2_r,HIGH); while (analogRead(val2)>min_2) {} digitalWrite(m2_r,LOW); } digitalWrite(en1,LOW); flow=1; f=5; bytes[0] = 0x4B; bytes[1] = flow; Serial.write( bytes,2); } if((res_dt1>=784 && res_dt1<=794) || f==2)//боковые. кнопка SEL { digitalWrite(en1,HIGH); if (analogRead(val1)>min_1) { digitalWrite(m1_l,HIGH); while (analogRead(val1)>min_1) {} digitalWrite(m1_l,LOW); } if (analogRead(val2)<max_2) { digitalWrite(m2_l,HIGH); while (analogRead(val2)<max_2) {} digitalWrite(m2_l,LOW); } digitalWrite(en1,LOW); flow=2; f=5; bytes[0] = 0x4B; bytes[1] = flow; Serial.write( bytes,2); } if((res_dt1>=307 && res_dt1<=327) || f==3)//на стекло и в ноги. кнопка ATT { digitalWrite(en1,HIGH); if (analogRead(val1)<max_1) { digitalWrite(m1_r,HIGH); while (analogRead(val1)<max_1) {} digitalWrite(m1_r,LOW); } if (analogRead(val2)>centr_2) { digitalWrite(m2_r,HIGH); while (analogRead(val2)>centr_2) {} digitalWrite(m2_r,LOW); } if (analogRead(val2)<centr_2) { digitalWrite(m2_l,HIGH); while (analogRead(val2)<centr_2) {} digitalWrite(m2_l,LOW); } digitalWrite(en1,LOW); flow=3; f=5; bytes[0] = 0x4B; bytes[1] = flow; Serial.write( bytes,2); } if(res_dt1>=715 && res_dt1<=725)//temp_s++. кнопка VOL UP { temp_s++; delay(30); if(temp_s>=50)temp_s=50; bytes[0] = 0x5A; bytes[1] = temp_s; //салон 1 Serial.write( bytes,2); } if(res_dt1>=635 && res_dt1<=645)//temp_s --. кнопка VOL DOWN { temp_s--; delay(30); if(temp_s<=0)temp_s=0; bytes[0] = 0x5A; bytes[1] = temp_s; //салон 1 Serial.write( bytes,2); } if(res_dt1>=176 && res_dt1<=186)//кнопка SOURCE { EEPROM.write(address, temp_s);//пишем в еепром temp_set } } void termometer() { switch(tempSensor.isValid()) { case 1: Serial.println("Invalid CRC"); tempSensor.reset(); // сбросить девайс return; case 2: Serial.println("Invalid device"); tempSensor.reset(); // сбросить девайс return; } temp0=tempSensor.getTemperature(); if(temp0>=temp_s+1)digitalWrite(kran,HIGH);//закрываем клапан - охлаждаем салон if(temp0<=temp_s-1)digitalWrite(kran,LOW);//открываем - греем bytes[0] = 0x64; bytes[1] = temp0; //салон Serial.write( bytes,2); }
управление вентилятором пока не сделал.
и, как видно из кода, приводов заслонки сейчас 2.
Написал две проги для компа на процессинге. Ни разу не программист, так что как получилось, так и написал, но работает))) Если кто-нибудь подскажет как сделать лучше, будет большое спасибо. Все в архиве.
Последний раз редактировалось manu_245; 09.11.2010 в 23:07.
Переменники RV1-RV3 - это что? Резисторы обратной связи моторов?
Или это ручное управление заслонками?
Какие двигатели использованы?
Какие диоды использованы?
Для чего подключение "Джойстик SONY" ?
Skiw®, Самара
http://www.skiw63.ru/
Диоды на выходе драйвера L293D не нужны, так как они уже в микросхеме имеются
Последний раз редактировалось manu_245; 07.11.2010 в 00:11.
С диодами понятно, действительно, они не нужны.
Морчики, как я понимаю, коллекторные, не шаговые.
У меня как раз коллекторные заговлены, которые бесшумные, 4rpm.
Вообще, manu_245, поподробнее можно по схеме рассказать?
Skiw®, Самара
http://www.skiw63.ru/
что именно?
ардуино управляет заслонками, вентилятором и электромагнитным клапаном печки.
мотор1 - привод заслонки стекло/боковые воздуховоды
мотор2 - нижняя заслонка
мотор3 - заслонка забора воздуха (пока не сделал).
редукторы управляют штатными тросиками приводов заслонок.
подобраны положения приводов для 4 направлений обдува:0-стекло,1-ноги,2-боковые сопла,3-стекло и ноги.
клапан управляется по температуре салона. просто термостат.
управление джойстиком и с компьютера.
подключил вентилятор. код как в сообщении ув. interhard.
полет нормальный.
архив перезалил.
А почему не юзали готовые сервы модельные? Там же только ШИМ 1-2 мс подать нужно и все... Никаких переменников и L293 не надо...приводы - моторедукторы печки 2110.
В примерах к ардуино есть как рулить сервами. Получается намного проще схема, точнее ее почти не остается
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)