Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.05.2011, 23:36   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Dimmer на Arduino

Описаннаяв этой теме версия Dimmer устарела.
Рекомендую использовать новую версию полноценного многоканального Dimmer

Купить серийно выпускаемый Dimmer модуль

Принцип работы такой же как и у всех Диммер/Dimmer . Ардуино/Arduino ловит нулевую точку переменного напряжения , когда поймал он от этой точки начинает отсчет времени для открытия симистора , далее симистор в следующей нулевой точке закрывается сам, а контроллер начнет новый отсчет и так по кругу
Название: Dimmer.png
Просмотров: 46547

Размер: 12.6 Кб

Собственно сама схема
Нажмите на изображение для увеличения
Название: Dimmer2.jpg
Просмотров: 29801
Размер:	53.8 Кб
ID:	338

Скетчь
PHP код:
#include <avr/delay.h>   
int AC_pin 10;  // выход для симистора     
volatile uint16_t dim;      
uint8_t dimmer=0;// уровень димирования (0-255)  0 = max, 255 = min 

void setup()     
{      
  
pinMode(AC_pinOUTPUT);            
  
attachInterrupt(0FrontUpRISING);  //прерывание по изменению уровня с низкого на высокий     
}     
// Функция обработки прерывания на подъем       
void FrontUp()       
{     
  
detachInterrupt(0);     
  
_delay_us(dim+1000);  // отсекаем лишнее  
  
digitalWrite(AC_pinHIGH);  // включить симистор     
  
_delay_us(20);      // короткая пауза, чтобы обеспечить включение симистора     
  
digitalWrite(AC_pinLOW);   // выключение симистора(он выключится когда полупериод достигнет нуля)      
  
attachInterrupt(0FrontDownFALLING);       
}       
// Функция обработки прерывания на спад      
void FrontDown()       
{      
  
detachInterrupt(0);       
  
_delay_us(dim);  // отсекаем лишнее     
  
digitalWrite(AC_pinHIGH);  // включить симистор     
  
_delay_us(20);      // короткая пауза, чтобы обеспечить включение симистора     
  
digitalWrite(AC_pinLOW);   // выключение симистора(он выключится      
  
attachInterrupt(0FrontUpRISING);       
}     

void loop()     
{       
  if(
dimmer 255dimmer++; else dimmer=0;  // пример уменьшения яркости лампы  
  
dim=33*dimmer;  
  
delay(50); 

Admin вне форума   Ответить с цитированием
 


Здесь присутствуют: 6 (пользователей: 0 , гостей: 6)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 09:56. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика