Датчик температуры

MadAirMan
Offline
Зарегистрирован: 24.12.2012

 

Всем привет. 
 
Товарищи помогите разобраться. Задача в следующем нужно отображать показания температуры на показометре фирмы greddy. Еще есть драйвер двигателя на l298n но пока не могу с ним разобраться. 
 
Пользуюсь arduino не давно. Написать скетч для считывания данных с датчика смогу. А дальше тупик. 
 
Имеем показометр greddy ( фото ниже) arduino mega, темп. датчик, драйвер двигателя L298N
 

 

 

denis707
Offline
Зарегистрирован: 09.09.2013

http://cxem.net/arduino/arduino70.php

посмотрите тут, можеп поможет.

а там разве шаговик стоит?

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Спасибо за ответ. 

Честно говоря очень сомневаюсь, что это шаговик. Потому как стрелка стремиться всегда к одной точки и фиксированного положения у нее нет. Тогда еще один вопрос как определить какой это двигатель?

maksim
Offline
Зарегистрирован: 12.02.2012

Это не двигатель. http://www.grafik-plus.ru/ST_finger/st_f_31_1.htm

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Ok, а почему на нем 2 обмотки?

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Я еще думал, что он управляется с помощью ШИМ. 

Очень хочу разобраться. Помогите пожалуйста. 

denis707
Offline
Зарегистрирован: 09.09.2013

а с чего решили что у него 2 обмотки?

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Прозванивал))) на двух парах контактов прибор в ноль уходил. 

denis707
Offline
Зарегистрирован: 09.09.2013

MadAirMan пишет:

Прозванивал))) на двух парах контактов прибор в ноль уходил. 

а можно фото со стороны платы?

04813017AA      We Specialize in IC semiconductor

MadAirMan
Offline
Зарегистрирован: 24.12.2012

denis707
Offline
Зарегистрирован: 09.09.2013

похоже двигатель действительно шаговый.

я не могу рассмотреть, редуктор стоит или нет?

нагрузка должна быть небольшая, померяйте сколько потребляет обмотка при 5v ,

если меньше 20ма то можно на прямую к ардуино.(вроде даже до 50ма )

управление тогда будет:

  pin-------      1  2  3  4 (pin образно, можно любые )))  )

1шаг             -  +  -  +

2шаг             +  -  -  +

3шаг             +  -  +  -

4шаг             -  +  +  -

как-то так

но перед этим на пол секунды в обратную сторону для обнуления, затем обработка температуры свыше 30 градусов

maksim
Offline
Зарегистрирован: 12.02.2012

Не двигатель это (в общем понимании этого слова) и не шаговый. Если бы это был шаговик ,то при вращении пальцем чувствовались бы шаги и стрелка не была бы подпружинена.

Вторая обмотка нужна для компенсации усилия первой обмотки. То есть одна обмотка "тянет" стрелку в одну сторону, а другая в противоположную не смотря на то что стрелка и так подпружинена. Зачем так делается уже не помню, толи для дифференциального включения, толи для более стабильного удержания стрелки.

Так что крутить стрелку можно одной обмоткой ШИМом.

 

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Двигатель не шаговый. 

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Максим, вы абсолютно правы. 

На обмотках сопротивления 0 

при +5 вольтах на первой обмотке стрелка перемещается на отметку в 70 градусов. При изменении подачи питания ( полярности)  стрелка вращается в противоположенную сторону на отметку 150.  

Подключая вторую обмотку стрелка двигается на 30 градусов по часовой стрелке и на 110 градусов против часовой стрелки.

И дальше опять тупик. По микросхеме нет даташита. Поэтому пологаться на нее, думаю, нет смысла. 

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Еще там стоит инвертор с тригером Шмитта

denis707
Offline
Зарегистрирован: 09.09.2013

одной обмоткой все равно не получится, покрайней мере на полную шкалу

denis707
Offline
Зарегистрирован: 09.09.2013

попробуйте через переменное сопротивление в качестве делителя по одной обмотке посмотреть как ведет себя стрелка

denis707
Offline
Зарегистрирован: 09.09.2013

принцип того же шагового на 4 шага по 90 градусов, только шим все равно через 4 ноги слать 

30        1-LOW 2-LOW 3-LOW 4-HIGH

50        1-LOW 2-HIGH 3-LOW 4-HIGH

70        1-LOW 2-HIGH 3-LOW 4-LOW

90        1-LOW 2-HIGH 3-HIGH 4-LOW

110     1-LOW 2-LOW 3-HIGH 4-LOW

130     1-HIGH 2-LOW 3-LOW 4-HIGH

150     1-HIGH 2-LOW 3-LOW 4-LOW

только через шим и с большим разрешением

от 30 до 70        34 положения на поворот стрелки на 90 градусов в самый раз

denis707
Offline
Зарегистрирован: 09.09.2013

нужна реализация шага 1/34

типа этого

denis707
Offline
Зарегистрирован: 09.09.2013

обмотка которая показывает на 30 

и обмотка которая показывает на 70

объеденить их минусы, подать на минус а плюсовые выводы обмоток подключить так

если я прав то резистор будет крутить стрелку от 30 до 70 (зависит от резистора, с малым сопротивлением угол может быть меньше, а с очень большим вообще не работать)

gena
Offline
Зарегистрирован: 04.11.2012

  Почитайте даташит на LM1819, LMS111, CS8190. Напишите название своей микросхемы, лучше чёткое фото. Вероятно, что такие стрелочные приборы применялись в автомобилях, в основном иномарках. Недавно встречал указатели несколько другого исполнения, но принцип движения стрелки тот же. http://s004.radikal.ru/i207/1309/1e/01cc1a8ce96a.jpg    А это скетч, которым я исследовал этот прибор (мотор).

int p1 = 11;
int n1 = 7;
int p2 = 10;
int n2 = 6;
int del = 300;

void setup() {

pinMode(p1, OUTPUT);
pinMode(n1, OUTPUT);
pinMode(p2, OUTPUT);
pinMode(n2, OUTPUT);

digitalWrite(p1, HIGH); // исходное состояние
digitalWrite(n1, LOW);
digitalWrite(p2, LOW);
digitalWrite(n2, LOW);
}
// вращение по часовой стрелке
void loop() {

digitalWrite(p2, HIGH);
delay(del);
digitalWrite(p1, LOW);
delay(del);
digitalWrite(n1, HIGH);
delay(del);
digitalWrite(p2, LOW);
delay(del);
digitalWrite(n2, HIGH);
delay(del);
digitalWrite(n1, LOW);
delay(del);
digitalWrite(p1, HIGH);
delay(del);
digitalWrite(n2, LOW);
delay(del);

}

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Денис, пробовал.

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Это дополнительный прибор в автомобиль. Буду пробовать Ваш скетч. Отпишусь о результате. 

denis707
Offline
Зарегистрирован: 09.09.2013

есть результат? (очень интерестно)

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Результат есть. Показометр работает. 

Спасибо за код. 

А как сделать, так что бы прибор отображал показания согласно датчику температуры. 

gena
Offline
Зарегистрирован: 04.11.2012

  Более детальную проработку работы мотора осуществляю по наличию свободного времени и это будет не быстро. Собственно я это делаю, чтобы в дальнейшем использовать мотор для разных "показометров". Такие моторы применяются в приборной панели авто ВАЗ 2110. Когда будет что показать, отпишусь.

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Все работает. Теперь стоит следующая задача. 

gena
Offline
Зарегистрирован: 04.11.2012

"Все работает. Теперь стоит следующая задача. " - а кому этот ответ?

 

MadAirMan
Offline
Зарегистрирован: 24.12.2012

По микросхеме

фирма Philips 

Самый верхний номер 04813017АА

Номер ниже С0021

Последний  Fnr0021  A

 

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Это для Дениса. Но если задуматься то для всех )))))

gena
Offline
Зарегистрирован: 04.11.2012

 Думаю что это плата имеет аналоговый вход и с помощью имеющихся там микросхем управляет индикатором. Что бы это проверить нужно нарисовать схему, а затем уж её можно будет продумать.

denis707
Offline
Зарегистрирован: 09.09.2013

а датчик температуры какой?

если цифровой то он уже сам выдает температуру нужно только написать

(программой к сожалению не помогу) (((

но

от 30 до 50 при температуре от 30 до 50 шим 1 на максимуме и 3 возрастает 2 и 4 к земле

от 50 до 70 при температуре от 50 до 70 шим 1 уменьшаем 3 на максимуме 2 и 4 к земле

от 70 до 90 при температуре от 70 до 90 1 и 4 к земле 3 на максимум 2 возрастает 

и т.д.

предел темтературы в диаппазон шим по нужным пинам

denis707
Offline
Зарегистрирован: 09.09.2013

данные по микросхеме искал

это все что нашел (((

04813017AA      We Specialize in IC semiconductor

 

gena
Offline
Зарегистрирован: 04.11.2012

  Да, попахивает какой то специфической микросхемой.

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Вы имеете в виду нарисовать распиновку? Или нарисовать всю схему. 

Максимум, что мне удалось это найти:

Контакты:

1. Питание

2. Земля

3. Кнопка установки критической температуры "warning"

4.  Не определен, но заходит в микросхему

5. Лампа "memory" для записи warning

6. Лампа "warning"

7. Кнопка "memory"

8. Не определен вообще

9. Не определен вообще

10. Не определен вообще

11. Подсветка прибора +12 вольт

12. Подсветка прибора -12 вольт

 

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Оригинальный датчик двух проводной. Думаю главное, что бы он работал в данном диапазоне температур, что на циферблате прибора. 

По микросхеме я вообще ничего близкого к ней не находил

denis707
Offline
Зарегистрирован: 09.09.2013

http://www.youtube.com/watch?v=YXFGt8Gyza0

посмотрите это видео там правда с резистора, но думаю поможет написать перевод

через if для 3 сегментов показометра

denis707
Offline
Зарегистрирован: 09.09.2013

сейчас к сожалению нужно бежать, но если у вас не получится, завтра попробую написать )))

denis707
Offline
Зарегистрирован: 09.09.2013

данные которые принимаете от 30 до 70 градусов разбейте на шим

но лучше данные в температуру а температуру в шим, так можно потом сравнивать и коректировать(IMHO)

gena
Offline
Зарегистрирован: 04.11.2012

  Судя по возможному функционалу это уже тянет на микроконтроллер. Не пытались запитать? Полярность можно взять по электролитическому конденсатору - при условии что он подсоединяется к микросхеме. Возможно на плате есть стабилизатор 12 В --> 5 В . Нужно внимательно рассмотреть схему.

denis707
Offline
Зарегистрирован: 09.09.2013

Есть успехи???

denis707
Offline
Зарегистрирован: 09.09.2013

може кто подскажет какой формулой подкоректировать чтоб точка направления шла по дуге ?

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Успехов пока ни каких. Только сейчас сяду за код. 

По Вашей формуле пока подсказать не смогу. Голова другим забита. Думаю надо делать пропорцию.  Ток должен уменьшаться на первой катушке и увеличиваться на второй согласно изменению плавающей величины. Впринцепи тоже самое ждет и меня. С написанием скетчей у меня туговато. Сделайте условие. Если N больше X то ....

gena
Offline
Зарегистрирован: 04.11.2012

   Присмотритесь к графику "Function Generator Output Voltage vs. Degrees of Deflection " (стр.3) описания микросхемы CS8190. Думаю Вам надо генеривовать именно такие кривые напряжения на обмотках.

denis707
Offline
Зарегистрирован: 09.09.2013

похоже нужно через прямоугольный треугольник

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Это все хорошо но как быть с промежуточными значениями 31,32,33 и т.д.

Пробовал воспользоваться библиотекой Servo. Результат есть только. Но слабый.

Нужен даташит на сенсор. А у меня сенсор без маркировки. 

Как Ваши результаты с шаговым двигателем?

denis707
Offline
Зарегистрирован: 09.09.2013

не пинайте сильно, то что придумал извоял для вашего показометра







int temp30 = 30;    //      точки для
int temp70 = 70;    //      установки
int temp110 = 110;  //      значений порогов 
int temp150 = 150;  //      по измерениям

int temp = 0;         

int intTemp=A0;     //      вход аналового датчика

                    //     выходы на показометр
int pin1 = 3;       //     + катушки на 30 град. 
int pin2 = 5;       //     - катушки на 30 град. 
int pin3 = 9;       //     + катушки на 70 град.  
int pin4 = 11;      //     - катушки на 70 град. 

int chustvitelnost = 20;   // гипотенуза прямоугольного треугольника

void setup()
{
 pinMode(pin1,OUTPUT);
 pinMode(pin2,OUTPUT);
 pinMode(pin3,OUTPUT);
 pinMode(pin4,OUTPUT);
}

void loop()
{
int temp = analogRead(intTemp);  // A0 для входа аналового датчика

// остальное обработка по температуре
  if (temp<=temp30) 
    {
     digitalWrite(pin1,HIGH);
     digitalWrite(pin2,LOW);
     digitalWrite(pin3,LOW);
     digitalWrite(pin4,LOW); 
    }
  if (temp>temp30 && temp<temp70)  
    {
     int ugol = map(temp,temp30,temp70, 0,90);
     digitalWrite(pin1,chustvitelnost*cos(ugol));
     digitalWrite(pin2,LOW);
     digitalWrite(pin3,chustvitelnost*sin(ugol));
     digitalWrite(pin4,LOW); 
     Serial.println(ugol);
    }
  if (temp==temp70)  
    {
     digitalWrite(pin1,LOW);
     digitalWrite(pin2,LOW);
     digitalWrite(pin3,HIGH);
     digitalWrite(pin4,LOW); 
    }
  if (temp>temp70 && temp<temp110)  
    {
     int ugol = map(temp,temp70,temp110, 0,90);
     digitalWrite(pin1,LOW);
     digitalWrite(pin2,chustvitelnost*sin(ugol));
     digitalWrite(pin3,chustvitelnost*cos(ugol));
     digitalWrite(pin4,LOW); 
     Serial.println(ugol);
    }
  if (temp==temp110)  
    {
     digitalWrite(pin1,LOW);
     digitalWrite(pin2,HIGH);
     digitalWrite(pin3,LOW);
     digitalWrite(pin4,LOW); 
    }
   if (temp>temp110 && temp<temp150)  
    {
     int ugol = map(temp,temp110,temp150, 0,90);
     digitalWrite(pin1,LOW);
     digitalWrite(pin2,chustvitelnost*cos(ugol));
     digitalWrite(pin3,LOW);
     digitalWrite(pin4,chustvitelnost*sin(ugol)); 
     Serial.println(ugol);
    }
  if (temp>=temp150)  
    {
     digitalWrite(pin1,LOW);
     digitalWrite(pin2,LOW);
     digitalWrite(pin3,LOW);
     digitalWrite(pin4,HIGH);
    }   
}

проверить особо не на чем, но по светодиодам вроде работает.

MadAirMan
Offline
Зарегистрирован: 24.12.2012

Денис и Генадий спасибо Вам за идею и подсказку

Код написал свой.  Выложу чуть позже.  Теперь стоит задача переключения между двумя катушками. Потому что показания идут до 70 градусов, а дальше должна включаться вторая. Думаю попробовать осуществить всю идею через прерывания. Только вот не знаю как написать код т.к. тактовую кнопку использовать не разумно. Попробую написать через условия if ... else. 

Как думаете будет работать?

denis707
Offline
Зарегистрирован: 09.09.2013

в моем коде, вроде как сразу две катушки работают.

MadAirMan
Offline
Зарегистрирован: 24.12.2012

К сожалению Ваш код не работает. Я не понять почему.

Посмотрите пожайлуйста мой код.

Проблема в том, что после 70 градусов цельсия не просходит изменения катушек. 

Нужно ли добавлять такловую кнопку

int redPIN = 10; // зона полсе 70 градусов
int greenPIN = 7; // зона до 70 градусов
int nullPIN;
volatile int selectedPIN = greenPIN;
int sensPIN = 0; // подключение сенсора


void setup()
{
  pinMode (redPIN, OUTPUT);
  pinMode (greenPIN, OUTPUT);
  attachInterrupt(sensPIN, swap, RISING);
  Serial.begin(9600);
}

void swap()
{
  if (sensPIN >= 100) // подключение катушки до 70 градусов
    {
    selectedPIN = redPIN;
    }
  else
    {
      greenPIN = 0;
    }
}

void loop()
{
  //Read Distance Sensor
  int sens = analogRead(sensPIN); 
  int temp = map(sens, 0, 1024, 0, 255);
  //Control LED Brightness
  analogWrite(selectedPIN, temp); // установка температуры на выбраной катушке
  Serial.println(sens);
}

 

denis707
Offline
Зарегистрирован: 09.09.2013

не совсем могу понять ваш код

попробуйте описать что должно происходить.

и зачем мапили всю шкалу?

я думаю мой скетч не работает из-за не соответствий значений.

скиньте пожалуйста показания вашего датчика(точнее показания при 30, 70, 110, 150 градусах )и я подправлю свой скетч

и напишите контакты по цветам на 30 и 70 градусов с полярностью по цветам.

и скажите какой датчик используете?

и вот эта чать точно так должна быть

 

if (sensPIN >= 100) // подключение катушки до 70 градусов
 {
 selectedPIN = redPIN;
 }
 else
 {
 greenPIN = 0;
 }

или

if (sensPIN >= 100) // подключение катушки до 70 градусов
 {
 selectedPIN = redPIN;
 }
 else
 {
 selectedPIN = greenPIN;
 }

и что показывает сериал (проходит через отметку 100?)