ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Термометр на Arduino Nano | страница 1 |
|
|
|
Железный канал: «Термометр на 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 раз(а) |
|
|
бухой джедай
183 EGP
  Рейтинг канала: 4(87) Репутация: 70 Сообщения: 7906 Предупреждений: 1 Откуда: Одесса:) Зарегистрирован: 08.09.2007
 |
|
а что свитч-кейс эта хреновина не понимает ? (да да да знаю что оно может быть вырвиглазно и не интуитивно в данном случае,но это проф деформация ничего не поделаю вижу стену ифов думаю можно ли заменить на свитч-кейс) .
_________________ Так Добрый вечер...Превед с большого Бодуна...
Магистр Непросыхаемость...
Злобный Рецедивист... |
|
|
AnrDaemon
864 EGP
        Рейтинг канала: 8(796) Репутация: 37 Сообщения: 12322
Зарегистрирован: 17.10.2004
 |
|
Поправка - стену ОДНОТИПНЫХ ифов - да, можно и даже нужно заменить на свитч-кейс.
Либо вообще избавиться, заменив на формулу.
_________________ Люблю свободный полёт... :) |
|
|
БулерМэн
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 раз(а) |
|
|
_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 раз |
|
|
БулерМэн
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 раз(а) |
|
|
_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 раз(а) |
|
|
БулерМэн
420 EGP
   Рейтинг канала: 4(58) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006
 |
|
_RAZAAR_ : |
что за от двух полосочек?
|
То есть на данной картинке это конденсаторы с номиналом 22 пФ?
А чего тогда их не подписали, или это очевидно?
_________________ Сосиска в хлебе |
|
|
Diff
708 EGP
      Рейтинг канала: 8(861) Репутация: 44 Сообщения: 4179 Откуда: Сферическая Земля в вакууме. Зарегистрирован: 04.07.2003
 |
|
Похоже на то. Вот пример аналогичного подключения http://www.s-led.ru/322-shema-indikatora-mikrokontrollera.html
_________________ Конец света в конце тоннеля |
|
|
_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 раз |
|
|
БулерМэн
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 раз(а) |
|
|
_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 раз(а) |
|
|
БулерМэн
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 раз(а) |
|
|
БулерМэн
420 EGP
   Рейтинг канала: 4(58) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006
 |
|
Термометр плавно трансформируется в контроллер отопления
полноразмер (кликните здесь для просмотра)
|
Ничего особенного в плате данной нет, просто разводка стандартных пинов на группы, дополнительное питание +6вольт на каждый внешний разъем и два блока реле.
Изготавливается плата не ЛУТом, а на станке с ЧПУ, лудится в ручную, переходы пропаиваются медными жилами от витой пары.
Читайте далее: подключаемый модуль датчиков температуры, как в первом посте темы, только без лампочек
_________________ Сосиска в хлебе
Последний раз редактировалось: БулерМэн (11:11 06-01-2019), всего редактировалось 1 раз |
|
|
БулерМэн
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 раз(а) |
|
|
_RAZAAR_
62 EGP
  Рейтинг канала: 2(11) Репутация: -13 Сообщения: 2854 Заблокирован Откуда: РАЗААРЪ - 40Лы от Лаве Зарегистрирован: 15.04.2008
 |
|
БулерМэн : |
Преамбула.
Микроконтроллер ATmega328P меня уже мало чем устраивает, например наличием всего одного таймера с гарантированной повторяемостью тактов. Маловато будет, похоже пора переходить на что-то более адекватное, например STM32F103C8T6
|
это чтоже ты там такое пытаешся сотворить что атмеги328 и его трёх вполне пригодых для любых мелких задач таймеров тебе уже нехватает!!
почему не используеш цифровые датчики температуры не требующие почти ни каких ресурсов процессора?
_________________ Quaere Vērum
------------------------ |
|
|
БулерМэн
420 EGP
   Рейтинг канала: 4(58) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006
 |
|
Цитата: |
почему не используеш цифровые датчики температуры не требующие почти ни каких ресурсов процессора?
|
цифровые датчики в данном случае концептуально не подходят
Цитата: |
и его трёх вполне пригодых для любых мелких задач таймеров тебе уже нехватает!!
|
Один таймер у атмеги328 вроде бы. По крайней мере один, который не сильно ошибается и не накапливает ошибки.
Сделал панельку:
Внезапно обнаружил что резисторов на 1кОм у меня всего 5 штук, а надо 16, беда. Остальные три индикатора впаивать пока нельзя из-за этого. Теперь сижу жду посылку...
С модулем измерения температуры все таки вышел косяк: chip select и CLOCK у панели управления и модуля температуры оказались перепутаны местами на принципиальной схеме. Из-за этого не нашлась проблема сразу. На первое время починю методом разрезания дорожек и навесными перемычками на модуле температуры, там плата вообще односторонняя, хорошо что вынес отдельным блоком.
Не все так просто оказалось с MCP3008 в плане дружбы с сдвиговыми регистрами: в куче проб и ошибок затерялась истина о SPI, которая заключается в том, что не нужно использовать чужие библиотеки
На данный момент, спустя один месяц разработки устройство умеет считывать температуру с аналоговых датчиков, показывать символы и есть управление кнопками, в частности перебор возможных символов, чисто для теста.
Энкодер, конечно не идеальный, но все излечимо, срабатывание должно происходить только при смене сигнала с ноля на единицу и никак иначе.
Прототип требует жертв времени
_________________ Сосиска в хлебе
Последний раз редактировалось: БулерМэн (06:44 02-02-2019), всего редактировалось 4 раз(а) |
|
|
БулерМэн
420 EGP
   Рейтинг канала: 4(58) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006
 |
|
Обзавелся понтовой металлической крутилкой на энкодер
Сделал многоуровневое меню, навигация как в автомобильных системах, кручение нажатие.
Так как весь основной функционал уже есть, кроме разве что записи настроек в память устройства, и загрузки их при старте - устройство готово на уровне "потрохов".
Cкрытый текст (кликните здесь для просмотра)
|
Нужен дизайн корпуса
добавлено спустя 2 минуты:
ЗЫ и никаких мерцаний дисплея
_________________ Сосиска в хлебе
Последний раз редактировалось: БулерМэн (23:32 12-02-2019), всего редактировалось 1 раз |
|
|
БулерМэн
420 EGP
   Рейтинг канала: 4(58) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006
 |
|
Разочаровался в RJ-коннекторах для проводов - пока не приподнимешь штекер - нет контакта, переделал один канал на разъемное соединение на основе DC-штекера и гнезда на корпус. Но, в очередной раз вылезла ошибка в программе, ловля блох продолжается
_________________ Сосиска в хлебе |
|
|
AnrDaemon
864 EGP
        Рейтинг канала: 8(796) Репутация: 37 Сообщения: 12322
Зарегистрирован: 17.10.2004
 |
|
БулерМэн : |
Разочаровался в RJ-коннекторах для проводов - пока не приподнимешь штекер - нет контакта
|
Либо обжал хреново, либо разъём хреновый.
У меня за 20 лет других причин неработы не было.
добавлено спустя 4 минуты:
С другой стороны, RJ годятся только для идеальных условий работы. IP20 в пределе.
_________________ Люблю свободный полёт... :)
Последний раз редактировалось: AnrDaemon (04:19 14-02-2019), всего редактировалось 1 раз |
|
|
|
|
|
Железный канал: «Термометр на Arduino Nano» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Надя, умоляю, не закрывай темку, я щас, только за пивом сбегаю! (умолял 027)
|
» Термометр на Arduino Nano | страница 1 |
|