Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход

Урааа

Меню сайта

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

Вход на сайт

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

Мини-чат

Друзья сайта
  • Яндекс Диск
  • Радикал-Фото
  • 4pda.ru

  • Поиск

    Статистика

    Онлайн всего: 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
    Просмотров: 1014 | Комментарии: 3 | Теги: AVR, ATmega8, ТЕРМОРЕЛЕ | Рейтинг: 5.0/2
    Всего комментариев: 3
    +1  
    2 Дымок(R)   (11.10.2015 18:06) [Материал]
    Совершенно верно, Транзисторы КТ805БД выдерживают до 5А если устройства маломощные можно и напрямую или через релешки

    3 Гуру   (11.10.2015 18:07) [Материал]
    Понял, буду пробовать

    1 Гуру   (11.10.2015 18:02) [Материал]
    Спасибо за статью, очень заинтересовался, попробую собрать сам. Только вопрос куда релешки и как их подключать ? Как я понял к транзисторам ?

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