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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.01.2012, 15:32   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,378
Вес репутации: 9577
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
По умолчанию Бесконтактный выключатель

Сделал себе в комнату бесконтактный выключатель . Срабатывает на расстоянии 10см от датчика (можно увеличить), для того что бы включить или выключить свет достаточно махнуть рукой рядом с выключателем. Выключатель сделан на базе Carduino / Arduino
В качестве лампочки для тестирования в скетче используется светодиод на D13
Ик Светодиод взял от пульта управления телевизором. Фототранзистор любой
PHP код:
#include <TimerOne.h>     
#include <avr/delay.h>
#include <avr/pgmspace.h>
#include "fife.h"
#include "hi.h"

////////переменные проигрывателя////////////////////////////////////
#define speakerPin 11
#define lamp 13
volatile uint16_t sample=0;
volatile uint8_t lastSampleFirstSample;
volatile byte new_data,future_data,old_data;
volatile byte stat=0;
unsigned char *wave;
unsigned int length;
////////переменные выключателя////////////////////////////////////
uint8_t state 0;
volatile uint16_t timerCountlengthImpuls;
volatile uint16_t Counter=0;
////////////начальная предустановка///////////////////////////////
void setup() 

  
pinMode(speakerPinOUTPUT);    //выход на динамик
  
digitalWrite(speakerPinLOW);   // на всякий случай, что бы не спалить динамик
  
pinMode(2INPUT);              // Вход, к фототранзистору 
 // digitalWrite(2, HIGH);          //Подключить подтягивающий резистор
  
pinMode(lampOUTPUT);              //Лампочка
  
pinMode(5OUTPUT);               //выход ШИМ на ИК светодод
  
TCCR0B TCCR0B 0b11111000 3;  //частота ШИМ 1000Гц
  
analogWrite(5,128 );               //запустить ШИМ
  
attachInterrupt(0Ir_sensRISING); //внешнее прерывание по фронту
  
Timer1.initialize(10);              //инициализация таймера  
  
Timer1.attachInterrupt(callback);   //прерывание таймера

////////////обработка прерывания по таймеру///////////////////////////////
void callback() { timerCount++; }
////////////обработчик внешнего прерывания///////////////////////////////
void Ir_sens()

  
lengthImpuls timerCount;
  
timerCount=0;
  
Counter++; 
}
///////////////////////Обработчик прерывания по совпадению с OCR2///////////////////
ISR(TIMER2_COMPA_vect
{        
 switch (
stat)
  { 
    case 
0:{
              
old_data pgm_read_byte(&wave[sample]);
              
OCR2A old_data
              
stat=1;
              ++
sample;  
              if (
sample == lengthstat=4;
              
future_data pgm_read_byte(&wave[sample]); 
              
new_data = (old_data+future_data)/2
            }  
      break;
    case 
1:  {OCR2A=(old_data+new_data)/2stat=2; } 
      break;  
    case 
2:   {OCR2A new_datastat=3; }
      break;    
    case 
3:   {OCR2A=(new_data+future_data)/2stat=0; } 
      break;
    case 
4:   if(lastSample==0stat=5; else {--lastSampleOCR2A=lastSample;} 
      break;      
    case 
5:   stopPlayback(); 
      break;
  }    
}
////////////главный цикл приграммы///////////////////////////////
void loop() 

 if(
lengthImpuls>105 || lengthImpuls<99Counter=0;  
 if(
lengthImpuls>99 && lengthImpuls<105 && Counter>20
 {  
    
state=~state
    
digitalWrite(lampstate);    
    if(
state>0play_wave((unsigned char *)hi,  hi_length);  
    if(
state==0play_wave((unsigned char *)fife,  fife_length);  
   
_delay_ms(200);    

   while(
Counter>10)  
       {
         if(
lengthImpuls>105 || lengthImpuls<99Counter=0
       }             
    
lengthImpuls=0;  
  }
}
////////////начать воспроизведение///////////////////////////////
void play_wave(unsigned char *wave_dataunsigned int wave_length)
{
 
wave=wave_data
 
length=wave_length;
 
startPlayback(); 
}

void startPlayback()
{
    
sample=0;
    
stat=0;
    
    
ASSR |=(1<<AS2);

   
TCCR2A |= ((1<<COM2B1)|(0<<COM2B0)|(1<<COM2A1)|(0<<COM2A0)|(1<<WGM21)|(0<<WGM20)); 
    
TCCR2B = ((<< CS22) | (<< CS21) | (<< CS20) | (0<<WGM22) | (1<<FOC2A) |  (1<<FOC2B)); 

    
lastSample pgm_read_byte(&wave[length-1]); 

    
TCNT2 0
    
TIMSK2|=(1<<OCIE2A);
    
sei();
   
     for (
int i=0<50i++)
     {
       
new_data=i;
         
stat=2;
          
sample 0;             
      
_delay_us(1);
     }
   
stat=0;  
}
////////////остановить воспроизведение///////////////////////////////
void stopPlayback()
{
    
TIMSK2&=(0<<OCIE2A); 
    
TCCR2B &=(0<<CS10);



Нажмите на изображение для увеличения
Название: NANO_IR_sensor.PNG
Просмотров: 61200
Размер:	36.5 Кб
ID:	362
Миниатюры
Нажмите на изображение для увеличения
Название: flasher1.png
Просмотров: 77316
Размер:	10.5 Кб
ID:	399  
Изображения
 
Вложения
Тип файла: rar Switch_sound.rar (35.4 Кб, 2497 просмотров)
Admin вне форума   Ответить с цитированием
Старый 26.02.2012, 19:18   #2
Racoon
Junior Member
 
Регистрация: 26.02.2012
Сообщений: 1
Вес репутации: 0
Racoon is on a distinguished road
По умолчанию

Очень интересная идея. Я слышал о выключателях работающих от хлопка, но это ещё лучше. Обязательно попробую.
Racoon вне форума   Ответить с цитированием
Старый 26.02.2012, 19:24   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,378
Вес репутации: 9577
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
По умолчанию

А управление выключателями голосом?
Admin вне форума   Ответить с цитированием
Старый 28.02.2012, 03:12   #4
Ваня
Junior Member
 
Регистрация: 28.02.2012
Сообщений: 2
Вес репутации: 0
Ваня is on a distinguished road
По умолчанию

Мне очень понравилась идейка! надо будет воплатить и проверить
Ваня вне форума   Ответить с цитированием
Старый 28.02.2012, 03:14   #5
Ваня
Junior Member
 
Регистрация: 28.02.2012
Сообщений: 2
Вес репутации: 0
Ваня is on a distinguished road
По умолчанию

конечто нже нет! реагирует на движение руки!!!
Ваня вне форума   Ответить с цитированием
Старый 24.10.2012, 18:33   #6
stD
Moderator
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,121
Вес репутации: 1301
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

А как это работает?
stD вне форума   Ответить с цитированием
Старый 24.10.2012, 19:05   #7
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,378
Вес репутации: 9577
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
По умолчанию

ИК передатчик передает пакеты импульсов. Импульсы отражаются от руки и попадают на ИК приемник и там же фильтруются и проверяются на достоверность, если это родные импульсы то происходит срабатывание
Admin вне форума   Ответить с цитированием
Старый 25.10.2012, 18:59   #8
stD
Moderator
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,121
Вес репутации: 1301
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

Ааа, я просто не догадался что от руки отражается!!! ))))))
Спасибо!!!
stD вне форума   Ответить с цитированием
Старый 17.11.2012, 02:49   #9
stD
Moderator
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,121
Вес репутации: 1301
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

А чем этот проект отличается от этого?
http://cyber-place.ru/showthread.php?t=89
stD вне форума   Ответить с цитированием
Старый 17.11.2012, 10:46   #10
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,378
Вес репутации: 9577
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
По умолчанию

Радиусом действия. В проекте с IR приемником TSOP радиус срабатывания до 3-х метров
Admin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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


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


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