본문 바로가기
전자공부

방학 작품 만들기 3편 2023동계방학

by 재욱01 2024. 4. 20.

 

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);
	
}

 

그럼 오늘도 파이팅!