для начала нужно узнать показания сенсора при 30 и 70 градусах, а затем если понадобится немного уменьшить угол для равномерного движения по шкале, но угол нужно уменьшать с двух сторон (если нужно уменьшить на 30 градусов то нужно будет поменять int ugol = map(temp, temp30, temp70, 15, 75); по 15 градусов с каждой стороны)
красный и зеленый - 30 градусов (обмотка работает в диапазоне от 150 до 70 градусов по циферблату). Установил на пины 11- зеленый, 9 - красный.
Белый и желтый -70 градусов (обмотка работает в диапазоне от 70 до 150 градусов по циферблату. Установил на пины 5- желтый, 3- белый.
По датчику ничего не смогу вам сказать, у него нет маркировки.
Купил оригинальный датчик от данного показометра показания совпадают. Подключаю их через сопротивление в 10 КОм
эти обмотки немного не так работают (не утверждаю ), думаю они расположены друг к другу под 90 градусов и работают в паре, обмотка на 30 градусов поворачивает стрелку на 30 а при подключении второй (на 70) пытается отклонить к 70 и при равных напряжениях устанавливает между ними на 50, ну и так далее только меняя полярность уже выбирается нужный сегмент для отклонения.
до 110 градусов можно снять показания с цифрового датчика пипа ds18b20 повесить на один радиатор рядом друг с другом и нагревать паяльником (только не касаясь ))) )
нет, угол взят стандартный в 90 градусов, этот угол нужно будет менять только в том случае когда температуры близкие к отсчетным не будут влиять на стрелку, те можно закоментировать вход датчика, и поскольку цена деления 2,5 градуса записать температуру в 32 и уменьшая угол добиться отклонения стрелки на первое деление после 30.
т.е.
int temp30 = 30; // точки для
int temp70 = 70; // установки
int temp110 = 110; // значений порогов
int temp150 = 150; // по измерениям
int sensPIN = 0; // подключение сенсора
int temp = 32; // выставляем температуру для колибровки прибора
// выходы на показометр
int pin1 = 3; // + катушки на 30 град.
int pin2 = 5; // - катушки на 30 град.
int pin3 = 9; // + катушки на 70 град.
int pin4 = 11; // - катушки на 70 град.
int chustvitelnost = 255; // гипотенуза прямоугольного треугольника
void setup()
{
pinMode(pin1,OUTPUT);
pinMode(pin2,OUTPUT);
pinMode(pin3,OUTPUT);
pinMode(pin4,OUTPUT);
}
void loop()
{
//int temp = analogRead(sensPIN); // A0 для входа аналового датчика
// остальное обработка по температуре
if (temp<=temp30)
{
analogWrite(pin1,255);
analogWrite(pin2,0);
analogWrite(pin3,0);
analogWrite(pin4,0);
}
else if (temp>temp30 && temp<temp70)
{
int ugol = map(temp, temp30, temp70, 0, 90); // а здесь колибруем уменьшая угол
// например уменьшеный на 20 градусов
// int ugol = map(temp, temp30, temp70, 10, 80);
analogWrite(pin1,chustvitelnost*cos(ugol*3.1416/180));
analogWrite(pin2,0);
analogWrite(pin3,chustvitelnost*sin(ugol*3.1416/180));
analogWrite(pin4,0);
}
в зависимости от температуры выбираются контакты катушки т.е. этот участок отвечает за подключение катушек в направлении 30 и 70, т.е. управляет выводами плуса на этих катушках а минусы сажает на минус.
этод код поменял контакты местами на первый контакт подал минус и начал управлять другим контактом катушки(сделав из катушки 30 катушку 110)
т.е. мы включили сразу обмотку на 30 и начали отклонять к 70 , для этого формулы уменьшают напряжение на катушке 30 и увеличивают на катушке 70 пока не притянут к 70, а после 70 мы поменяли полярность на катушке на 30 и она стала катушкой на 110 и теперь она начинает отклонять уже к 110, уменьшая напряжение на катушке 70 и увеличивая на катушке 110.(по сути формулы нужны для равномерного распределения шкалы, при линейном перемещении будет правильно показывать только на отсчетных точках 30,70,110,150 , и при равных напряжениях в двух обмотках между отсчетными точками50,90,130)
исправленный скетч, помогли найти мой косяк )))
попробуйте
int temp30 = 30; // точки для int temp70 = 70; // установки int temp110 = 110; // значений порогов int temp150 = 150; // по измерениям int sensPIN = 0; // подключение сенсора // выходы на показометр int pin1 = 3; // + катушки на 30 град. int pin2 = 5; // - катушки на 30 град. int pin3 = 9; // + катушки на 70 град. int pin4 = 11; // - катушки на 70 град. int chustvitelnost = 255; // гипотенуза прямоугольного треугольника void setup() { pinMode(pin1,OUTPUT); pinMode(pin2,OUTPUT); pinMode(pin3,OUTPUT); pinMode(pin4,OUTPUT); } void loop() { int temp = analogRead(sensPIN); // A0 для входа аналового датчика // остальное обработка по температуре if (temp<=temp30) { analogWrite(pin1,255); analogWrite(pin2,0); analogWrite(pin3,0); analogWrite(pin4,0); } else if (temp>temp30 && temp<temp70) { int ugol = map(temp, temp30, temp70, 0, 90); analogWrite(pin1,chustvitelnost*cos(ugol*3.1416/180)); analogWrite(pin2,0); analogWrite(pin3,chustvitelnost*sin(ugol*3.1416/180)); analogWrite(pin4,0); } else if (temp==temp70) { analogWrite(pin1,0); analogWrite(pin2,0); analogWrite(pin3,255); analogWrite(pin4,0); } else if (temp>temp70 && temp<temp110) { int ugol = map(temp,temp70,temp110, 0,90); analogWrite(pin1,0); analogWrite(pin2,chustvitelnost*sin(ugol*3.1416/180)); analogWrite(pin3,chustvitelnost*cos(ugol*3.1416/180)); analogWrite(pin4,0); } else if (temp==temp110) { analogWrite(pin1,0); analogWrite(pin2,255); analogWrite(pin3,0); analogWrite(pin4,0); } else if (temp>temp110 && temp<temp150) { int ugol = map(temp,temp110,temp150, 0,90); analogWrite(pin1,0); analogWrite(pin2,chustvitelnost*cos(ugol*3.1416/180)); analogWrite(pin3,0); analogWrite(pin4,chustvitelnost*sin(ugol*3.1416/180)); } else if (temp>=temp150) { analogWrite(pin1,0); analogWrite(pin2,0); analogWrite(pin3,0); analogWrite(pin4,255); } }Привет. Код заработал, идет плавное изменение показний.
Осталось от калибровать сенсор.
вот значения которые Вы просили, только удалось изменить только в пределах от 50-35 градусов. Нет подходящего термометра.
Вот значения с аналогово порта:
50-144
46-131
40-113
39-110
38-107
37-104
36-101
35-98
Как видно изменения идут через каждые 3 пункта.
По Вашему коду практически все понятно.
Заранее благодарен Вам.
Контакты по цветам:
красный и зеленый - 30 градусов (обмотка работает в диапазоне от 150 до 70 градусов по циферблату). Установил на пины 11- зеленый, 9 - красный.
Белый и желтый -70 градусов (обмотка работает в диапазоне от 70 до 150 градусов по циферблату. Установил на пины 5- желтый, 3- белый.
По датчику ничего не смогу вам сказать, у него нет маркировки.
Купил оригинальный датчик от данного показометра показания совпадают. Подключаю их через сопротивление в 10 КОм
Еще кое что.
Я изменил точки для значений порогов, стало работать стабильнее
и при добавление строки "float temp", учитывая измененные точки порогов
float temp = 90 установка ровно на 30 градусов по циферблату
float temp = 180 установка ровно на 70 градусов по циферблату
float temp = 270 установка ровно на 110 градусов по циферблату
float temp = 360 установка ровно на 150 градусов по циферблату
для начала нужно узнать показания сенсора при 30 и 70 градусах, а затем если понадобится немного уменьшить угол для равномерного движения по шкале, но угол нужно уменьшать с двух сторон (если нужно уменьшить на 30 градусов то нужно будет поменять int ugol = map(temp, temp30, temp70, 15, 75); по 15 градусов с каждой стороны)
Я изменил точки для значений порогов, стало работать стабильнее
эти точки и нужно выставить по показаниям датчика на этих температурах.
Контакты по цветам:
красный и зеленый - 30 градусов (обмотка работает в диапазоне от 150 до 70 градусов по циферблату). Установил на пины 11- зеленый, 9 - красный.
Белый и желтый -70 градусов (обмотка работает в диапазоне от 70 до 150 градусов по циферблату. Установил на пины 5- желтый, 3- белый.
По датчику ничего не смогу вам сказать, у него нет маркировки.
Купил оригинальный датчик от данного показометра показания совпадают. Подключаю их через сопротивление в 10 КОм
эти обмотки немного не так работают (не утверждаю ), думаю они расположены друг к другу под 90 градусов и работают в паре, обмотка на 30 градусов поворачивает стрелку на 30 а при подключении второй (на 70) пытается отклонить к 70 и при равных напряжениях устанавливает между ними на 50, ну и так далее только меняя полярность уже выбирается нужный сегмент для отклонения.
до 110 градусов можно снять показания с цифрового датчика пипа ds18b20 повесить на один радиатор рядом друг с другом и нагревать паяльником (только не касаясь ))) )
Т. Е. Нужно изменить это
else if (temp>temp70 && temp<temp110)
нет, угол взят стандартный в 90 градусов, этот угол нужно будет менять только в том случае когда температуры близкие к отсчетным не будут влиять на стрелку, те можно закоментировать вход датчика, и поскольку цена деления 2,5 градуса записать температуру в 32 и уменьшая угол добиться отклонения стрелки на первое деление после 30.
т.е.
int temp30 = 30; // точки для int temp70 = 70; // установки int temp110 = 110; // значений порогов int temp150 = 150; // по измерениям int sensPIN = 0; // подключение сенсора int temp = 32; // выставляем температуру для колибровки прибора // выходы на показометр int pin1 = 3; // + катушки на 30 град. int pin2 = 5; // - катушки на 30 град. int pin3 = 9; // + катушки на 70 град. int pin4 = 11; // - катушки на 70 град. int chustvitelnost = 255; // гипотенуза прямоугольного треугольника void setup() { pinMode(pin1,OUTPUT); pinMode(pin2,OUTPUT); pinMode(pin3,OUTPUT); pinMode(pin4,OUTPUT); } void loop() { //int temp = analogRead(sensPIN); // A0 для входа аналового датчика // остальное обработка по температуре if (temp<=temp30) { analogWrite(pin1,255); analogWrite(pin2,0); analogWrite(pin3,0); analogWrite(pin4,0); } else if (temp>temp30 && temp<temp70) { int ugol = map(temp, temp30, temp70, 0, 90); // а здесь колибруем уменьшая угол // например уменьшеный на 20 градусов // int ugol = map(temp, temp30, temp70, 10, 80); analogWrite(pin1,chustvitelnost*cos(ugol*3.1416/180)); analogWrite(pin2,0); analogWrite(pin3,chustvitelnost*sin(ugol*3.1416/180)); analogWrite(pin4,0); }а за переключение отвечают эти строки
analogWrite(pin1,chustvitelnost*cos(ugol*3.1416/180));
analogWrite(pin2,0);
analogWrite(pin3,chustvitelnost*sin(ugol*3.1416/180));
analogWrite(pin4,0);
в зависимости от температуры выбираются контакты катушки т.е. этот участок отвечает за подключение катушек в направлении 30 и 70, т.е. управляет выводами плуса на этих катушках а минусы сажает на минус.
далее
analogWrite(pin1,0);
analogWrite(pin2,chustvitelnost*sin(ugol*3.1416/180));
analogWrite(pin3,chustvitelnost*cos(ugol*3.1416/180));
analogWrite(pin4,0);
этод код поменял контакты местами на первый контакт подал минус и начал управлять другим контактом катушки(сделав из катушки 30 катушку 110)
т.е. мы включили сразу обмотку на 30 и начали отклонять к 70 , для этого формулы уменьшают напряжение на катушке 30 и увеличивают на катушке 70 пока не притянут к 70, а после 70 мы поменяли полярность на катушке на 30 и она стала катушкой на 110 и теперь она начинает отклонять уже к 110, уменьшая напряжение на катушке 70 и увеличивая на катушке 110.(по сути формулы нужны для равномерного распределения шкалы, при линейном перемещении будет правильно показывать только на отсчетных точках 30,70,110,150 , и при равных напряжениях в двух обмотках между отсчетными точками50,90,130)
Вот значения с аналогово порта:
50-144
46-131
40-113
39-110
38-107
37-104
36-101
35-98
Как видно изменения идут через каждые 3 пункта.
если я правильно понял, то нужно
int temp30 = 84;
int temp70 = 204;
int temp110 = 324;
int temp150 = 444;
только сразу откалибруйте угол без датчика.