본문 바로가기

AVR 8BIT/LED로 만드는 주차장!!

LED주차장


안녕하세요!!! 숭덕이 박제현 입니다. AVR에서 잠시 손을 놓고 ARM을 하려고 했으나, 친구가 간단한 주차장을 만들어달라고 하여 이렇게 한개의 글을 더 쓰게 됩니다. 작품은 오늘로 끝내려고 합니다.
원리는 간단합니다. CDS센서를 이용하여 빛이 있으면 초록색 빛이 가려지면 빨간색으로 주차유무를 표시합니다.
또한 주차장에 모든 차가 다 주차가 되면 모터를 이용하여 차단기를 내립니다. 일단 회로도를 그려야겠습니다.

머 대충적인 서론을 말하면

현재 우리나라는 좁은 국토 면적 당 높은 차량 보급률과 자가 운전자들에 의해 어디를 가든 주차 문제로 걱정해야 하는 심각한 주차 문제를 걱정해야 하는 심각한 주차 난 을 겪고 있는 설정입니다. 불법적으로 도로에 주차를 하는 경우와 주차장에 자리가 없을 경우 벽사이에 차를 세워두기도 하지요!! 그럼에도 아직까지는 우리나라 주차장에서 입구에 배치되어 주차장 출입만 안내하는 주차요원과 각 층에 배치 된 도우미들을 별 다를 장치 없이 주차 공간을 찾는데도 불편을 함을 느끼고 있어 주차 공간의 활용도가 매우 떨어지는 형편이다. 현재의 방식에서 발전하는 방향으로 도우미 요원들을 더 늘려서 곳곳에 배치하여야 하나 이는 심각한 인력낭비 및 효율성의 문제로 이야기 할 수 있다.이러한 문제점을 보안하기 위해서는 주차장 자동화 시스템 개발을 하기 위해 요구되기 시작되었다. 이런 문제점으로 주차장을 만들었습니다.





회로도 입니다.  막 그냥 그리다보니 CDS 센서가 막 이상하네요^^


 


자 그냥 이 부분에 대해서 설명드리겠습니다. VCC는 5V를 사용 할 것이며, 계산 방법은

(R1 / RC+R1) * VCC 


R1(10k) / RC(10K) + (R1(10K) = 0.5 * 5V = 2.5V



음 이제는 2색 LED에 대해서 설명드려야겠네요  
찾다보니 2색 LED가 있더라고요 !!! 공통접지가 가운데며 양쪽에 다리에 한다리에 VCC를 물리면
초록색과 빨간색이 나타납니다...... 간단하게 할 수 있을 거 같습니다.



 


별로 이쁜것을 좋아하지 않아 LED도 머 대충이네요 ^^ PB0 ~ 7까지는 Red이며, PC0 ~ 7까지는 Green입니다. 이쁜거 요구하지말아주세요!!!!!

음 이제 한번 저 2개만 가지고 만들어볼가요.....................GOGOGOGOGOGOGO
처음에는 포맥스를 가지고 외형을 제작해야하는데 이것도 제가 세밀한 작업을 싫어해서 대충 합니다.....


ㅋㅋ 외형이라기 보다 그냥 어디서 주워온듯 한 아직 인테리어를 안해서 그렇다구욧!!!!!!!!!!!!!!!!!!

자 이제 납땜을 시작합시다..........

아...........외형하는데 1시간 30분 쏟았다.......열정으로 불 태우면서 했건만 변한건 고작 모 없다 ㅋㅋㅋㅋ
일단 내일 출장가야하니 오늘은 여기서 그만 내일은 마무리 해야징............


아 정말 외형디자인 선 연결하는게 왜 이렇게 짜증나는거야.......................
휴 그래도 LED, CDS 다 연결 후 테스트 완료

동영상 하나 첨부 모터는 곧 왜 이렇게 하기가 싫은지 모르겠다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

                                                                    완성 50% 동영상

 

             



현재의 문제점은 서보모터 HS-311을 이용하여 차량이 진입했을시 차단기가 위로 올라가는것까지 했지만 서로 포트간의 간섭으로 인해 LED의 몇개가 꺼짐현상이 발생한다. 문제점을 보안하고자 인터럽트방식과 PWM방식으로 해봤지만 안된다 소스중에 몇가지 문제점을 찾았는데 그 문제점은 for문에서 루프를 돌 때의 시간동안 LED가 잠시 꺼짐현상이다. 이 문제점을 어떻게 해결하면 좋을지 잘모르겠다. 또한 문제점을 찾고자 하면 LED에 저항을 달아줬어야하는데 깜박하고 그냥 바로 포트에 물린점이다. LED가 일반다이오드보다 전압이 높기때문에 5V까지는 상관이 없지만 저항으로 인해 LED가 꺼지는걸가???? 그건 아닌거같다............
꺼질려면 다 꺼져야 하는 반면 몇개의 LED만 꺼지는 현상이라 흠 참 이상하도다...........

                                             완성 100% 동영상
 

             




 소스살짝공개^^

#include <mega128.h>
#include <delay.h>


unsigned int i=0;
int ADC_I,chk,a;
float ADC_F;

void main(void)
{
DDRF=0x00;
DDRC=0xff;
DDRA=0xff;
DDRD=0xff;
DDRB=0xff;
DDRE=0xff;
ADCSRA=0xE7;


while(1)
{
////////////////////////////////////////////////////////////////////

ADMUX=0; delay_ms(1); ADC_I=ADCW;
ADC_F=(float)ADC_I * 5.0 / 1023.0;
if(ADC_F > 3)
{
for(i=0; i<200; i++)
{
PORTC=0x10; delay_us(600); PORTC=0x00; delay_ms(23);
}
}
else if(PINF & 0x7f)
{
PORTC.4=1; delay_us(2500); PORTC=0; delay_ms(23);
}
////////////////////////////////////////////////////////////
ADMUX=1; delay_ms(1); ADC_I=ADCW;
ADC_F=(float)ADC_I*5.0/1023.0;
if(ADC_F > 3 )
{
PORTD.3=1;PORTA.4=0; PORTB.0=1;
}
else
{
PORTA.4=1;PORTD.3=0;PORTB.0=0;
}
/////////////////////////////////////////////////////////////
ADMUX=2; delay_ms(1); ADC_I=ADCW;
ADC_F=(float)ADC_I*5.0/1023.0;
if(ADC_F > 3 )
{
PORTA.3=1; PORTD.2=0; PORTB.1=1;
}
else
{
PORTD.2=1; PORTA.3=0; PORTB.1=0;
}
///////////////////////////////////////////////////////////////////
ADMUX=3; delay_ms(1); ADC_I=ADCW;
ADC_F=(float)ADC_I*5.0/1023.0;
if(ADC_F > 3)
{
PORTD.0=1; PORTA.2=0; PORTB.2=1;
}
else
{
PORTA.2=1; PORTD.0=0; PORTB.2=0;
}
////////////////////////////////////////////////////////////////////
ADMUX=4; delay_ms(1); ADC_I=ADCW;
ADC_F=(float)ADC_I*5.0/1023.0;
if(ADC_F > 2 )
{
PORTA.5=1; PORTD.5=0; PORTB.3=1;
}
else
{
PORTD.5=1;PORTA.5=0; PORTB.3=0;
}

//////////////////////////////////////////////////////////////////////
ADMUX=5; delay_ms(1); ADC_I=ADCW;
ADC_F=(float)ADC_I*5.0/1023.0;
if(ADC_F > 3 )
{
PORTA.1=1; PORTD.4=0; PORTB.4=1;
}
else
{
PORTD.4=1;PORTA.1=0; PORTB.4=0;
}

////////////////////////////////////////////////////////////////
ADMUX=6; delay_ms(1); ADC_I=ADCW;
ADC_F=(float)ADC_I*5.0/1023.0;
if(ADC_F > 3 )
{
PORTD.1=1;PORTA.0=0; PORTB.5=1;
}
else
{
PORTA.0=1;PORTD.1=0; PORTB.5=0;
}


//////////////////////////////////////////////////////////////////
if((PINF.2==0)&&(PINF.7==0))
{
PORTB.6=0;
}
else PORTB.6=1;

if((PINF.3==0)&&(PINF.4==0))
{
PORTB.7=0;
}
else PORTB.7=1;
}

if((PINF.1==0)&&(PINF.6==0))
{
PORTE.0=0;
}
else PORTE.0=1;
}


조금 막짠 감이 있어서 수정했습니다. 이거는 50% 동영상에 나왔던 소스입니다. 100% 소스는 댓글 남겨주시면 보내드립니다.