для начала нужно узнать показания сенсора при 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)
исправленный скетч, помогли найти мой косяк )))
попробуйте
Привет. Код заработал, идет плавное изменение показний.
Осталось от калибровать сенсор.
вот значения которые Вы просили, только удалось изменить только в пределах от 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.
т.е.
а за переключение отвечают эти строки
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;
только сразу откалибруйте угол без датчика.