Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Термометр на Arduino Nano | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 2
На страницу: 1, 2  След. | Все страницы
Поиск в этой теме:
Железный канал: «Термометр на Arduino Nano»
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Модераторам: мне трудно определить, для какой ветки форума данная тема больше подходит, для КТ или ЖК. Скажу так - был творческий процесс поиска, настройки и программирования. Поэтому если этой теме место в КТ - перенесите пожалуйста Улыбка


Видео работы сборки, кликабельно, Яндекс.Диск (нужен FlashPlayer либо открывайте в GoogleChrome):


Предыстория

 Cкрытый текст   (кликните здесь для просмотра)
Задача измерения температуры у меня появилась в следствии необходимости включать/выключать газовый котел, для регулирования комнатной температуры в холодное время года.
Так же мне было необходимо "промерить" помещения дома для выявления холодных мест, поэтому датчик у меня выносной на длинном проводе. Сопротивление провода низкое, порядка 4 Ом, по сравнению с номиналом 1000 Ом датчика - вообще ни о чем.

Датчик температуры KTY81/110, не смотря на многочисленные статьи и примеры в интернете.
Данные датчики почти в два раза дешевле датчиков типа LM32 и аналогов с тремя выводами.
Даже с учетом того, что к каждому KTY81/110 потребуется свой резистор на 1 кОм, 2 руб. шт.- а их все равно покупать по 20 штук в пачке, то при покупке данных датчиков больше одного - выгодно брать именно такие. И чем больше тем лучше Гы-гы
В данном примере я не стал использовать светодиодную матрицу и сдвиговый регистр, т.к. регистр для поверхтностного монтажа в макетку не вставляется. Можно в принципе готовый модуль приобрести с матрицей и управлением по одному проводу, но это уже другая тема.

Комплектация:

 Cкрытый текст   (кликните здесь для просмотра)
- Датчик температуры KTY81/110.112 (необходим пересчет сопротивления в градусы) цена около 50 рублей за шт.
- Светодиоды зеленый 4 шт и красный 2шт, это все примерно по 5 руб.
- Провода с коннекторами "папа-папа" - 1 шлейф из 30 шт, понадобится от силы 10 шт., брал у местного торговца, дешевле чем в интернете.
- Макетная плата, длинная, 10 групп питания по одной стороне
- Сопротивления:
1 кОм - 1шт.
220 Ом - 6шт.
- Старая флешка, либо USB-разъем "папа" с куском провода.
- Нейлоновые хомуты - 2-3 шт.
- UDP-кабель, 3-4 метра
- PINs от любой старой материнки, штыревые разъемы, такие же как на самой Ардуине, пары штук хватит.
- Arduino Nano (любого исполнения)
- Power Bank 5v (например, такой ссылка, желательно с хорошей стабилизацией под нагрузкой, у меня не идеальный, какой валялся в столе)

Делаем термометр

Схема в скетч-программе fritizing:
 Cкрытый текст   (кликните здесь для просмотра)


Схема в программе-симуляторе Proteus 8.6 SP2 Pro:
 Cкрытый текст   (кликните здесь для просмотра)



Начнем с питания: берется power bank, вставляется в него провод usb в разъем OUT, проводки питания с этого провода подключаем к макетной плате. Сразу проверяем полярность и уровень напряжения мультиметром, иначе можно выпустить дым из Ардуины!

Замечание: :
желательно использовать powerbank с идеальным напряжением под нагрузкой 5v, иначе встроенный АЦП Ардуино будет некорректно измерять показания, погрешность может быть до 3 и более градусов. В моем случае - 5.11 вольт не на столько критично.


Я не нашел у себя ненужного usb-кабеля, да и хотелось покомпактнее сделать, поэтому взял старую, неработающую флешку, сделал пропил по дорожкам с двух сторон возле порта USB и припаял два провода, на плюс и минус порта, со стороны платы.
Далее, вставляем Ардуину в макетку, светодиоды, резисторы, датчик и провода. Именно в такой последовательности, иначе потом не подлезть из-за АКБ.
Крепим АКБ хомутами, если датчик температуры будет выносной, а желательно сделать его выносным - то предварительно продеть провод под хомутом крепления АКБ, чтобы контакты не шатались и не вылетали из макетной платы.
Касательно UDP кабеля: контакты паять обязательно. Необходимо к проводам припаять по одному штырьковому коннектору, причем НЕ желательно припаивать китайские провода с разъемами "папа-папа" т.к. они плохо держатся в китайской макетке.

Дальше, заливаем скетч: (Внимание - "простыня"!)
 Cкрытый текст   (кликните здесь для просмотра)
Код:

const int main_temp = 14;// аналоговый вход для датчика температуры возле устройства (выносной датчик)

const int low_temp = 4, t1 = 8, t2 = 9, t3 = 10, t4 = 11, high_temp = 12;

float MCU_data = 0;// значение от 0 до 1023 аналогово-цифрового преобразователя Ардуино.

int x, y;

bool flag = false; // флаг, чтобы не ждать 2 минуты перед началом измерений - изменить на true

unsigned long previousMillis = 0; // время последнего срабатывания
const long interval = 120000; // интервал срабатывания кода, задержка 2 минуты со старта контроллера


void setup()
{
  pinMode(low_temp, OUTPUT);
  pinMode(high_temp, OUTPUT);
  pinMode(t1, OUTPUT);
  pinMode(t2, OUTPUT);
  pinMode(t3, OUTPUT);
  pinMode(t4, OUTPUT); 
  pinMode (main_temp, INPUT);

  Serial.begin(9600);
}

int print_ext(char *str, int arg) // Обертка для стандартного вывода
{
  //Функция отсутствует в оригинале
  Serial.print(str);
  Serial.print(arg);
  Serial.println("");
}



int read_main_temp()
{
  float temp=0;
  MCU_data = analogRead(main_temp);
  temp = read_temp(MCU_data);
  return temp;
}

int read_temp(int temp)
{
  int get_sig = temp;// данные графика по Х - значение MCU/АЦП
  double sig = 0;

  //АЦП  500 - 25 градусов
  //АЦП  403  - 36 градусов
 
  int K = 2;// 2 - поправка для АКБ 5.11 вольт, 1000мАч, 1 - для USB 4.85 вольт
 
  sig =  -0.4918*get_sig+272.38+K;// формула для powerbank (CANYON АКБ 5вольт 1000мАч) и схожих по питанию

 
  if(get_sig>=1023)// данное условие сработает только в том случае если и датчик и сопротивление 1кОм не будут подключены
  {
      print_ext((char *)"[NOT connected] temp:", sig);
      print_ext((char *)"[NOT connected] MCU temp value:", get_sig);
  }
  else
  {

    print_ext((char *)"-------------MCU value:", get_sig);
   
    if(sig >30)
    {
      print_ext((char *)"Warning temp:", sig);
     
    }
    else
    {
      print_ext((char *)"Normal Temp:", sig);
     
    }
  }
 
  return sig;
}


void show_temp_line(float temp)// отображение разрядов числа
{
  if(MCU_data>500) //
  {
    digitalWrite(high_temp, HIGH);
    digitalWrite(t4, HIGH);
    digitalWrite(t3, HIGH);
    digitalWrite(t2, HIGH);
    digitalWrite(t1, HIGH);
    digitalWrite(low_temp, LOW);
  }
 
  if(MCU_data>400 && MCU_data<=500)
  {
    digitalWrite(high_temp, LOW);
    digitalWrite(t4, HIGH);
    digitalWrite(t3, HIGH);
    digitalWrite(t2, HIGH);
    digitalWrite(t1, HIGH);
    digitalWrite(low_temp, LOW);
  }
 
  if(MCU_data>300 && MCU_data<=400)
  {
    digitalWrite(high_temp, LOW);
    digitalWrite(t4, LOW);
    digitalWrite(t3, HIGH);
    digitalWrite(t2, HIGH);
    digitalWrite(t1, HIGH);
    digitalWrite(low_temp, LOW);
  }

  if(MCU_data>200 && MCU_data<=300)
  {
    digitalWrite(high_temp, LOW);
    digitalWrite(t4, LOW);
    digitalWrite(t3, LOW);
    digitalWrite(t2, HIGH);
    digitalWrite(t1, HIGH);
    digitalWrite(low_temp, LOW);
  }

  if(MCU_data>100 && MCU_data<=200)
  {
    digitalWrite(high_temp, LOW);
    digitalWrite(t4, LOW);
    digitalWrite(t3, LOW);
    digitalWrite(t2, LOW);
    digitalWrite(t1, HIGH);
    digitalWrite(low_temp, LOW);
  }

  if(MCU_data<100)//if(temp>upper_temp_limit)
  {
    digitalWrite(high_temp, LOW);
    digitalWrite(t4, LOW);
    digitalWrite(t3, LOW);
    digitalWrite(t2, LOW);
    digitalWrite(t1, LOW);
    digitalWrite(low_temp, HIGH);
  }
 
  print_ext((char *)"MCU_data:", MCU_data);
 
}

void number_to_blink(int number, int diod_1, int diod_2, int diod_3)// моргает выбранными диодами N раз для каждого разряда
{

  int num_1, num_2, num_3;
  int minus = 0;
  int i = 0;
 
  if(number<0)
  {
    minus = 1;
    number = number*(-1);
  }
 
  if(number>=100)
  {
    // отрицательные значения меньше 99 не выводятся
    num_1 = number/100;
    num_2 = number/10 -  num_1*10;
    num_3 = number - (num_1*100 + num_2*10);
  }
  else
  {
    if(number>=10)
    {
      if(minus==0)
      {
        num_1 = number/10;
        num_2 = number -  num_1*10;
        num_3 = 0;// не участвует
      }
      else
      {
        num_1 = 0;// не участвует
        num_2 = number/10;
        num_3 = number -  num_2*10;
      }
    } 
    if(number<10)
    {
      if(minus==0)
      {
        num_1 = 0;// не участвует
        num_2 = 0;//не участвует
        num_3 = number;//
      }
      else
      {
        num_1 = 0;// не участвует
        num_2 = 0;// не участвует
        num_3 = number;//   
      }
    }
  }
 
  if(minus==1)
  {
    digitalWrite(high_temp, HIGH);
  }
  else
  {
    digitalWrite(high_temp, LOW);
  }
 
  for(i=0; i<num_1; i+=1)
  {
    digitalWrite(diod_1, HIGH);
    delay(200);
    digitalWrite(diod_1, LOW);
    delay(200);
  }
  delay(400);
   
  for(i=0; i<num_2; i+=1)
  {
    digitalWrite(diod_2, HIGH);
    delay(200);
    digitalWrite(diod_2, LOW);
    delay(200);
  }
  delay(400);

  for(i=0; i<num_3; i+=1)
  {
    digitalWrite(diod_3, HIGH);
    delay(200);
    digitalWrite(diod_3, LOW);
    delay(200);
  }
 
  delay(1000);
}


void loop()


  unsigned long currentMillis = millis();
  // проверяем сколько прошло врмени
 
  if (currentMillis - previousMillis >= interval)
  {
    // если прошло нужное количество миллисекунд,
    // то записываем в переменную количество прошедшего времени
    previousMillis = currentMillis;
 
    // меняем положение флага,
    // это может быть вкл и выкл светодиода, например
    flag = true;
  }
 
  float main_temp_value=0;

  if(flag==true)// если прошло 2 минуты - измерять температуру
  {
      main_temp_value = read_main_temp();// чтение температуры с главного датчика температуры

      digitalWrite(low_temp, HIGH);// обозначаем начало цикла отображения данных
      delay(400);
      digitalWrite(low_temp, LOW);
      delay(200);
       
      Serial.println("MCU_data: " + String(MCU_data)+ "   \t temp=" + String(main_temp_value));
      number_to_blink(MCU_data, t1, t2, t3);// выводить значения разрядов температуры на второй, третий и четвертый светодиод слева
     
      delay(500);
 
      number_to_blink(main_temp_value, t1, t2, t3);
   
      delay(1500);

  }
  else
  {
     unsigned long delta = 0;
     delta = currentMillis - previousMillis;// вычисляем разницу в миллисекундах между началом отсчета и текущим временем
     
      if((delta*100)/interval >=0)
      {
        digitalWrite(low_temp, HIGH);
      }

      if((delta*100)/interval >=16)
      {
        digitalWrite(t1, HIGH);
      }
     
      if((delta*100)/interval >=33)
      {
        digitalWrite(t2, HIGH);
      }

      if((delta*100)/interval >=50)
      {
        digitalWrite(t3, HIGH);
      }

      if((delta*100)/interval >=67)
      {
        digitalWrite(t4, HIGH);
      }

      if((delta*100)/interval >=83)
      {
        digitalWrite(high_temp, HIGH);
      }
      delay(100);
      digitalWrite(low_temp, LOW);
      digitalWrite(t1, LOW);
      digitalWrite(t2, LOW);
      digitalWrite(t3, LOW);
      digitalWrite(t4, LOW);
      digitalWrite(high_temp, LOW);
      delay(100);
  }
 

}


По порядку, что в скетче.

1. Программа ждет 2 минуты, либо выставленное вами значение в миллисекундах, перед тем как начнет измерять температуру.
При этом 6 светодиодов выполняют роль отображения прошедшего времени в процентах.
Хитрецы производители датчиков KTY81/110 в даташите указали время измерения в газообразной среде - 30 секунд, но фишка в том, что через 30 секунд достигнет 63,7% от реальной температуры, поэтому нужно ждать не меньше 50 секунд.
Две минуты нужно чтобы воздух вокруг измеряемого пространства начал циркулировать так, как он это делал до появления человека с термометром. Для стационарного датчика - интервал ожидания можно уменьшить до 40-50 секунд.

2. Далее, программа начнет отображать по очереди сначала три цифры данных АЦП, затем после небольшой паузы - непосредственно температуру.

 Cкрытый текст   (кликните здесь для просмотра)
Например, первый светодиод моргнул пять раз - значит число начинается с "5". Второй светодиод НЕ моргнул - значит далее идет цифра "0". Третий моргнул один раз - значит цифра "1". Итого число "501".
Для данного подключения числа дискретизации значений сопротивления с АЦП должны быть в пределах 480-600.
Для температуры тот же самый принцип. Отрицательные температуры обозначаются свечением крайнего правого, красного светодиода.
Замечание: :
если нет контакта с датчиком температуры, то программа покажет 25-26 градусов, в соответствии с номиналом притягивающего к земле сопротивления 1 кОм для этого датчика.


3. Загорается крайний левый, красный светодиод и цикл измерения повторяется.

А как же точность, Карл?
Формула, с коррекцией в скетче проверена на спиртовом термометре и на цифровом градуснике для измерения температуры тела Omron. Верхний диапазон температуры проверялся температурой тела, 36 целых градусов есть. Нижний диапазон - по уличной температуре -5°C на момент написания кода.
Точность измерения итогового прибора +-1 градус.

Proteus
Для любителей симуляторов: похоже, что SPICE-модель Ардуино-нано в Proteus работает не корректно при измерении входящего сигнала, используя команду analogRead. Значения АЦП по какой-то причине гуляют в пределах 80-100 ед. вместо 460-600 с той же самой прошивкой.

ЗЫ Чуть позже можно доработать код, чтобы светодиоды отображали температуру в заданных пределах, от 20 до 26, собственно для чего и затевалось.
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (08:06 24-12-2018), всего редактировалось 2 раз(а)
    Добавлено: 06:05 23-12-2018   
бухой джедай
 181 EGP


Рейтинг канала: 4(87)
Репутация: 70
Сообщения: 7906 Предупреждений: 1
Откуда: Одесса:)
Зарегистрирован: 08.09.2007
а что свитч-кейс эта хреновина не понимает ? (да да да знаю что оно может быть вырвиглазно и не интуитивно в данном случае,но это проф деформация ничего не поделаю вижу стену ифов думаю можно ли заменить на свитч-кейс) .
_________________
Так Добрый вечер...Превед с большого Бодуна...
Магистр Непросыхаемость...
Злобный Рецедивист...
    Добавлено: 16:23 23-12-2018   
AnrDaemon
 856 EGP


Модератор
Рейтинг канала: 8(784)
Репутация: 37
Сообщения: 12292

Зарегистрирован: 17.10.2004
Поправка - стену ОДНОТИПНЫХ ифов - да, можно и даже нужно заменить на свитч-кейс.
Либо вообще избавиться, заменив на формулу.
_________________
Люблю свободный полёт... :)
    Добавлено: 19:27 23-12-2018   
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
бухой джедай :
стену ифов думаю можно ли заменить на свитч-кейс

Да, ардуино и ее приблуда Genuino понимает switch/case.
Поправка от меня: в данном случае не ставилась цель сделать компактно, скорее акцент был на понятности того, что написано. Функционал от этого не страдает.

В принципе, запись можно сделать еще короче. Написать функцию из нескольких строк, которая будет выводить на светодиоды нужные уровни. В качестве аргумента - ссылка на массив байт, т.о. можно ограничиться записью, что-то типа
Код:

switch (MCU_data)
{
   case 0 ... 100: { some_function(some_array[0]); }
   case 101 ... 200: { some_function(some_array[1]); }
   case 201 ... 300: { some_function(some_array[2]); }
   case 301 ... 400: { some_function(some_array[3]); }
   case 401 ... 500: { some_function(some_array[4]); }
   case 501 ... 1023: { some_function(some_array[5]); }
   default: { break; }
}



На вкус и цвет, так сказать.
Я эту часть кода, которая отсылает байты выкинул из этой версии, т.к. здесь нет сдвигового регистра, приедут светодиодные индикаторы, все проверю, протестирую, тогда будет уже другой код Улыбка



добавлено спустя 1 минуту:
И да, чтобы управлять светодиодной матрицей с общим катодом - нужны свои транзисторы NPN структуры, которых у меня нет.
Поэтому, было решено взять несколько регистров и на каждый регистр отсылать нужный символ. Следить за мерцанием не очень хочется Улыбка
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (20:39 23-12-2018), всего редактировалось 3 раз(а)
    Добавлено: 20:38 23-12-2018   
_RAZAAR_
 62 EGP


Рейтинг канала: 2(11)
Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :

Proteus
Для любителей симуляторов: похоже, что SPICE-модель Ардуино-нано в Proteus работает не корректно при измерении входящего сигнала, используя команду analogRead. Значения АЦП по какой-то причине гуляют в пределах 80-100 ед. вместо 460-600 с той же самой прошивкой.
.

тут както несовсем внятно ,как это гуляют в пределах 80-100? 20 единиц разница
в симуляторе?
,и 460-600? 240 единиц разница на реальном устройстве?
эти гуляния при каих условиях измерения, когда к входу ацп ничего неподключено или чтото поключено?
реальные входы ацп обычно фильтруют для уменьшения влияния эм наводок на отцифровываемый сигнал.

если есть подозрения в работе какихто там ардурино моделей в протеусе, можно взять модель голого контроллера атмега328п затем взять удобный хекс любого удобного бутлоадера хоть бы отсюда https://github.com/arduino/ArduinoCore-avr/tree/master/bootloaders укзать этот хекс в протеусе вкачестве кода пользователя запустить симуляцию незабыв подключить почти все элементы( некоторые) присутствующие на твоей версии платки ардурино и компим модуль речез который будеш шить свою правельную виртуальную ардуину и убеждаться что онаработает такжекак и упомянутая спайс модель Улыбка
_________________
Quaere Vērum
------------------------

Последний раз редактировалось: _RAZAAR_ (21:55 27-12-2018), всего редактировалось 1 раз
    Добавлено: 22:39 25-12-2018   
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :
можно взять модель голого контроллера атмега328п

Да, я уже думал над этим вариантом, из библиотеки достал данный МК, но не тут-то было:
https://www.arduino.cc/en/uploads/Main/Arduino_Nano-Rev3.2-SCH.pdf
Рядом с кварцем есть обозначение, которое мне не понятно, от двух полосочек отходит провод в землю. Это что?

добавлено спустя 6 минут:
У меня Ардуино v3.0 с микросхемой CH340G.
В документации Ардуино с FT232RL. Можно конечно выкинуть интерфейс обмена данными по USB, он для виртуализации не нужен, но вопрос по кварцу остался.

добавлено спустя 2 минуты:
_RAZAAR_ :
тут както несовсем внятно ,как это гуляют в пределах 80-100?

"Гуляют" в зависимости от величины сопротивления "терморезистора". Это нормально, но значения отличаются на порядок, то есть не соответствует виртуальная картина реальной.

добавлено спустя 11 минут:
Автор, индус, общаться на тему неправильной работы АЦП в его интерпретации контроллера - не хочет, комментарий удалил со своей страницы Расстроен
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (02:44 26-12-2018), всего редактировалось 3 раз(а)
    Добавлено: 02:44 26-12-2018   
_RAZAAR_
 62 EGP


Рейтинг канала: 2(11)
Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :
_RAZAAR_ :
можно взять модель голого контроллера атмега328п

Да, я уже думал над этим вариантом, из библиотеки достал данный МК, но не тут-то было:
https://www.arduino.cc/en/uploads/Main/Arduino_Nano-Rev3.2-SCH.pdf
Рядом с кварцем есть обозначение, которое мне не понятно, от двух полосочек отходит провод в землю. Это что?



что за от двух полосочек?
2 конденсатора определённой емкости обычно 22 пико фарад на землю, вместе с кварцевым резонатором внешние элементы внешнего тактового генератора микроконтроллера
По кварцу вопроса тоже нет, там-же где выставляешь хекс бутлоадера там выставляеш тактовую частоту и вопрос с резонатором не указываемым в схеме вообше закрыт.
Так же как и почти со всеми остальными элементами указанной схемы,
из нужного надо оставить кнопку ресет , возможно конденсатор для пина источника опорного напряжения AREF (отдельная тема зачем, возможно связанная с "Гуляют" и "Несоответствуют", в 98% случаев всё всему соответствует если правельно симулировать симулируемое), и также оставить все пины по питанию (3,4,5,6,18,21)
никаких rs232 to USB чипов разумеется тоже ненужно, нужен компим протеус модуль для связи виртуального ардурино с реальным IDE и также чтолибо создающее виртуальную пару компортов через которую эта связь и будет происходить ( например как в этом описании но не суть важно что именно так http://cxem.net/comp/comp119.php)
БулерМэн :

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

это не совсем нормально если чтолибо отличается на порядок, но вполне возможно, так как симуляторы обычно воспроизводят идеальные условия и естествено незнают где и что в реальном устройстве забыли проэкранировать или отфильтровать. возможно автор индус нежелает общаться именно на эту тему.
_________________
Quaere Vērum
------------------------

Последний раз редактировалось: _RAZAAR_ (21:45 26-12-2018), всего редактировалось 2 раз(а)
    Добавлено: 21:42 26-12-2018   
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :

что за от двух полосочек?



То есть на данной картинке это конденсаторы с номиналом 22 пФ?
А чего тогда их не подписали, или это очевидно?
_________________
Дулички и фигушки
    Добавлено: 22:22 26-12-2018   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
Похоже на то. Вот пример аналогичного подключения http://www.s-led.ru/322-shema-indikatora-mikrokontrollera.html
_________________
Конец света в конце тоннеля
    Добавлено: 04:32 27-12-2018   
_RAZAAR_
 62 EGP


Рейтинг канала: 2(11)
Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :
_RAZAAR_ :

что за от двух полосочек?



То есть на данной картинке это конденсаторы с номиналом 22 пФ?
А чего тогда их не подписали, или это очевидно?


На данной картинке это конденсаторы с определённым номиналом,
какой именно номинал должен быть, обычно заявляет производитель конкретного резонатора.
поскольку тип и производитель резонатора не указан (указана только его частота), то и номиналы конденсаторов указывать смысла нет.
часто используемый номинал этих конденсаторов от 12 до 33пф, пара, зависит этот номинал также от резонансной частоты в том числе и условий помехозащищенности устройства. служат эти конденсаторы для обеспечения оптимальных режимов работы тактового генератора к которому они подключены, примерно как то так.
Также бывают резонаторы с уже имеющимися встроенными конденсаторами (трёхногие) и тогда их обозначают так как показанно на схеме с отсутствующими номиналами.
_________________
Quaere Vērum
------------------------

Последний раз редактировалось: _RAZAAR_ (22:00 27-12-2018), всего редактировалось 1 раз
    Добавлено: 21:48 27-12-2018   
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :
с уже имеющимися встроенными конденсаторами (трёхногие)

У меня запас определенно не трехногих. Ок посмотрим у производителя.

Засел сегодня возле почты со снайперкой с уведомлением о посылке с деталями, но так никто и не пришел Расстроен
В итоге, звоню начальнику этой богодельни, выясняется что почта нынче работает 31 числа, так что все впереди, главное не проспать Гы-гы

ЗЫ Делаю в данный момент разводку для светодиодного индикатора на 74HC595, судя по данным из инета, нарытым с трудом, регистр может пропускать через выводы до 35 мА. Это говорит о том, что придется все равно использовать динамическую индикацию, по очереди зажигая сегменты одного индикатора.
 Cкрытый текст   (кликните здесь для просмотра)


добавлено спустя 1 минуту:
ARES какую-то кашу из проводников рисует, по шесть переходов со стороны на сторону, и то при настройке, приходится ручками...

добавлено спустя 1 минуту:
Геморр еще в том был, что корпуса SOT109-1 в протеусе нет, пришлось рисовать.

добавлено спустя 3 минуты:
Было бы вообще не плохо, если бы можно было заставить программу трассировку делать только для одного элемента, а не всю плату целиком, но подозреваю, что это можно не в данной САПР.
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (04:57 30-12-2018), всего редактировалось 4 раз(а)
    Добавлено: 04:49 30-12-2018   
_RAZAAR_
 62 EGP


Рейтинг канала: 2(11)
Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :
_RAZAAR_ :
с уже имеющимися встроенными конденсаторами (трёхногие)

У меня запас определенно не трехногих. Ок посмотрим у производителя.


Зачем тебе запас?
на плате ардурины же всё есть и резонатор и обвязка какая надо.

речь же была про то что в протеусе голый контроллер поставить, а не модель ардурины какая
БулерМэн :
"SPICE-модель Ардуино-нано в Proteus работает не корректно"
и убедиться что она не глючная никакая.
на аналоговый вход свой - конденсатор на землю повесь какойнить (1нФ-1мкф) чтоб наводки с датчика температуры прибить немного всё ближе будет к тому что протеус у тебя мерит и где там у тебя на порядок разница получается.

 Cкрытый текст   (кликните здесь для просмотра)
БулерМэн :

Засел сегодня возле почты со снайперкой с уведомлением о посылке с деталями, но так никто и не пришел Расстроен
В итоге, звоню начальнику этой богодельни, выясняется что почта нынче работает 31 числа, так что все впереди, главное не проспать Гы-гы

ЗЫ Делаю в данный момент разводку для светодиодного индикатора на 74HC595, судя по данным из инета, нарытым с трудом, регистр может пропускать через выводы до 35 мА. Это говорит о том, что придется все равно использовать динамическую индикацию, по очереди зажигая сегменты одного индикатора.
 Cкрытый текст   (кликните здесь для просмотра)


добавлено спустя 1 минуту:
ARES какую-то кашу из проводников рисует, по шесть переходов со стороны на сторону, и то при настройке, приходится ручками...

добавлено спустя 1 минуту:
Геморр еще в том был, что корпуса SOT109-1 в протеусе нет, пришлось рисовать.

добавлено спустя 3 минуты:
Было бы вообще не плохо, если бы можно было заставить программу трассировку делать только для одного элемента, а не всю плату целиком, но подозреваю, что это можно не в данной САПР.


не пойму на какого шута тебе плату рисовать на данный момент и морочиться с индикатором и его обвязкой
выводи температуру на ком порт (чем не дисплей тебе), и отлаживай что конечное ты там хочешь получить в результате, потом когда всё заработает так как тебе надо и плату разведёшь и индикаторы какие надо подключишь, так и зима закончиться может пока это хозяйство соберёшь
_________________
Quaere Vērum
------------------------

Последний раз редактировалось: _RAZAAR_ (19:46 30-12-2018), всего редактировалось 6 раз(а)
    Добавлено: 17:22 30-12-2018   
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :
Зачем тебе запас?

Радио-ошейники для котов делать Гы-гы
Мне было бы гораздо интереснее разводить сам МК, но для этого нужны знания, которыми вы делитесь и решенный вопрос с самостоятельным изготовлением дорожек такой толщины как выводы у МК ATmel.
Да, фирмы делают и не такое, но интереснее самому Улыбка

_RAZAAR_ :
так и зима закончиться может пока это хозяйство соберёшь

Что-то совсем пессимистично Подозрение. Улыбка У меня уже есть один собранный контроллер водоснабжения, без дисплея, на одних светодиодах в качестве обратной связи. Нужно сделать технологический прорыв и отображать уже слова и цифры! Супер!

добавлено спустя 11 минут:
Основательно посидев с Протеусом получил на выходе три платы, все таки пришел к мысли о модульности, ибо дисплей лучше на торец корпуса, а датчики температуры либо чего-то еще проще выделить в отдельные модули. На этой плате 4 разъема для модулей у меня получилось, можно было бы больше, но не нужно.
 Платы контроллера отопления   (кликните здесь для просмотра)



Проблема в основном возникает не на стадии кропотливого рисования дорожек, а в процессе экспорта и подготовки к изготовлению...
Начнем с того, что экспорт в SVG глючный. Экспорт слоя сверления - глючный, то черточки нет, то линии какие-то левые появляются.
Диаметры отверстий - кто в лес, кто по дрова, четко написано - отверстие 1 мм - но нет, рисует 0.64мм Подозрение.
Приходится в ручную в редакторе перебирать все контакты, заодно уже пару косяков нашел.

Заметил такую вещь, что девайсы нужно на стадии концепта размещать либо на лицевой, либо на обратной стороне ЯВНО. Дорожки то я рисовал правильно, с учетом того, что вся рассыпуха будет на нужной стороне. Но из-за того, что некоторые детали оказались на слое "ALL" - теперь нельзя автоматическую маску задать, закрашивает там где не нужно Расстроен
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (12:15 31-12-2018), всего редактировалось 3 раз(а)
    Добавлено: 12:08 31-12-2018   
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Термометр плавно трансформируется в контроллер отопления Хы...

 полноразмер   (кликните здесь для просмотра)

Ничего особенного в плате данной нет, просто разводка стандартных пинов на группы, дополнительное питание +6вольт на каждый внешний разъем и два блока реле.
Изготавливается плата не ЛУТом, а на станке с ЧПУ, лудится в ручную, переходы пропаиваются медными жилами от витой пары.

Читайте далее: подключаемый модуль датчиков температуры, как в первом посте темы, только без лампочек Улыбка

_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (11:11 06-01-2019), всего редактировалось 1 раз
    Добавлено: 11:05 06-01-2019   
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Преамбула.
Микроконтроллер ATmega328P меня уже мало чем устраивает, например наличием всего одного таймера с гарантированной повторяемостью тактов. Маловато будет, похоже пора переходить на что-то более адекватное, например STM32F103C8T6 Гы-гы

Реализация модуля измерения температуры:



Один АЦП MCP3008 10-битный, восемь резисторов на 1кОм, и одна розетка RJ45 (да, разъем называется по другому)

При подключении возникла занятная вещь: без Vref(опорного напряжения) замкнутого на пин 16 питания - измерять ничего не хотела микросхема.

Далее, возникла проблема: показания скачут в пределах 6 ед., например 500-506. Я так понимаю это связано в первую очередь с тем, что дорожки земли на плате разведены под микросхемой, это косяк номер раз, аналоговая земля объединена с цифровой землей, это второй косяк, и наконец питание опорное - это тоже самое что и питание микросхемы, ничем не отличающиеся по номиналу, а именно 5,09 вольта.
Когда-то я уже использовал подобную микросхему для получения уровня сопротивления переменных резисторов, только на микрокомпьютере RaspberryPI, имел грустный вид, т.к. значения так же плясали как хотели, и грешить на качество переменного резистора, как оказалось, не стоило. На мой взгляд основная проблема в опорном напряжении и отсутствие электролита на питании.

Проблему "дребезга" датчика температуры решил следующим образом:
зная формулу преобразования данных АЦП в градусы - построил таблицу в Excel и сгруппировал данные и градусы в группы по 6 чисел. Получился шаг в 3 градуса. Сделал еще две группы вниз и вверх по 6 чисел.
Долго объяснять, вот пример:


В итоге получилась сводная таблица верхнего и нижнего значения АЦП для точности измерения 1 целый градус.

В коде программы, это выглядит таким образом:
Код:
    if(temp_array[ADC_NUM][0]>=520 && temp_array[ADC_NUM][0]<=526
    && temp_array[ADC_NUM][1]>=520 && temp_array[ADC_NUM][1]<=526
    && temp_array[ADC_NUM][2]>=520 && temp_array[ADC_NUM][2]<=526
    && temp_array[ADC_NUM][3]>=520 && temp_array[ADC_NUM][3]<=526
    && temp_array[ADC_NUM][4]>=520 && temp_array[ADC_NUM][4]<=526
    && temp_array[ADC_NUM][5]>=520 && temp_array[ADC_NUM][5]<=526)
    {
      sig = 18;
    }

и так далее.
Почему-то куча строк с ифами мне больше нравится, чем заморочки с перебором в цикле, некогда мне, нужно таксовать Гы-гы

Хотелось бы так же отметить тот факт, что я опубликовал ранее код, для чтения с АЦП MCP3208 - это не то же самое что MCP3008.
MCP3208 - есть в протеусе, но он 12-битный и алгоритм его работы отличается от 10-битного именно последовательностью бит, на сколько я понял.
Мои попытки переиначить код из готовой библиотеки почему-то (странно) не увенчались успехами, поэтому я просто использовал пример из библиотеки и перенес туда свой код отвечающий за все остальное.
Вот библиотека, в исходных кодах, просто файлы вставляются в директорию \libraries\MCP3008 среды разработки Genuino.
Еще не факт, что такие "костыли" позволят адекватно работать сдвиговым регистрам, в общем посмотрим.

ЗЫ так же вылезла следующая проблема: панель со сдвиговыми регистрами, по моей наивности спроектирована с одним общим резистором на землю, после всех 8-ми светодиодов матрицы. Ну вы поняли, цифра 1 будет гореть ярче чем цифра 8 Гы-гы Поэтому, буду переделывать панель.

Читайте далее: панель управления с 4-мя семисегментными индикаторами, энкодером с кнопкой, и тактовыми кнопочками Улыбка

_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (10:14 10-01-2019), всего редактировалось 2 раз(а)
    Добавлено: 10:06 10-01-2019   
_RAZAAR_
 62 EGP


Рейтинг канала: 2(11)
Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :
Преамбула.
Микроконтроллер ATmega328P меня уже мало чем устраивает, например наличием всего одного таймера с гарантированной повторяемостью тактов. Маловато будет, похоже пора переходить на что-то более адекватное, например STM32F103C8T6 Гы-гы



это чтоже ты там такое пытаешся сотворить что атмеги328 и его трёх вполне пригодых для любых мелких задач таймеров тебе уже нехватает!! Ух ты!.. Подмигиваю
почему не используеш цифровые датчики температуры не требующие почти ни каких ресурсов процессора?
_________________
Quaere Vērum
------------------------
    Добавлено: 22:45 10-01-2019   
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Цитата:
почему не используеш цифровые датчики температуры не требующие почти ни каких ресурсов процессора?


цифровые датчики в данном случае концептуально не подходят Подмигиваю

Цитата:
и его трёх вполне пригодых для любых мелких задач таймеров тебе уже нехватает!!

Один таймер у атмеги328 вроде бы. По крайней мере один, который не сильно ошибается и не накапливает ошибки.

Сделал панельку:


Внезапно обнаружил что резисторов на 1кОм у меня всего 5 штук, а надо 16, беда. Остальные три индикатора впаивать пока нельзя из-за этого. Теперь сижу жду посылку... Зеваеца

С модулем измерения температуры все таки вышел косяк: chip select и CLOCK у панели управления и модуля температуры оказались перепутаны местами на принципиальной схеме. Из-за этого не нашлась проблема сразу. На первое время починю методом разрезания дорожек и навесными перемычками на модуле температуры, там плата вообще односторонняя, хорошо что вынес отдельным блоком.

Не все так просто оказалось с MCP3008 в плане дружбы с сдвиговыми регистрами: в куче проб и ошибок затерялась истина о SPI, которая заключается в том, что не нужно использовать чужие библиотеки Гы-гы

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

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

Прототип требует жертв времени Хы...
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (06:44 02-02-2019), всего редактировалось 4 раз(а)
    Добавлено: 06:19 02-02-2019   
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Обзавелся понтовой металлической крутилкой на энкодер Гы-гы
Сделал многоуровневое меню, навигация как в автомобильных системах, кручение нажатие.
Так как весь основной функционал уже есть, кроме разве что записи настроек в память устройства, и загрузки их при старте - устройство готово на уровне "потрохов".

 Cкрытый текст   (кликните здесь для просмотра)




Нужен дизайн корпуса Гы-гы

добавлено спустя 2 минуты:
ЗЫ и никаких мерцаний дисплея Супер!
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (23:32 12-02-2019), всего редактировалось 1 раз
    Добавлено: 23:32 12-02-2019   
БулерМэн
 420 EGP


Рейтинг канала: 4(58)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Разочаровался в RJ-коннекторах для проводов - пока не приподнимешь штекер - нет контакта, переделал один канал на разъемное соединение на основе DC-штекера и гнезда на корпус. Но, в очередной раз вылезла ошибка в программе, ловля блох продолжается Гы-гы
_________________
Дулички и фигушки
    Добавлено: 00:22 14-02-2019   
AnrDaemon
 856 EGP


Модератор
Рейтинг канала: 8(784)
Репутация: 37
Сообщения: 12292

Зарегистрирован: 17.10.2004
БулерМэн :
Разочаровался в RJ-коннекторах для проводов - пока не приподнимешь штекер - нет контакта

Либо обжал хреново, либо разъём хреновый.
У меня за 20 лет других причин неработы не было.

добавлено спустя 4 минуты:
С другой стороны, RJ годятся только для идеальных условий работы. IP20 в пределе.
_________________
Люблю свободный полёт... :)

Последний раз редактировалось: AnrDaemon (04:19 14-02-2019), всего редактировалось 1 раз
    Добавлено: 04:19 14-02-2019   
Железный канал: «Термометр на Arduino Nano»
На страницу: 1, 2  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: В клане Торговой Гильдии был проведен тест на наличие совести. Результаты упёрлись в минус бесконечность.

  » Термометр на Arduino Nano | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18