Главная
 
PDA-NN.3dn.ruЧетверг, 03.07.2025, 17:18



Приветствуем вас Гость | RSS
Главная
Меню сайта

Категории раздела
Девайсы [16]
Софт [2]
Операционные системы [10]
Разное [12]

Наш опрос
Стоит ли удалить раздел WindowsMobile ?
Всего ответов: 17

Мини-чат

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Термореле со светодиодной индикацией
Цели и задачи.

1. Собрать устройство способное контролировать температуру в необходимом интервале с минимальными вложениями и знаниями в Avr

2. Принципиальная схема устройства


ССылка схемы в Proteus

3.Принцип работы:

Устройство имеет на борту семь светодиодов:

Три светодиода на порту C это индикаторы текущей температуры
pc0 - синий светодиод температуры ниже заданной нормы
pc1 - красный светодиод - температура выше на 2 градуса заданной нормы
pc2 - желтый светодиод - температура находится в заданном интервале (t_min+2)

Четыре светодиода на порту D это индикаторы текущего режима (режимов пять)
0 - ни один светодиод не горит - минимальная температура t_min = 16
1 - горит первый светодиод - t_min = 18
2 - горят первый и второй светодиоды t_min = 20
3 - горят первый, второй и третий светодиоды t_min = 24
4 - горят все светодиоды t_min = 28

Минимальные температуры записаны в прошивке и отредактировать их можно только там...

Исходный код для прошивки
Это так сказать модернизация вот этой статьи Простое термореле со светодиодной индикацией на Atmega8

Создадим новый проект с помощью мастера (Wizard).





Выбираем микроконтроллер ATmega 8 потом в закладке 1-Wire выбираем порт В dsts bit = 0.
File -> generate,save and exit.






Сохраняем все проекты в CV стираем сгенерированный код и вставляем наш...
Код

//Еще в языке я полный ноль и это моя первая работа так что не судите строго...  
//Вопросы по прошивке принимаю http://vk.com/vityan92 на сайте PDA-NN.3dn.ru
//Vityan.92@mail.ru power by Дымок®

#include <mega8.h> //подключаем библиотеки от меги
#include <1wire.h> //Подключаем библиотеки от 1wire  
#include <ds18b20.h> //Подключаем библиотеки от DS18b20
#include <delay.h>  
#asm  
#endasm  

eeprom char t_rezhs; //переменная с сохранением в eeprom  

static flash unsigned char trezh[]= { //Создаем блок режимов
(0b00000011), //0
(0b00001011), //1
(0b00011011), //2
(0b00111011), //3
(0b01111011), //4
};

  void main(void) // Основная функция  
{

  unsigned char devices, k, rezh; //ввобим переменные
  int temp, min_temp, i;
  devices = w1_init();  
  rezh = t_rezhs;
PORTD = trezh[rezh]; //Включаем подтягивающее сопротивление на 1 и 2 лапке порта D
DDRD =0b01111000; //Лапки порда D 3,4,5,6 на выход

PORTC = 0x00; //Выключаем весь порт C
DDRC = 0b00000111; //Лапки порда С 0,1,2,на выход

  while(devices>0) //если датчик обнаружен  
  {  
  k=0; //переменнй к присваиваем ноль
   
  if (!PIND.0){ //если нажата кнопка на порту D0 то входим в меню и выполняем цикл for десять раз
  for (i=0;i<10;i++) {
  delay_ms(100); //задержка от дребезка  
  PORTD = 0b01111011; //зажигамем все лампочки на порту Д
  delay_ms(50); //задержка для красоты
  PORTD = 0b00000011; //тушим лампочки на порту D  
  };
  PORTD=0b00000011; //обнуляем порт D
   
  while (k<=2) { // запускаем цикл меню и он буде действовать пока переменная k будет меньше 3
  k=1; //будем присваивать к к единице что бы не выходило из меню сама  
  PORTD=trezh[rezh]; //порту D присвоим текущий режим из блока режимов
   
  while (!PIND.1) { //запускается цик при нажатие второй на порту кнопки D1
  delay_ms(500); //задержка от дребезка
  rezh++; //добавляем единицу к режиму
  if (rezh==5)rezh=0; //если режим достиг 5 то его обнуляем  
  PORTD = trezh[rezh]; //при сваиваем порту D выбранный режим
  };  
  delay_ms(100); //задержка  
   
  if (!PIND.0){ //Снова нажимаем кнопку на порту D0
  delay_ms(20); //задержка  
  PORTD = 0b01111011; //далее пойдет визуализация сохранеия тупо моргаем лампочками выбора режима
  delay_ms(300);
  PORTD = 0b00111011;
  delay_ms(300);
  PORTD = 0b00011011;
  delay_ms(300);
  PORTD = 0b00001011;
  delay_ms(300);
  PORTD = 0b00000011;
  PORTD = trezh[rezh]; //при сваиваем порту D выбранный режим
  t_rezhs=rezh; //запоминаем номер режима в eeprom постоянную перезаписываемую память
  delay_ms(500);
  k=3; //присваеваем к 3 и выходим из меню настроек
  };
  };
  };

  if (rezh==0) { //задаем температуры режимов если режим 0 то переменная min_temp будет 16
  };
  if (rezh==1) { //задаем температуры режимов
  min_temp=18;
  };
  if (rezh==2) { //задаем температуры режимов
  min_temp=20;
  };  
  if (rezh==3) { //задаем температуры режимов
  min_temp=24;
  };  
  if (rezh==4) { //задаем температуры режимов
  min_temp=28;
  };
   
   
   
  temp=ds18b20_temperature(0); //читаем температуру  
   
  if (temp>1000) //если датчик выдаёт больше 1000  
  {  
  temp=4096-temp; //отнимаем от данных 4096  
  temp=-temp; //и ставим знак "минус"  
  }

  if (temp<min_temp) // устанавливаем нижней порог Синий диод
  PORTC.0 = 1;  
  else PORTC.0=0;
   
  if (temp>=min_temp & temp<=min_temp+2) // устанавливаем рабочую температура Желтый
  PORTC.2 = 1;  
  else PORTC.2 = 0;
   
  if (temp>min_temp+2) // установим верхний порог Красный
  PORTC.1=1;  
  else PORTC.1=0;  
   
  }  
   
  while(devices<=0){ //моргаем диодами интервалов температур если отсутствует датчик
  PORTC.0 = 1;
  delay_ms(100);
  PORTC.2 = 1;
  delay_ms(100);
  PORTC.1 = 1;
  delay_ms(100);
  PORTC.0 = 0;
  delay_ms(100);
  PORTC.2 = 0;
  delay_ms(100);
  PORTC.1 = 0;
  delay_ms(100);  
   
  ////добавим выбор режима в отсутствие датчика чтобы проверить работоспособность собранного устройства///////  
   
  k=0; //переменнй к присваиваем ноль
   
  if (!PIND.0){ //если нажата кнопка на порту D0 то входим в меню и выполняем цикл for десять раз
  for (i=0;i<10;i++) {
  delay_ms(100); //задержка от дребезка  
  PORTD = 0b01111011; //зажигамем все лампочки на порту Д
  delay_ms(50); //задержка для красоты
  PORTD = 0b00000011; //тушим лампочки на порту D  
  };
  PORTD=0b00000011; //обнуляем порт D
   
  while (k<=2) { // запускаем цикл меню и он буде действовать пока переменная k будет меньше 3
  k=1; //будем присваивать к к единице что бы не выходило из меню сама  
  PORTD=trezh[rezh]; //порту D присвоим текущий режим из блока режимов
   
  while (!PIND.1) { //запускается цик при нажатие второй на порту кнопки D1
  delay_ms(500); //задержка от дребезка
  rezh++; //добавляем единицу к режиму
  if (rezh==5)rezh=0; //если режим достиг 5 то его обнуляем  
  PORTD = trezh[rezh]; //при сваиваем порту D выбранный режим
  };  
  delay_ms(100); //задержка  
   
  if (!PIND.0){ //Снова нажимаем кнопку на порту D0
  delay_ms(20); //задержка  
  PORTD = 0b01111011; //далее пойдет визуализация сохранеия тупо моргаем лампочками выбора режима
  delay_ms(300);
  PORTD = 0b00111011;
  delay_ms(300);
  PORTD = 0b00011011;
  delay_ms(300);
  PORTD = 0b00001011;
  delay_ms(300);
  PORTD = 0b00000011;
  delay_ms(2000);
  PORTD = trezh[rezh]; //при сваиваем порту D выбранный режим
  t_rezhs=rezh; //запоминаем номер режима в eeprom постоянную перезаписываемую память
  k=3; //присваеваем к 3 и выходим из меню настроек
  };
  };
  };
   
  }
   

}





Прошивка исходник для CodeVisionAVR >>>>



Схема печатной платы в Sprint Layout 5.0



Размер окружности взят специально под баночку из под крема NIVEA =)

Ссылка на схему

Список материалов:

1. Текстолит однослойный 100х100мм
2. Атмеga 8 в Dip28 корпусе
3. 7 светодиодов 5v цвета на ваше усмотрение (мои красный 1шт, синий 1шт, зеленый 1шт, белый 4 шт)
4. Резисторы 390ом 4шт, 4к7 5шт, 10к 1шт
5. Конденсаторы керамические 100nF (Маркируются 104)
6. Транзисторы типа n-p-n Я взял по мощнее КТ805 МБ 2 шт
7. Панелька под Atmega8 !!!обязательно!!!
8. Две кнопки без фиксации

ВНИМАНИЕ!!! СХЕМА НЕ ИМЕЕТ ВНУТРИСХЕМНОГО ПРОГРАММИРОВАНИЯ ATMEGA8 ПРОШИВАТЬ ОТДЕЛЬНО
Для этого отлично подойдет ПРОГРАММАТОР ГРОМОВА+
ФОТО РАБОТЫ




Видео работы


Источник: http://pda-nn.3dn.ru/
Категория: Девайсы | Добавил: Дымок(R) (07.10.2015) E W
Просмотров: 1073 | Комментарии: 3 | Теги: AVR, ATmega8, ТЕРМОРЕЛЕ | Рейтинг: 5.0/2
Всего комментариев: 3
2 Дымок(R)  
1
Совершенно верно, Транзисторы КТ805БД выдерживают до 5А если устройства маломощные можно и напрямую или через релешки

3 Гуру  
Понял, буду пробовать

1 Гуру  
Спасибо за статью, очень заинтересовался, попробую собрать сам. Только вопрос куда релешки и как их подключать ? Как я понял к транзисторам ?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Вход на сайт

Поиск

Друзья сайта


Copyright MyCorp © 2025
Сайт создан в системе uCoz