목차
1. 아두이노 개념
2. 아두이노 등장배경
3. 아두이노 코드구조
4. 아두이노 유형과 특징
5. 아두이노 기능
6. 아두이노 활용사례
- 무인자동차
7. 아두이노 실험(실습) 사례
(1) 실험목적
(2) 실험내용
(3) 하드웨어 설명
(4) 소프트웨어 설명
(5) 소스코드
(6) 회로 동작 설명
8. 결론 및 느낀점
2. 아두이노 등장배경
3. 아두이노 코드구조
4. 아두이노 유형과 특징
5. 아두이노 기능
6. 아두이노 활용사례
- 무인자동차
7. 아두이노 실험(실습) 사례
(1) 실험목적
(2) 실험내용
(3) 하드웨어 설명
(4) 소프트웨어 설명
(5) 소스코드
(6) 회로 동작 설명
8. 결론 및 느낀점
본문내용
지하여 안개 속에서 운전할 때 매우 유용하다.
차선이탈방지는 의도하지 않은 차선 이탈 상황을 감지하여 운전자에게 알려주는 시스템으로 내부에 달린 카메라가 차선을 감지한다. 무인자동차에서는 차선을 감지하고 도보와 중앙성을 구분하여 자동차가 차선을 따라 안전하게 움직이는데 사용된다. 주차보조는 후진 일렬주차를 도와주는 시스템으로 운전자가 어시스트 버튼을 탐색한 후 후진기어를 넣고 브레이크
페달을 밟으면 자동차가 스티어링을 조절하여 후진 일렬주차를 해준다. 차량 장착형 센서뿐만 아니라, 인프라 등을 기반으로 출발지에서 주차공간까지 차량을 자동으로 유도하는 것으로 주차 시 불필요하게 소모되는 시간과 에너지를 절약함으로써 소요비용과 환경오염을 최소화하여 쾌적하고 안전하면서도 편리성을 향상시킨다. 무인자동차가 이 기술을 사용하면 길가에 스스로 일렬주차할 수 있다.
자동주차는 운전자가 주차장 앞에 차를 정지시킨 뒤 엔진을 끄고 내려 리모콘 잠금 스위치를 2회 연속으로 누르면 자동주차가 된다. 원리는 자동차에 설치된 카메라가 차고 반대편 벽에 미리 붙여놓은 반사경을 탐지하고, 적정한 접근 경로를 계산하여 스스로 주차를 하며, 무인자동차에 사용하면 스스로 정해진 주차구역에 주차가 된다. 사각지대 정보안내는 자동차 양 측면에 장착된 센서가 사이드미러로 보이지 않는 사각지대에 자동차가 있는지를 판단하여 운전자에게 경고를 해주는 시스템이다. 무인자동차에서는 복잡한 도로 상황에서 양 측면의 장애물 및 차량을 확인하여 차선을 변경하는 용도로 사용된다.
7. 아두이노 실험(실습) 사례
(1) 실험목적
버튼을 눌렀을 때 LED가 깜빡거리는 것이 아니라 천천히 밝아지고 어두워지는 fading동작을 한다. 버튼에서 손을 때면 바로 LED동작이 중단된다.
(2) 실험내용
-부품 설명 : Arduino BOE Shield, LED, 저항 220Ω, 저항 10kΩ, 점프 와이어, USB 케이블, 버튼
-동작 원리 : millis()라는 함수를 이용하여 보드가 켜진 시간을 저장하여 버튼이 눌려진 상태에서는 저장된 시간을 1020으로 나눈 나머지를 기준으로 그에 따라 밝기가 변하게 된다.
-회로 블록도 :
(3) 하드웨어 설명
-Arduino BOE Shield : 기존의 Arduino에 B/B와 서보포트를 첨가하여 실습에 용이하게 해준 키트
-LED : 발광 다이오드, 올바른 방향으로 전류를 흘려주면 발광한다.
-저항 220Ω: 너무 강한 전류가 흐르지 않도록 해준다.
-저항 10kΩ: 버튼이 닫혔을 때 전류가 GND로 가지 않고 IN으로 가게 해준다.
-점프와이어 : B/B 판 상의 이어지지 않는 회로를 이어준다.
-USB케이블 : 컴퓨터와 Arduino를 연결시켜 전원을 공급하거나 프로그램을 삽입한다.
-버튼 : 버튼을 눌렀을 때만 전류가 흐르게 해준다.
(4) 소프트웨어 설명
-소프트웨어 설명: Arduino라는 프로그램에서 AnalogWrite와 millis라는 함수를 사용한다. AnalogWrite란 전원을 빠르게 On/Off 하여 마치 아날로그 신호를 보내는 것 같은 효과를 주어 LED의 밝기를 쉽게 조절할 수 있다. millis를 사용하여 시간의 흐름에 따라 밝기에 변화를 줄 수 있다.
-플로우차트
(5) 소스코드
int button = 9;
int led = 3;
int bs = 0;
long pressTime = 0;
long time=0;//변수 선언
void setup()
{
pinMode(button, INPUT);
pinMode(led, OUTPUT);
/*9번 핀을 입력으로 설정하고,
3번 핀을 출력으로 설정한다. */
}
void loop()
{
if(time%1020<512)
{
//시간을 1020으로 나눈 나머지가 512보다 작을때
if(digitalRead(button))
{
time = millis()%1020;
analogWrite(led,time/2);
/*버튼이 눌려있다면 나머지에 비례하는
밝기 만큼을 출력한다.*/
}
else
{
time = 0;
analogWrite(led,0);
//버튼을 때면 시간을 초기화하고 LED를 끔
}
}
else
{
if(time%1020>511)
{
//시간을 1020으로 나눈 나머지가 511보다 클때
if(digitalRead(button))
{
time = millis()%1020;
analogWrite(led,(1020-(time))/2);
/*버튼이 눌려있다면 1020에서 나머지를 뺀 값에 비례하는 밝기를 출력한다.(나머지가 클수록 어두워짐)*/
}
else
{
time = 0;
analogWrite(led,0);
//버튼을 때면 시간을 초기화하고 LED를 끔
}
}
else
{
time=0;
/*시간을 1020으로 나눈 나머지가 511보다 크지 않으면 시간을 초기화한다.*/
}
}
}
(6) 회로 동작 설명
1. 9번 핀을 입력으로 설정하고, 3번 핀을 출력으로 설정한다.
2. 시간을 1020으로 나눈 나머지가 512보다 작을 때
2-1. 버튼이 눌려있다면 나머지에 비례하는 밝기만큼을 출력한다.
2-2. 버튼을 때면 시간을 초기화하고 LED를 끈다.
3. 시간을 1020으로 나눈 나머지가 511보다 클 때
3-1. 버튼이 눌려있다면 1020에서 나머지를 뺀 값에 비례하는 밝기를 출력한다.(나머지가 클수록 어두워짐)
3-2. 버튼을 때면 시간을 초기화하고 LED를 끈다.
3′. 시간을 1020으로 나눈 나머지가 511보다 크지 않으면 시간을 초기화한다.
8. 결론 및 느낀점
아두니오 보고서를 작성하며 제일 처음 느낀 놀라운 점은 우리 주변의 사소한 사물들이 다 아두이노를 통한 프로그래밍으로 인해 작동한다는 것이었다. 실험 도중에 소스 값을 입력할 땐 수업을 통해 프로그래밍을 조금 배워두어서 어떤 소스 값이 어떤 작용을 하는지 알 수 있었다. 그리고 프로그래밍을 정작 배울 땐 실감이 나지 않았는데, 실험을 통해 실제로 프로그래밍을 통하여 무언가를 조작을 할 수 있다는 것에 놀라움이 끊이지 않았다. 그리고 제어란 게 거창한 게 아닌, 조그마한 것들도 다 ‘제어’란 것에 그 쪽 분야에 대한 관심이 더욱 생겼다.
차선이탈방지는 의도하지 않은 차선 이탈 상황을 감지하여 운전자에게 알려주는 시스템으로 내부에 달린 카메라가 차선을 감지한다. 무인자동차에서는 차선을 감지하고 도보와 중앙성을 구분하여 자동차가 차선을 따라 안전하게 움직이는데 사용된다. 주차보조는 후진 일렬주차를 도와주는 시스템으로 운전자가 어시스트 버튼을 탐색한 후 후진기어를 넣고 브레이크
페달을 밟으면 자동차가 스티어링을 조절하여 후진 일렬주차를 해준다. 차량 장착형 센서뿐만 아니라, 인프라 등을 기반으로 출발지에서 주차공간까지 차량을 자동으로 유도하는 것으로 주차 시 불필요하게 소모되는 시간과 에너지를 절약함으로써 소요비용과 환경오염을 최소화하여 쾌적하고 안전하면서도 편리성을 향상시킨다. 무인자동차가 이 기술을 사용하면 길가에 스스로 일렬주차할 수 있다.
자동주차는 운전자가 주차장 앞에 차를 정지시킨 뒤 엔진을 끄고 내려 리모콘 잠금 스위치를 2회 연속으로 누르면 자동주차가 된다. 원리는 자동차에 설치된 카메라가 차고 반대편 벽에 미리 붙여놓은 반사경을 탐지하고, 적정한 접근 경로를 계산하여 스스로 주차를 하며, 무인자동차에 사용하면 스스로 정해진 주차구역에 주차가 된다. 사각지대 정보안내는 자동차 양 측면에 장착된 센서가 사이드미러로 보이지 않는 사각지대에 자동차가 있는지를 판단하여 운전자에게 경고를 해주는 시스템이다. 무인자동차에서는 복잡한 도로 상황에서 양 측면의 장애물 및 차량을 확인하여 차선을 변경하는 용도로 사용된다.
7. 아두이노 실험(실습) 사례
(1) 실험목적
버튼을 눌렀을 때 LED가 깜빡거리는 것이 아니라 천천히 밝아지고 어두워지는 fading동작을 한다. 버튼에서 손을 때면 바로 LED동작이 중단된다.
(2) 실험내용
-부품 설명 : Arduino BOE Shield, LED, 저항 220Ω, 저항 10kΩ, 점프 와이어, USB 케이블, 버튼
-동작 원리 : millis()라는 함수를 이용하여 보드가 켜진 시간을 저장하여 버튼이 눌려진 상태에서는 저장된 시간을 1020으로 나눈 나머지를 기준으로 그에 따라 밝기가 변하게 된다.
-회로 블록도 :
(3) 하드웨어 설명
-Arduino BOE Shield : 기존의 Arduino에 B/B와 서보포트를 첨가하여 실습에 용이하게 해준 키트
-LED : 발광 다이오드, 올바른 방향으로 전류를 흘려주면 발광한다.
-저항 220Ω: 너무 강한 전류가 흐르지 않도록 해준다.
-저항 10kΩ: 버튼이 닫혔을 때 전류가 GND로 가지 않고 IN으로 가게 해준다.
-점프와이어 : B/B 판 상의 이어지지 않는 회로를 이어준다.
-USB케이블 : 컴퓨터와 Arduino를 연결시켜 전원을 공급하거나 프로그램을 삽입한다.
-버튼 : 버튼을 눌렀을 때만 전류가 흐르게 해준다.
(4) 소프트웨어 설명
-소프트웨어 설명: Arduino라는 프로그램에서 AnalogWrite와 millis라는 함수를 사용한다. AnalogWrite란 전원을 빠르게 On/Off 하여 마치 아날로그 신호를 보내는 것 같은 효과를 주어 LED의 밝기를 쉽게 조절할 수 있다. millis를 사용하여 시간의 흐름에 따라 밝기에 변화를 줄 수 있다.
-플로우차트
(5) 소스코드
int button = 9;
int led = 3;
int bs = 0;
long pressTime = 0;
long time=0;//변수 선언
void setup()
{
pinMode(button, INPUT);
pinMode(led, OUTPUT);
/*9번 핀을 입력으로 설정하고,
3번 핀을 출력으로 설정한다. */
}
void loop()
{
if(time%1020<512)
{
//시간을 1020으로 나눈 나머지가 512보다 작을때
if(digitalRead(button))
{
time = millis()%1020;
analogWrite(led,time/2);
/*버튼이 눌려있다면 나머지에 비례하는
밝기 만큼을 출력한다.*/
}
else
{
time = 0;
analogWrite(led,0);
//버튼을 때면 시간을 초기화하고 LED를 끔
}
}
else
{
if(time%1020>511)
{
//시간을 1020으로 나눈 나머지가 511보다 클때
if(digitalRead(button))
{
time = millis()%1020;
analogWrite(led,(1020-(time))/2);
/*버튼이 눌려있다면 1020에서 나머지를 뺀 값에 비례하는 밝기를 출력한다.(나머지가 클수록 어두워짐)*/
}
else
{
time = 0;
analogWrite(led,0);
//버튼을 때면 시간을 초기화하고 LED를 끔
}
}
else
{
time=0;
/*시간을 1020으로 나눈 나머지가 511보다 크지 않으면 시간을 초기화한다.*/
}
}
}
(6) 회로 동작 설명
1. 9번 핀을 입력으로 설정하고, 3번 핀을 출력으로 설정한다.
2. 시간을 1020으로 나눈 나머지가 512보다 작을 때
2-1. 버튼이 눌려있다면 나머지에 비례하는 밝기만큼을 출력한다.
2-2. 버튼을 때면 시간을 초기화하고 LED를 끈다.
3. 시간을 1020으로 나눈 나머지가 511보다 클 때
3-1. 버튼이 눌려있다면 1020에서 나머지를 뺀 값에 비례하는 밝기를 출력한다.(나머지가 클수록 어두워짐)
3-2. 버튼을 때면 시간을 초기화하고 LED를 끈다.
3′. 시간을 1020으로 나눈 나머지가 511보다 크지 않으면 시간을 초기화한다.
8. 결론 및 느낀점
아두니오 보고서를 작성하며 제일 처음 느낀 놀라운 점은 우리 주변의 사소한 사물들이 다 아두이노를 통한 프로그래밍으로 인해 작동한다는 것이었다. 실험 도중에 소스 값을 입력할 땐 수업을 통해 프로그래밍을 조금 배워두어서 어떤 소스 값이 어떤 작용을 하는지 알 수 있었다. 그리고 프로그래밍을 정작 배울 땐 실감이 나지 않았는데, 실험을 통해 실제로 프로그래밍을 통하여 무언가를 조작을 할 수 있다는 것에 놀라움이 끊이지 않았다. 그리고 제어란 게 거창한 게 아닌, 조그마한 것들도 다 ‘제어’란 것에 그 쪽 분야에 대한 관심이 더욱 생겼다.
추천자료
원격교육을 바탕으로 평생학습 사회를 촉진하기 위한 원격교육 활용방안
[원격교육][미국 원격교육 사례][한국 원격교육 사례]원격교육의 개념, 원격교육의 특징과 원...
재량활동(교육과정) 인성교육과 통일교육 사례, 재량활동(교육과정) 성교육과 에너지교육 사...
웹기반수업(웹기반교육,학습, WBI)의 개념과 유형, 웹기반수업(웹기반교육,학습, WBI)의 특징...
교수학습자료(교육자료) 필요성과 영역, 교수학습자료(교육자료) 제작과 활용, 교수학습자료(...
과학과(과학과교육) 탐구학습 인지갈등학습과 관찰학습, 과학과(과학과교육) 탐구학습 발견학...
수학과교육(수업) 수준별학습지도, 문제해결학습지도, 수학과교육(수업) 개념형성학습지도, ...
말하기듣기교육(말하기듣기지도)의 특징과 원리, 말하기듣기교육(말하기듣기지도)의 내용과 ...
정보통신망 C형 드론 - Drone에 관하여 조사하고 Drone에 활용될 수 있는 정보통신 기술에 ...
소개글