Тема что, умерла что ли?((
Вид для печати
Тема что, умерла что ли?((
у меня получилось следующее.
код ардуино:
схема:Код:#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);
}
Вложение 10201
управление вентилятором пока не сделал.
и, как видно из кода, приводов заслонки сейчас 2.
Написал две проги для компа на процессинге. Ни разу не программист, так что как получилось, так и написал, но работает))) Если кто-нибудь подскажет как сделать лучше, будет большое спасибо. Все в архиве.
Переменники RV1-RV3 - это что? Резисторы обратной связи моторов?
Или это ручное управление заслонками?
Какие двигатели использованы?
Какие диоды использованы?
Для чего подключение "Джойстик SONY" ?
Диоды на выходе драйвера L293D не нужны, так как они уже в микросхеме имеются
С диодами понятно, действительно, они не нужны.
http://myrobot.ru/stepbystep/images/l293d_2.gif
Морчики, как я понимаю, коллекторные, не шаговые.
У меня как раз коллекторные заговлены, которые бесшумные, 4rpm.
Вообще, manu_245, поподробнее можно по схеме рассказать?
что именно?
ардуино управляет заслонками, вентилятором и электромагнитным клапаном печки.
мотор1 - привод заслонки стекло/боковые воздуховоды
мотор2 - нижняя заслонка
мотор3 - заслонка забора воздуха (пока не сделал).
редукторы управляют штатными тросиками приводов заслонок.
подобраны положения приводов для 4 направлений обдува:0-стекло,1-ноги,2-боковые сопла,3-стекло и ноги.
клапан управляется по температуре салона. просто термостат.
управление джойстиком и с компьютера.
подключил вентилятор. код как в сообщении ув. interhard.
полет нормальный.
архив перезалил.
А почему не юзали готовые сервы модельные? Там же только ШИМ 1-2 мс подать нужно и все... Никаких переменников и L293 не надо...Цитата:
приводы - моторедукторы печки 2110.
В примерах к ардуино есть как рулить сервами. Получается намного проще схема, точнее ее почти не остается