2편에 이은 3편!
2편에서 납땜을 마무리하고
이번엔 외형을 만들 차례다
만드는 과정은 못 찍었지만
그냥 오리고 붙이는 것 밖에 없었다
폼보드와 글루건을 사용했다
눈치가 빠른 사람은 알겠지만 lcd를 추가해서
화재 시 경보문자가 출력되게 만들었다
백문이 불여일견이라고 동작 영상 한번 보자.
외형 만들 때는 크게 어려운 점이나 문제점이 없었다
손재주가 좋아서 그런가 ㅎㅎ
발표를 하고 질문도 받았다
그렇게 겨울방학을 마무리했다
<화재 경보 및 방화벽 시스템>
결론: 화재 확산 방지에 도움이 됨
보완점: 소화시스템이 없어 확산 방지 효과가 떨어짐
<화재 경보 및 방화벽 시스템 코딩>
#define F_CPU 16000000UL
#define __DELAY_BACKWARD_COMPATIBLE__
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define NULL 0x00
#define BIT4_LINE2_DOT58 0x28
#define DISPON_CUROFF_BLKOFF 0x0C
#define DISPOFF_CUROFF_BLKOFF 0x08
#define INC_NOSHIFT 0x06
#define DISPCLEAR 0x01
#define CUR1LINE 0x80
#define CUR2LINE 0xC0
#define CURHOME 0x02
#define E_BIT 0x04
#define RW_BIT 0x03
#define RS_BIT 00x02
void buzzer(int hz,int count);
void CLCD_cmd(char);
void CLCD_data(char);
void CLCD_puts(char *);
char motto1[]="dangerous!";
char motto2[]="Fire";
int main(){
int i;
DDRA=0x06;
ADMUX=0x40; ADCSRA=0xE7;
DDRB=0x20;
TCCR1A=0x82; TCCR1B=0x1A; OCR1A=3000; ICR1=19999;
// OCR1A -> OC Clear / Fast PWM TOP = ICR1 / 8분주
DDRB|=0x10;
_delay_ms(50);
DDRC = 0xff;
DDRD=0xff;
CLCD_cmd(BIT4_LINE2_DOT58);
CLCD_cmd(DISPON_CUROFF_BLKOFF);
CLCD_cmd(INC_NOSHIFT);
CLCD_cmd(DISPCLEAR);
_delay_ms(2);
CLCD_cmd(CUR1LINE);
CLCD_puts(motto1);
CLCD_cmd(CUR2LINE);
CLCD_puts(motto2);
while(1){
i=ADC; // i=ADCW;
if (i>=280){
OCR1A = 3000; // 0 degree, >2ms pulse
PORTA=0x04;
CLCD_cmd(DISPON_CUROFF_BLKOFF);
for(i=0; i<2; i++)
{
buzzer(730,550);
buzzer(600,390);
}
}
else{
PORTA=0x02;
OCR1A = 1000; // 180 degree, <1ms pulse
PORTB&=0xEF;
CLCD_cmd(DISPOFF_CUROFF_BLKOFF);
}
}
}
void buzzer(int hz,int count)
{
int i,millis,micros;
millis=1000/(2*hz);
micros=(1000.0/(2*hz)-millis)*1000;
for(i=0; i<count;i++)
{
PORTB|=1<<4;
_delay_us(millis);
_delay_us(micros);
PORTB&=~(1<<4);
_delay_us(millis);
_delay_us(micros);
}
}
void CLCD_puts(char *ptr)
{
while(*ptr !=NULL)
CLCD_data(*ptr++);
}
void CLCD_cmd(char cmd)
{
PORTD =0x00;
_delay_us(1);
PORTD=0x10;
PORTC=cmd&0xf0;
PORTD=0x00;
_delay_us(2);
PORTD=0x10;
PORTC=(cmd << 4)&0xf0;
PORTD = 0x00;
_delay_ms(1);
}
void CLCD_data(char data)
{
PORTD =0x04;
_delay_us(1);
PORTD=0x14;
PORTC=data&0xf0;
PORTD=0x04;
_delay_us(2);
PORTD=0x14;
PORTC=(data << 4)&0xf0;
PORTD = 0x04;
_delay_ms(1);
}
그럼 오늘도 파이팅!