-
Вложений: 1
Re: Замена ручного управления печкой
manu_245
Я уже дошел до того чтобы завести мотор .
Дисплей работает нормально на все реагирует пока не пытаешься вкарячить мотор к температуре.
Или мотор работает,или температура на дисплее изменяется.
И еще хотелось бы знать,как другие моторы видят кнопки,сам никак не пойму.
-
Re: Замена ручного управления печкой
Другие моторы не видят кнопки. на кнопки прописаны заранее установленные положения приводов (соответствующие положениям заслонок), а кнопками только выбор осуществляется. Тоже самое можно делать и вообще без кнопок, через терминал или программу управляющую (в этой теме выкладывал).
Если подключить мотор на кнопки (третий привод так и подключен), то при его движении (кнопка нажата) АЦП res_dt1 не будет равно 1023 и не будет выполняться termometer(); Сделано это было для страховки от глюков при опросе датчиков. Можно попробовать termometer() просто в loop поставить, без таймера. Тогда нажатие кнопок не будет влиять на температуру и ее отображение.
-
Re: Замена ручного управления печкой
В идеале конечно хорошо бы все под себя переписать.Но это на данный момент нереально.Не осилю,поэтому мучаюсь с тем что есть.
Меня вполне бы устроило регулирование на десять положений заслонки
с увеличением в два градуса,скажем от 16 до 36.
Но блин этож китайская грамота,чем дальше лезу,тем больше непонятней.
Крайние положения определил,мотор крутится,как положено,но на дисплее тишина.
Цитата:
Другие моторы не видят кнопки. на кнопки прописаны заранее установленные положения приводов (соответствующие положениям заслонок), а кнопками только выбор осуществляется.
Как это возможно?НЕ могу понять.Я понимаю,что здесь не семинар по програмированию,но куда еще идти?
-
Re: Замена ручного управления печкой
Добрый вечер.
Мучался я мучался,ну и что-то вроде получилось.
Только вот мотор дергается во всех положениях, подскажите пожалуйста как это можно победить.Мотор это который температуру регулирует.
Вот скетч:
PHP код:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
#include <ks0108.h>
#include "ks0108_Mega.h" // include this for the Arduino Mega other ATmega1280 boards
#include "SystemFont5x7.h"//шрифт 5х7
#include "legs1.h"//значек(воздух вниз)
#include "both1.h"//значек(воздух вверх-вниз)
#include "screen1.h"//значек(воздух вверх)
#include "side1.h"//значек (воздух вперед)
#include "DS1.h"//шрифт крупный(температура)
int address = 0;
#define ONE_WIRE_BUS 50 //датчики на 50 ноге
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
uint8_t Thermometer2[8], Thermometer3[8];//адреса датчиков
float temp2, temp3;// t2 - улица, t3-салон
byte bytes[8];
int err2, err3;
int error=0;
int vent_set=2;
#define m1_l 39 //первый влево (ноги)
#define m1_r 40 //первый вправо (ноги)
#define m2_l 41 //второй влево (боковые)
#define m2_r 42 //второй вправо(стекло)
#define m3_l 43 //третий влево(заслонка горячий-холодный)
#define m3_r 44 //третий вправо(заслонка горячий-холодный)
#define enl 38 //enable
#define JOY 1 //АЦП джойстик
#define val2 5 //АЦП второго мотора
#define val1 6 //АЦП первого мотора
#define var 7 //АЦП третьего мотора
#define vent 31 //ШИМ вентилятора
int res_dt1;//джойстик
int motor1, motor2, motor3;//АЦП приводов
int var_0 = 132; //(заслонка горячий-холодный)
int var_1 = 144; //(заслонка горячий-холодный)
int var_2 = 162; //(заслонка горячий-холодный)
int var_3 = 206; //(заслонка горячий-холодный)
int var_4 = 275; //(заслонка горячий-холодный)
int var_5 = 342; //(заслонка горячий-холодный)
int var_6 = 396; //(заслонка горячий-холодный)
int var_7 = 451; //(заслонка горячий-холодный)
int var_8 = 506; //(заслонка горячий-холодный)
int var_9 = 561; //(заслонка горячий-холодный)
int var_10 = 620; //(заслонка горячий-холодный)
int var_11 = 685; //(заслонка горячий-холодный)
int var_12 = 760; //(заслонка горячий-холодный)
int var_13 = 805; //(заслонка горячий-холодный)
int var_14 = 856; //(заслонка горячий-холодный)
int var_15 = 896; //(заслонка горячий-холодный)
int min_2 = 185; //боковые
int max_2 = 450; //стекло
int centr_1 = 310; //среднее первый
int min_1 = 310; //ноги
int max_1 = 490; //ноги закрыто
int centr_2 = 370; //среднее второй
int vent_s=3;
int vent_speed=3;
int t=5, f=0;
int flow=5;
int temp_s=17;
unsigned long time;
void setup(void)
{
pinMode(m1_l,OUTPUT);
pinMode(m1_r,OUTPUT);
pinMode(m2_l,OUTPUT);
pinMode(m2_r,OUTPUT);
pinMode(m3_l,OUTPUT);
pinMode(m3_r,OUTPUT);
pinMode(enl,OUTPUT);
pinMode(vent,OUTPUT);
digitalWrite(m1_l,LOW);
digitalWrite(m1_r,LOW);
digitalWrite(m2_l,LOW);
digitalWrite(m2_r,LOW);
digitalWrite(m3_l,LOW);
digitalWrite(m3_r,LOW);
digitalWrite(enl,HIGH);
digitalWrite(vent,LOW );
sensors.begin();
Serial.begin(115200);
TCCR2B = TCCR2B & 0b11111000 | 0x04;
//devices=sensors.getDeviceCount();//считаем сколько датчиков подключено
if (!sensors.getAddress(Thermometer2, 2)) err2=1;//ошибка. нет датчика 2 - улица
if (!sensors.getAddress(Thermometer3, 3)) err3=1;//ошибка. нет датчика 3 - салон
sensors.setResolution(Thermometer2, 9);
sensors.setResolution(Thermometer3, 9);
GLCD.Init(NON_INVERTED); // initialise the library, non inverted writes pixels onto a clear screen
GLCD.ClearScreen();
GLCD.SelectFont(System5x7);
GLCD.CursorTo(0,5);
GLCD.Puts("OUTSIDE:");
GLCD.CursorTo(0,6);
GLCD.Puts("VENT SPEED:");
/*
if(analogRead(val1) > max_1-10 && analogRead(val2) < min_2+10) flow=2;
if(analogRead(val1) > max_1-10 && analogRead(val2) > max_2-10) flow=0;
if(analogRead(val1) > min_1-10 && analogRead(val1) < min_1+10) flow=1;
*/
temp_s = EEPROM.read(address);//читаем заданую температуру из еепром
bytes[0] = 0xFF;
bytes[1] = temp_s;
bytes[2] = flow;
bytes[3] = 0;
Serial.write( bytes,4);//отправляем ее в комп
Serial.println(analogRead(var));
}
void loop(void)
{
res_dt1 = analogRead(JOY); // прочитать данные АЦП
buttons();
motor1 = analogRead(val1); // прочитать данные АЦП
motor2 = analogRead(val2); // прочитать данные АЦП
motor3 = analogRead(var); // прочитать данные АЦП
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(a==0x78)vent_s=b*10;
}
analogWrite(vent, vent_s);//вентилятор
if ((millis()-time)>500 && res_dt1 == 1023) //запуск процедур по таймеру
{
time = millis();
termometer();
}
motors();
lcd();
vent_speed=vent_s/17;
}
void termometer()
{
int m0, m1, m;
sensors.requestTemperatures();
temp2 = sensors.getTempC(Thermometer2);
temp3 = sensors.getTempC(Thermometer3);
if(temp3<0)
{
m0=1;
temp3=-temp3;
}
else m0=0;
if(temp2<0)
{
m1=1;
temp2=-temp2;
}
else m1=0;
m=m0*10+m1;
bytes[0] = 0x64; //префикс
bytes[1] = temp3; //салон
bytes[2] = m;
bytes[3] = temp2; //улица
Serial.write( bytes,4);
}
void motors()
{
if(temp_s)//мотор заслонки температуры
{
if(temp_s==40)
{
if (analogRead(var)<var_15)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_15)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==38)
{
if (analogRead(var)<var_14)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_14)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==36)
{
if (analogRead(var)<var_13)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_13)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==34)
{
if (analogRead(var)<var_12)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_12)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==32)
{
if (analogRead(var)<var_11)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_11)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==30)
{
if (analogRead(var)<var_10)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_10)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==28)
{
if (analogRead(var)<var_9)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_9)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==26)
{
if (analogRead(var)<var_8)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_8)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==24)
{
if (analogRead(var)<var_7)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_7)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==22)
{
if (analogRead(var)<var_6)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var) >var_6)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==20)
{
if (analogRead(var)<var_5)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_5)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==18)
{
if (analogRead(var)<var_4)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_4)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==16)
{
if (analogRead(var)<var_3)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_3)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==14)
{
if (analogRead(var)<var_2)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_2)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==12)
{
if (analogRead(var)<var_1)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_1)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==10)
{
if (analogRead(var)>var_0)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
if (analogRead(var)<var_0)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
}
}
if(flow==0)//стекло
{
if (analogRead(val2)<max_2)digitalWrite(m2_r,HIGH);
else digitalWrite(m2_r,LOW);
if (analogRead(val1)<max_1)digitalWrite(m1_l,HIGH);
else digitalWrite(m1_l,LOW);
}
if(flow==1)//в ноги
{
if (analogRead(val1)>min_1)digitalWrite(m1_r,HIGH);
else digitalWrite(m1_r,LOW);
}
if(flow==2)//боковые
{
if (analogRead(val2)>min_2)digitalWrite(m2_l,HIGH);
else digitalWrite(m2_l,LOW);
if (analogRead(val1)<max_1)digitalWrite(m1_l,HIGH);
else digitalWrite(m1_l,LOW);
}
if(flow==3)//стекло и ноги
{
if (analogRead(val2)<max_2)digitalWrite(m2_r,HIGH);
else digitalWrite(m2_r,LOW);
if (analogRead(val1)>min_1)digitalWrite(m1_r,HIGH);
else digitalWrite(m1_r,LOW);
}
}
void buttons()
{
if(res_dt1>=715 && res_dt1<=725)//temp_s++. кнопка VOL UP
{
if(temp_s<40)
{
temp_s=temp_s+2;
delay(30);
}
bytes[0] = 0x5A; //префикс
bytes[1] = temp_s;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(150);
}
if(res_dt1>=635 && res_dt1<=645)//temp_s--. кнопка VOL DOWN
{
if(temp_s>10)
{
temp_s=temp_s-2;
delay(30);
}
bytes[0] = 0x5A; //префикс
bytes[1] = temp_s;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(150);
}
if(res_dt1>=176 && res_dt1<=186)//кнопка SOURCE
{
EEPROM.write(address, temp_s);//пишем в еепром temp_set
delay(500);
}
if(res_dt1>=556 && res_dt1<=566)//vent_s ++. кнопка TRACK UP
{
vent_s=vent_s+10;
delay(30);
if(vent_s > 250)vent_s=255;
bytes[0] = 0xC8; //префикс
bytes[1] = vent_s/10;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
if(res_dt1>=475 && res_dt1<=485)//vent_s --. кнопка TRACK DOWN
{
vent_s=vent_s-10;
delay(30);
if(vent_s <=0)vent_s=0;
bytes[0] = 0xC8; //префикс
bytes[1] = vent_s/10;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
if((res_dt1>=843 && res_dt1<=853) || f==0)// на стекло. кнопка MODE
{
flow=0;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
if((res_dt1>=401 && res_dt1<=411) || f==1)//в ноги. кнопка FILE
{
flow=1;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
if((res_dt1>=784 && res_dt1<=794) || f==2)//боковые. кнопка SEL
{
flow=2;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
if((res_dt1>=307 && res_dt1<=327) || f==3)//на стекло и в ноги. кнопка ATT
{
flow=3;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
}
void lcd()
{
GLCD.SelectFont(DS);
GLCD.CursorTo(0,0);
GLCD.PrintNumber(temp3);
GLCD.Puts("/ ");
if(temp_s>=10)GLCD.CursorTo(5,0);
else GLCD.CursorTo(6,0);
GLCD.PrintNumber(temp_s);
GLCD.Puts("/");
GLCD.SelectFont(System5x7);
GLCD.CursorTo(8,5);
GLCD.PrintNumber(temp2);
GLCD.Puts(" C");
int i=0;
for(i=0;i<vent_speed;i++)
{
GLCD.CursorTo(i,7);
GLCD.Puts("0");
}
int j=0;
for(j=vent_speed;j<15;j++)
{
GLCD.CursorTo(j,7);
GLCD.Puts(" ");
}
if(flow==0)GLCD.DrawBitmap(screen, 96,32, BLACK);
if(flow==1)GLCD.DrawBitmap(legs, 96,32, BLACK);
if(flow==2)GLCD.DrawBitmap(side, 96,32, BLACK);
if(flow==3)GLCD.DrawBitmap(both, 96,32, BLACK);
}
-
Re: Замена ручного управления печкой
Ура!!!!
Победил.Вроде все так просто и втоже время так сложно.
PHP код:
void motors()
{
if(temp_s)//мотор заслонки температуры
{
if(temp_s==40)
{
if (analogRead(var)<var_15)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_15)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==38)
{
if (analogRead(var)<var_15)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_14)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==36)
{
if (analogRead(var)<var_14)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_13)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==34)
{
if (analogRead(var)<var_13)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_12)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==32)
{
if (analogRead(var)<var_12)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_11)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==30)
{
if (analogRead(var)<var_11)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_10)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==28)
{
if (analogRead(var)<var_10)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_9)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==26)
{
if (analogRead(var)<var_9)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_8)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==24)
{
if (analogRead(var)<var_8)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_7)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==22)
{
if (analogRead(var)<var_7)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var) >var_6)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==20)
{
if (analogRead(var)<var_6)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_5)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==18)
{
if (analogRead(var)<var_5)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_4)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==16)
{
if (analogRead(var)<var_4)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_3)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==14)
{
if (analogRead(var)<var_3)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_2)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==12)
{
if (analogRead(var)<var_2)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_1)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
}
if(temp_s==10)
{
if (analogRead(var)>var_0)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
if (analogRead(var)<var_0)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
}
}
Всего то.Теперь буду дисплей мучать.
-
Re: Замена ручного управления печкой
ээээ.
Предлагаю сделать массив. Кода будет меньше и он будет читабелен.
Код:
// константа, определяющая вместо конкретного положения, отрезок (<нужное значение> - DeltaConst).. (<нужное значение> + DeltaConst). Будет жужать - увеличить константу.
define DeltaConst 3
int16_t vars[16]={132,144,162,206,275,342,396,451,506,561,620,685,760,805,856,896};
int8_t TempIndex=(temp_s-10)/2;//при temp_s=10 на выходе 0, при temp_s=40 на выходе 15, конец массива, что и требуется.
int16_t var_n=vars[TempIndex]; // получили var_n
int16_t CurrentInput=analogRead(var); //получили положение
if (CurrentInput<var_n+DeltaConst)
digitalWrite(m3_r,HIGH);
else
digitalWrite(m3_r,LOW);
if (CurrentInput>var_n-DeltaConst)
digitalWrite(m3_l,HIGH);
else
digitalWrite(m3_l,LOW);
}
-
Re: Замена ручного управления печкой
SBorovkov
Ну конечно моя писанина не бог весть что и вобщем то я думал о чем то подобном.Так я ж не понимаю в этом ничего так сказать первые шаги.
В любом случае спасибо за участие.Я буду опять кипеть как все это приспособить.Хотя сейчас пытаюсь разобраться с дисплеем.
Интерфейс чуть переделать.Изначально смотрел на вашу печку,но понял
что неосилю.
-
Re: Замена ручного управления печкой
надо просто заменить кусок из 85-го сообщения на приведенный мной код. И все :-)
Это фактически тот же код, что и Ваш, отличается двумя вещами:
1. Вместо кучи идентичных if стоит один.
2. Добавлена DeltaConst, то есть диапазон значений, мертвая зона, в которой двигатель стоит (оба вывода в high).
Вы этот диапазон организовали так:
if (analogRead(var)<var_15)digitalWrite(m3_r,HIGH);
else digitalWrite(m3_r,LOW);
if (analogRead(var)>var_14)digitalWrite(m3_l,HIGH);
else digitalWrite(m3_l,LOW);
а я - впрямую прописал.
Без диапазона (как у Вас с temp_s==40) всегда будет жужать потому, что и АЦП шумит немнгого (значение не постоянно) и двигатель не может мгновенно остановиться, да и внутри сервомеханизма переменный резистор не идеален. Чуть проскочило в одну сторону, начинает в обратную, потом опять и тд. А так есть мертвая зона, в нее зашли и мотор стоит.
-
Re: Замена ручного управления печкой
SBorovkov
Спасибо. Буду пробовать.Все равно не все понятно.А S==40 и S==10 я не использую - мотор дергается,я ничего лучше не придумал и убрал 10 и 40.:o
-
Re: Замена ручного управления печкой
напиши что непонятно, я объясню
-
Re: Замена ручного управления печкой
SBorovkov
Да не люблю людей озадачивать всякой фигней.А тут приспичило ну никак сам.Обычно и так все всегда доступно(не считая писания и главное понимания МК).:)
-
Вложений: 1
Re: Замена ручного управления печкой
Н-да просто вставить не получилось.Бился-бился плюнул,ардуина ругается,как злая собака.Попытаюсь позже,сил уже нет.:confused:
-
Re: Замена ручного управления печкой
Забыл # перед дефайном. В остальном вроде все правильно.
Проект ниже компиляется в среде arduino
Код:
#define m3_l 43 //третий влево(заслонка горячий-холодный)
#define m3_r 44 //третий вправо(заслонка горячий-холодный)
#define var 7 //АЦП третьего мотора
int temp_s=17;
#define DeltaConst 3
int16_t vars[16]={132,144,162,206,275,342,396,451,506,561,620,685,760,805,856,896};
void setup(void)
{
}
void loop(void)
{
int8_t TempIndex=(temp_s-10)/2;//при temp_s=10 на выходе 0, при temp_s=40 на выходе 15, конец массива, что и требуется.
int16_t var_n=vars[TempIndex]; // получили var_n
int16_t CurrentInput=5; //получили положение
if (CurrentInput<var_n+DeltaConst)
digitalWrite(m3_r,HIGH);
else
digitalWrite(m3_r,LOW);
if (CurrentInput>var_n-DeltaConst)
digitalWrite(m3_l,HIGH);
else
digitalWrite(m3_l,LOW);
}
-
Re: Замена ручного управления печкой
О супер, эта работает,вечером залью.Спасибо за помощь.:)
-
Re: Замена ручного управления печкой
Что то никак не выходит аленький цветочек.:confused:
PHP код:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
#include <ks0108.h>
#include "ks0108_Mega.h" // include this for the Arduino Mega other ATmega1280 boards
#include "SystemFont5x7.h"//шрифт 5х7
#include "legs1.h"//значек(воздух вниз)
#include "both1.h"//значек(воздух вверх-вниз)
#include "screen1.h"//значек(воздух вверх)
#include "side1.h"//значек (воздух вперед)
#include "DS1.h"//шрифт крупный(температура)
int address = 0;
#define ONE_WIRE_BUS 50 //датчики на 50 ноге
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
uint8_t Thermometer2[8], Thermometer3[8];//адреса датчиков
float temp2, temp3;// t2 - улица, t3-салон
byte bytes[8];
int err2, err3;
int error=0;
int vent_set=2;
#define m1_l 39 //первый влево (ноги)
#define m1_r 40 //первый вправо (ноги)
#define m2_l 41 //второй влево (боковые)
#define m2_r 42 //второй вправо(стекло)
#define m3_l 43 //третий влево(заслонка горячий-холодный)
#define m3_r 44 //третий вправо(заслонка горячий-холодный)
#define enl 38 //enable
#define JOY 1 //АЦП джойстик
#define val2 5 //АЦП второго мотора
#define val1 6 //АЦП первого мотора
#define var 7 //АЦП третьего мотора
#define DeltaConst 7
int16_t vars[16]={132,144,162,206,275,342,396,451,506,561,620,685,760,805,856,896};
#define vent 31 //ШИМ вентилятора
int res_dt1;//джойстик
int motor1, motor2, motor3;//АЦП приводов
int min_2 = 185; //боковые
int max_2 = 450; //стекло
int centr_1 = 310; //среднее первый
int min_1 = 310; //ноги
int max_1 = 490; //ноги закрыто
int centr_2 = 370; //среднее второй
int vent_s=3;
int vent_speed=3;
int t=5, f=0;
int flow=5;
int temp_s=17;
unsigned long time;
void setup(void)
{
pinMode(m1_l,OUTPUT);
pinMode(m1_r,OUTPUT);
pinMode(m2_l,OUTPUT);
pinMode(m2_r,OUTPUT);
pinMode(m3_l,OUTPUT);
pinMode(m3_r,OUTPUT);
pinMode(enl,OUTPUT);
pinMode(vent,OUTPUT);
digitalWrite(m1_l,LOW);
digitalWrite(m1_r,LOW);
digitalWrite(m2_l,LOW);
digitalWrite(m2_r,LOW);
digitalWrite(m3_l,LOW);
digitalWrite(m3_r,LOW);
digitalWrite(enl,HIGH);
digitalWrite(vent,LOW );
sensors.begin();
Serial.begin(115200);
TCCR2B = TCCR2B & 0b11111000 | 0x04;
//devices=sensors.getDeviceCount();//считаем сколько датчиков подключено
if (!sensors.getAddress(Thermometer2, 2)) err2=1;//ошибка. нет датчика 2 - улица
if (!sensors.getAddress(Thermometer3, 3)) err3=1;//ошибка. нет датчика 3 - салон
sensors.setResolution(Thermometer2, 9);
sensors.setResolution(Thermometer3, 9);
GLCD.Init(NON_INVERTED); // initialise the library, non inverted writes pixels onto a clear screen
GLCD.ClearScreen();
GLCD.SelectFont(System5x7);
GLCD.CursorTo(0,5);
GLCD.Puts("OUTSIDE:");
GLCD.CursorTo(0,6);
GLCD.Puts("VENT SPEED:");
/*
if(analogRead(val1) > max_1-10 && analogRead(val2) < min_2+10) flow=2;
if(analogRead(val1) > max_1-10 && analogRead(val2) > max_2-10) flow=0;
if(analogRead(val1) > min_1-10 && analogRead(val1) < min_1+10) flow=1;
*/
temp_s = EEPROM.read(address);//читаем заданую температуру из еепром
bytes[0] = 0xFF;
bytes[1] = temp_s;
bytes[2] = flow;
bytes[3] = 0;
Serial.write( bytes,4);//отправляем ее в комп
//Serial.println(analogRead(var));
}
void loop(void)
{
res_dt1 = analogRead(JOY); // прочитать данные АЦП
buttons();
motor1 = analogRead(val1); // прочитать данные АЦП
motor2 = analogRead(val2); // прочитать данные АЦП
motor3 = analogRead(var); // прочитать данные АЦП
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(a==0x78)vent_s=b*10;
}
analogWrite(vent, vent_s);//вентилятор
if ((millis()-time)>500 && res_dt1 == 1023) //запуск процедур по таймеру
{
time = millis();
termometer();
}
motors();
lcd();
vent_speed=vent_s/17;
}
void termometer()
{
int m0, m1, m;
sensors.requestTemperatures();
temp2 = sensors.getTempC(Thermometer2);
temp3 = sensors.getTempC(Thermometer3);
if(temp3<0)
{
m0=1;
temp3=-temp3;
}
else m0=0;
if(temp2<0)
{
m1=1;
temp2=-temp2;
}
else m1=0;
m=m0*10+m1;
bytes[0] = 0x64; //префикс
bytes[1] = temp3; //салон
bytes[2] = m;
bytes[3] = temp2; //улица
Serial.write( bytes,4);
}
void motors()
{
if(temp_s)//
{
int8_t TempIndex=(temp_s-10)/2;//при temp_s=10 на выходе 0, при temp_s=40 на выходе 15.
int16_t var_n=vars[TempIndex]; // получили var_n
int16_t CurrentInput=5; //получили положение
if (CurrentInput<var_n+DeltaConst)
digitalWrite(m3_r,HIGH);
else
digitalWrite(m3_r,LOW);
if (CurrentInput>var_n-DeltaConst)
digitalWrite(m3_l,HIGH);
else
digitalWrite(m3_l,LOW);
}
if(flow==0)//стекло
{
if (analogRead(val2)<max_2)digitalWrite(m2_r,HIGH);
else digitalWrite(m2_r,LOW);
if (analogRead(val1)<max_1)digitalWrite(m1_l,HIGH);
else digitalWrite(m1_l,LOW);
}
if(flow==1)//в ноги
{
if (analogRead(val1)>min_1)digitalWrite(m1_r,HIGH);
else digitalWrite(m1_r,LOW);
}
if(flow==2)//боковые
{
if (analogRead(val2)>min_2)digitalWrite(m2_l,HIGH);
else digitalWrite(m2_l,LOW);
if (analogRead(val1)<max_1)digitalWrite(m1_l,HIGH);
else digitalWrite(m1_l,LOW);
}
if(flow==3)//стекло и ноги
{
if (analogRead(val2)<max_2)digitalWrite(m2_r,HIGH);
else digitalWrite(m2_r,LOW);
if (analogRead(val1)>min_1)digitalWrite(m1_r,HIGH);
else digitalWrite(m1_r,LOW);
}
}
void buttons()
{
if(res_dt1>=715 && res_dt1<=725)//temp_s++. кнопка VOL UP
{
if(temp_s<38)
{
temp_s=temp_s+2;
delay(30);
}
bytes[0] = 0x5A; //префикс
bytes[1] = temp_s;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(150);
}
if(res_dt1>=635 && res_dt1<=645)//temp_s--. кнопка VOL DOWN
{
if(temp_s>12)
{
temp_s=temp_s-2;
delay(30);
}
bytes[0] = 0x5A; //префикс
bytes[1] = temp_s;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(150);
}
if(res_dt1>=176 && res_dt1<=186)//кнопка SOURCE
{
EEPROM.write(address, temp_s);//пишем в еепром temp_set
delay(500);
}
if(res_dt1>=556 && res_dt1<=566)//vent_s ++. кнопка TRACK UP
{
vent_s=vent_s+10;
delay(30);
if(vent_s > 250)vent_s=255;
bytes[0] = 0xC8; //префикс
bytes[1] = vent_s/10;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
if(res_dt1>=475 && res_dt1<=485)//vent_s --. кнопка TRACK DOWN
{
vent_s=vent_s-10;
delay(30);
if(vent_s <=0)vent_s=0;
bytes[0] = 0xC8; //префикс
bytes[1] = vent_s/10;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
if((res_dt1>=843 && res_dt1<=853) || f==0)// на стекло. кнопка MODE
{
flow=0;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
if((res_dt1>=401 && res_dt1<=411) || f==1)//в ноги. кнопка FILE
{
flow=1;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
if((res_dt1>=784 && res_dt1<=794) || f==2)//боковые. кнопка SEL
{
flow=2;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
if((res_dt1>=307 && res_dt1<=327) || f==3)//на стекло и в ноги. кнопка ATT
{
flow=3;
f=5;
bytes[0] = 0x4B;
bytes[1] = flow;
bytes[2] = 0;
bytes[3] = 0;
Serial.write( bytes,4);
delay(80);
}
}
void lcd()
{
GLCD.SelectFont(DS);
GLCD.CursorTo(0,0);
GLCD.PrintNumber(temp3);
GLCD.Puts("/ ");
if(temp_s>=10)GLCD.CursorTo(5,0);
else GLCD.CursorTo(6,0);
GLCD.PrintNumber(temp_s);
GLCD.Puts("/");
GLCD.SelectFont(System5x7);
GLCD.CursorTo(8,5);
GLCD.PrintNumber(temp2);
GLCD.Puts(" C");
int i=0;
for(i=0;i<vent_speed;i++)
{
GLCD.CursorTo(i,7);
GLCD.Puts("0");
}
int j=0;
for(j=vent_speed;j<15;j++)
{
GLCD.CursorTo(j,7);
GLCD.Puts(" ");
}
if(flow==0)GLCD.DrawBitmap(screen, 96,32, BLACK);
if(flow==1)GLCD.DrawBitmap(legs, 96,32, BLACK);
if(flow==2)GLCD.DrawBitmap(side, 96,32, BLACK);
if(flow==3)GLCD.DrawBitmap(both, 96,32, BLACK);
}
Странно.Мотор уходит на макс и не реагирует.
-
Re: Замена ручного управления печкой
Current input замени на motor3 или analogwrite(var).
Сейчас получается, что Current input=5, т.е. всегда меньше, чем любое значение var_n. Поэтому постоянно выполняется if (CurrentInput<var_n+DeltaConst) и, соответственно, digitalWrite(m3_r,HIGH);
-
Re: Замена ручного управления печкой
чорт!
есесно вместо
int16_t CurrentInput=5; //получили положение
надо
int16_t CurrentInput=analogRead(var); //получили положение
Звиняй, невнимательность - мой конек! :-)
-
Re: Замена ручного управления печкой
О,все работает, прикольно, только мотор в некоторых положениях дергается.Нда видимо не всегда правильно когда подсказывают,хотя сам
я бы никаких массивов не написал.:)
Сам попробую разобраться,а то вы так и будете за меня думать.:D
Подскажите если можно что это значит:
PHP код:
#define DeltaConst 3-----?
int16_t vars[16]={132,144,162,206,275,342,396,451,506,561,620,685,760,805,856,896};
#define vent 31 //ШИМ вентилятора
int res_dt1;//джойстик
int motor1, motor2, motor3;//АЦП приводов
int min_2 = 185; //боковые
int max_2 = 450; //стекло
int centr_1 = 310; //среднее первый
int min_1 = 310; //ноги
int max_1 = 490; //ноги закрыто
int centr_2 = 370; //среднее второй
int vent_s=3;-----------?
int vent_speed=3;-------?
int t=5, f=0; ---?
int flow=5; ---?
int temp_s=17;---?
unsigned long time;
sensors.setResolution(Thermometer2, 9);-?
sensors.setResolution(Thermometer3, 9);---?
/*
if(analogRead(val1) > max_1-10 && analogRead(val2) < min_2+10) flow=2;
if(analogRead(val1) > max_1-10 && analogRead(val2) > max_2-10) flow=0;
if(analogRead(val1) > min_1-10 && analogRead(val1) < min_1+10) flow=1;
*/ как это закоментировано--?
analogWrite(vent, vent_s);//вентилятор ---что это значит?
if ((millis()-time)>500 && res_dt1 == 1023) //запуск процедур по таймеру
{
time = millis();
termometer();
}
motors();
lcd();
vent_speed=vent_s/17;
}
void termometer()
{
int m0, m1, m; -- ?
sensors.requestTemperatures(); --- ?
temp2 = sensors.getTempC(Thermometer2);
temp3 = sensors.getTempC(Thermometer3);
if(temp3<0)----------?
{
m0=1;
temp3=-temp3;
}
else m0=0;
if(temp2<0)
{
m1=1;
temp2=-temp2;
}
else m1=0;
m=m0*10+m1;
Заранее спасибо.
-
Re: Замена ручного управления печкой
И еще вопрос по лсд.
И гуглил,и яндексил но про лсд только для уже продвинутых пользователей.А для чайников ничего не нашел.Может подскажете,где почитать, а то боюсь эта ветка на войну и мир станет похожа,если я буду столько вопросов задавать.:o
-
Re: Замена ручного управления печкой
1. #define DeltaConst 3 установлен диапазон значений для АЦП
2. int vent_s;
int vent_speed; одна переменная для вывода в ШИМ вентилятора, вторая для передачи значения. для экономии можно объявить char вместо int. (char 1 бат от 0 до 255, int 2 байта).
3. int flow=5; направление потока воздуха. тоже по идее должно было быть char
4. int temp_s=17; установленная температура. 17 для отладки. потом необходимое значение запоминается в еепром.
5.
sensors.setResolution(Thermometer2, 9);
sensors.setResolution(Thermometer3, 9); настройка дачтиков.
6.
/*
if(analogRead(val1) > max_1-10 && analogRead(val2) < min_2+10) flow=2;
if(analogRead(val1) > max_1-10 && analogRead(val2) > max_2-10) flow=0;
if(analogRead(val1) > min_1-10 && analogRead(val1) < min_1+10) flow=1;
*/ закомментировано /**/ позволяет определить направление потока воздуха при старте для последующей отправки в карПС, если нужна такая функция.
7.
analogWrite(vent, vent_s); ШИМ вентилятора отопителя.
8.
int m0, m1, m; для передачи отрицательной температуры. в зависимости от софта на компьютере лучше иначе. temp+40 например.
9. sensors.requestTemperatures(); функция чтения температуры с датчиков
По lcd вот например http://robocraft.ru/blog/821.html
А сейчас на ЖК что-нибудь выводится? Что-то не получается у меня запустить ЖК в эмуляции на ардуино-мега. Причем на ардуино нано все работает.
-
Re: Замена ручного управления печкой
за свое отвечу:
#define DeltaConst 3
Есть текущее значение CurrentInput и есть нужное положение var_n. Если CurrentInput<var_n, то CurrentInput нужно увеличить, наоборот - уменьшить. Так?
Делаем мы это включая двигатель в разные стороны.
Можно написать что-то вроде
Код:
if (CurrentInput<var_n)
{
digitalWrite(m3_r,HIGH);
digitalWrite(m3_l,LOW);
}
else
if (CurrentInput>var_n)
{
digitalWrite(m3_r,LOW);
digitalWrite(m3_l,HIGH);
}
else
{
digitalWrite(m3_r,LOW); //выключаем двигатель, мы в нужной точке!
digitalWrite(m3_l,LOW);
}
Написав такой код мы столкнемся с одной проблемой: жужжание.
Связано оно с тем, что двигатель имеет инерцию, в редукторе есть люфты, а аналого-цифровой преобразователь шумит - даже при одном и том же входящем напряжении может выдавать, к примеру, то 170, то 171, то 169. А если еще по шине питания процессора идет какой-то ток, то и на 10-20 прыгать.
Что с этим делать? Надо заменить точку назначения интервалом, положение внутри которого считается нормальным и двигатель выключать. Обозначим начало интервала var_n1, а конец var_n2.
Код:
if (CurrentInput<var_n1)
{
digitalWrite(m3_r,HIGH);
digitalWrite(m3_l,LOW);
}
else
if (CurrentInput>var_n2)
{
digitalWrite(m3_r,LOW);
digitalWrite(m3_l,HIGH);
}
else
{
digitalWrite(m3_r,LOW);
digitalWrite(m3_l,LOW);
}
так? Делаем интервал достаточно широким и наслаждаемся тишиной.
Но для этого нам же придется вместо одного значения var_n хранить два var_n1 и var_n2! А это нехорошо, учитывая, что у нас на самом деле не одно значение, а массив! Сделаем интервал чуть по-другому - будем хранить только середину интервала var_n и точность DeltaConst.
То есть
var_n1=var_n-DeltaConst
var_n2=var_n+DeltaConst
получаем
Код:
if (CurrentInput<var_n-DeltaConst)
{
digitalWrite(m3_r,HIGH);
digitalWrite(m3_l,LOW);
}
else
if (CurrentInput>var_n+DeltaConst)
{
digitalWrite(m3_r,LOW);
digitalWrite(m3_l,HIGH);
}
else
{
digitalWrite(m3_r,LOW);
digitalWrite(m3_l,LOW);
}
А теперь еще раз оптимизируем - меняем этот код на
if (CurrentInput<var_n-DeltaConst)
digitalWrite(m3_r,HIGH);
else
digitalWrite(m3_r,LOW);
if (CurrentInput>var_n+DeltaConst)
digitalWrite(m3_l,HIGH);
else
digitalWrite(m3_l,LOW);
Он становится менее понимаемым, но результат у него абсолютно тот же.
Проверить несложно, поставив мысленный эксперимент - что происходит при всех трех положениях
CurrentInput<var_n-DeltaConst
var_n-DeltaConst<CurrentInput<var_n+DeltaConst
CurrentInput>var_n+DeltaConst
-
Re: Замена ручного управления печкой
sensors.requestTemperatures();
temp2 = sensors.getTempC(Thermometer2);
temp3 = sensors.getTempC(Thermometer3);
Думаю, что речь идет о далласовских датчиках. Тогда у них протокол такой - им дают команду на измерение, а через некоторое время считывают отдельной командой результат. При этом команда на измерение может даваться сразу всем датчикам, что тут и делается.
-
Вложений: 1
Re: Замена ручного управления печкой
Ух,блин как много всего,есть пища для размышлений.Спасибо,однако.
Дисплей кстати показывает все нормально,просто фонт 5х7 убрать захотел и вместо него символы,как у иносранных авто.Дисплей приспособил другой,мелт по размерам не влазил.Может быть и не озадачился я бы электронным отопителем,но есть но и не одно.Во-первых после переделки рамки под моник ,родные крутилки смотрятся коряво,во вторых чтобы подкрастца к монитору надо пол торпеды разобать(инженеры вольво "гении" не иначе) и в-третьих декоративная накладка сильно постарела и место ей на помойке.:D
-
Re: Замена ручного управления печкой
Блин,но мотор почему то всеравно дергаеся иногда,как будто резистор протерт. Залил свою писанину не дергается,встает сразу,заливаю переделанную трясется.:confused:
-
Re: Замена ручного управления печкой
Попробуй увеличить DeltaConst где-нибудь до 10-15. Резистор там +- километр, да и привод не мгновенно останавливается. Что интересно, на десятке в стоке используется шаговый двигатель для одной из заслонок (в подробности не вникал). Подозреваю, что как раз из-за точности позиционирования.
-
Re: Замена ручного управления печкой
Совсем ослеп
Цитата:
#define DeltaConst 3 установлен диапазон значений для АЦП
.И кстати проверят резистор в приводе,работает четко,все таки буржуи умеют запчасти делать(привод от ауди).
-
Re: Замена ручного управления печкой
Поставил 10 все работает четко.Спасибо всем еще раз.
-
Re: Замена ручного управления печкой
А чем дисплеи WG12864 от МТ-12864 отличаются кроме названий выводов ? А то повторил схему а изображения нет:confused:
-
Re: Замена ручного управления печкой
Нужно даташиты обоих дисплеев смотреть
-
Re: Замена ручного управления печкой
Приветствую. У меня вот такой модуль получился. Управление за счет джойстика Sony, который под рулем стоит. Плюсом еще стоит эквалайзер.
http://i070.radikal.ru/1209/c4/8a8712dfa1bd.jpg
http://s018.radikal.ru/i521/1209/d7/6fb9dadd46fe.jpg
http://s45.radikal.ru/i110/1209/dc/8ea875e2e328.jpg
http://s54.radikal.ru/i146/1209/fc/2b00f188eddb.jpg
Сделан усилитель для колонок и линейный выход для саба.
Усилитель от автомагнитолы и цифровой эквалайзер от конструктора. Питание через Кренки. Ваше мнение ?
-
Re: Замена ручного управления печкой
Подниму пожалуй старую тему. Занимаюсь сейчас переделкой свой ручной печки. Не могу найти сервы. Может подскажет кто какие купить? Ссылки в теме не работают уже.
-
Re: Замена ручного управления печкой
если полностью разработка с контроллером - то есть сервопривода или сервомашинки в магазинах радиоуправляемых игрушек.
-
Re: Замена ручного управления печкой
А они все смогут ходить на тот градус который мне надо? И примерно какое усилие нужно? Иномарка.
-
Re: Замена ручного управления печкой
Просто есть у меня один серво привод модельный, небольшой, у меня получилось заставить его работать только в трех положениях останавливаться.
-
Re: Замена ручного управления печкой
Попробуй проверить свою серву вот этим кодом для сервомоторов
-
Re: Замена ручного управления печкой
-
Re: Замена ручного управления печкой
Нашел серву. hexTronik HX12K модель. Может кто видел? Подойдет ли она?
---
Что-то она у меня мертвая. Разбирал помню её, делал постоянно крутащююся. Сейчас не хочет крутиться правильно. Подскажите, кто какие сервы использует? С какими проблем точно не будет.
-
Re: Замена ручного управления печкой
Серву завел. Работает в диапазоне от 810 до 2200 мкс. Как то странно. Ноль импульсом задать не получается, только записью положения (myservo.write(0);) А импульс работает только от 810 мкс.
Ну да ладно. Придут ещё такие сервы, их проверю. Усилие у них 10-15 кг/см. Думаю хватит за глаза для тросиков. При установке определенного угла, держит этот угол пока не отключишь серву от ардуины (управляющий кабель), не жужит, но громко меняет угол что естественно. Попробую на днях подключить в машине, погонять с тросиком.
-
Re: Замена ручного управления печкой
http://www.avislab.com/blog/serva/ посмотри здесь по управлению севами
-
Re: Замена ручного управления печкой
Нужна помощь,я новичок да и в программировании 0! Вопрос такой Можно создать какой один скетч который надо залить в Arduino nano v7. 328 чтобы это всё заработало.Ни один скетч с форума в неё не лезет ругается.