반응형

【 아두이노초급#5포토레지스터 CDS사용 입·출력 실습 

1

 

 CDS(Cadmium Sulfide : 황화카드뮴 소자)또는 포터 레지스터(Photo Resistor)라 불리는 센서를 가지고 아두이노 입출력 실습을 진행합니다.

▶ 주요 내용
- CDS에 대한 개념, 동작원리
- PWM(pulse width modulation) 정의와 아두이노에서 사용 방식
- 아두이노에서의 입력함수, 출력함수에 대한 사용방법 정리
     [ analogRead ( ) , analogWrite ( ) , digitalRead ( ) , digitalWrite ( ) ]
- CDS 신호 처리 하여, LED의 밝기 조절에 대한 아두이노 코딩과 실습

 CDS는 기본적으로 저항의 역할을 합니다.   그래서, 아래 CDS의 기호에 저항의 이미지가 들어가 있죠. 
그리고, 기호에 보면, 외부로부터의 빛을 받아들이는 것을 의미하는 화살표로 구성되어 있듯이, 빛에 따라 저항값이 바뀌는 특성이 있는 소자입니다.

CDS 센서의 기호

주변이 밝아 센서 표면에 유입되는 빛이 많을수록 저항값이 0Ω에 가까워지고(약 1㏀),  주변이 어두울수록 저항값이 급격하게 커지는(약 10MΩ) 특성을 가집니다.
이런 특성을 이용하면 빛의 밝기를 이용해서, 입력되는 전압(전류)의 크기를 제어할 수 있습니다.
아래에 보이는 회로를 참고하여 CDS 및 기타 부품들을 준비하고 회로를 연결해 주세요.  (CDS 종류나 크기에 상관없이 준비된 것으로 연결하면 됩니다.)

동작 원리를 설명드리면, 적당한 빛이 있을 때 CDS는 특정한 저항값을 가지게 되며,  CDS와 함께 직렬로 연결된 10㏀의 저항에 5V의 전압이 분배되어 걸리게 됩니다.

만약, CDS 주변의 밝기가, CDS의 저항값을 10㏀으로 변화시켰다면,  그래서, 직렬로 연결된 10㏀의 저항과 같은 값이 될 경우,  공급되는 5v 전압은 CDS와 저항 각각에 1/2로 분배되어, 2.5v의 전압이 A0로 입력됩니다. (아래 그림)

 

 그런데, CDS 주변을 아주 밝게 하여 CDS의 저항값이 거의 0Ω에 이르렀다면,  5v의 전원이 10㏀에 모두 걸리게(강하) 되고, 그러면 A0에 이 5v의 전압이 입력되게 됩니다. (아래 그림)

 

 

 그리고 만약, 주변을 아주 어둡게 하여 CDS의 저항값이 거의 수십㏁에 이르렀다면,  직렬연결된 10㏀의 저항값은 CDS의 저항값에 비해 무시할 정도로 작게 되고, 5v의 전원 대부분이 CDS에 걸리게(전압강하) 되어, 이 부분의 전위는 0v (GND)에 가깝게 됩니다. (아래)

이런 원리로, CDS 주변의 밝기에 따라 A0 포트로 0v ~ 5v 사이의 전압이 입력됩니다. 
아두이노의 Analog 입력 포트(A0~A5) 쪽에는 입력된 아날로그 전압 값을 디지털 값으로 변환시켜주는 A/D Converter가 내장되어 있습니다.
우노(나노)에 들어 있는 A/D Converter는 10bit의 분해능(해상력)을 가지고 있는데, 10bit는 2의 10승, 즉 1024의 값이며 아날로그 포트(A0~A5)로 입력되는 0v~5v의 전압을 0~1023의 수치로 변환받을 수 있게 됩니다. (아래)

이때, 아날로그 포트로 아날로그 값을 읽어 들이기 때문에, analogRead(pin)라는 함수를 사용합니다.

이렇게 읽어 들인 수치(0~1023)를 가지고 if 비교문 등을 이용해서, 디지털 포트에 연결된 LED를 켜고 끄거나, 밝기(PWM)를 조절할 수 있습니다.

아두이노의 입출력 함수에 대해 한 번 정리해 드릴게요.
아날로그 포트는 0~5v의 전압을 입력만 받을 수 있는 포트입니다. 따라서 하드웨어적으로 아날로그 포트로 출력은 할 수 없습니다.  아날로그 포트로 데이터(전압)를 입력받을 때는 ‘analogRead ( )’함수를 사용합니다. 



아두이노 디지털 포트로는 입력과 출력이 가능하며,  디지털 포트를 통해 데이터(전압)를 입력 받을 때는‘digitalRead( )’함수를 사용하고,  출력할 때는,‘digitalWrite( )’함수를 사용합니다. 
또한, PWM 방식을 통해 아날로그적인 값(전압)을 디지털 포트로 출력하고자 할 때는 ‘analogWrite( )’함수를 사용합니다.  ( 단, ~기호가 붙은 11, 10, 9, 6, 5, 3번 핀들만 가능합니다 )   (아래)

 

High 신호일 때는 5v 출력을 하고,  Low 신호일 때, 0v 로만 출력시킬 수 있습니다. 
그래서 0v~5v 사잇값 출력이 안 되어 LED 밝기 조절이 안 되고, On/Off 만 하게 됩니다. 
그런데, PWM(pulse width modulation)이라는 방식을 이용하면 마치 아날로그처럼 0v~5v 사잇값을 출력시킬 수 있습니다. 
PWM 방식은 펄스 형태로 High와 Low 신호의 비율(듀티비)을 조절하여 출력하는 방식이며 High 신호의 비율이 높을수록 평균 전압이 5v에 가까워지고, 낮을수록 0v에 가까워집니다.  
그래서, 듀티비를 조절하여 아날로그처럼, 0v~5v 사잇값도 출력할 수 있게 됩니다. 
이런 방법으로 LED의 밝기를 조절할 수 있게 됩니다.

듀티비(Duty)가 높을수록 높은 전압이 출력되고, 낮을수록 낮은 전압이 출력됩니다.
(듀티비 100% : 5v ,  듀티비 50% : 2.5v ,  듀티비 0% : 0v)

당연히 전압이 높을 때, LED가 밝고,  낮은 전압일 때, LED가 어둡게 켜집니다.

아두이노에는 이런 PWM 출력을 할 수 있는 포트가 정해져 있는데요, 포트 번호 옆에 ~ 물결무늬 표시가 있는 포트만 PWM 출력이 가능합니다.  일반적인 디지털 포트 출력은 digitalWrite( pin , value ) 명령어를 사용합니다.

Value가 HIGH 일 때는 5v의 전압이 출력되고, LOW 일때는 0v로 출력되어,    LED가 최대로 밝거나 혹은, LED가 꺼져있는 두 가지 형태만 가능합니다. 


그런데, ~PWM 포트에는 digitalWrite(  ) 명령어뿐 아니라, analogWrite(pin, value)라는 명령어를 사용할 수 있습니다. 
pwm 디지털 포트의 출력은 8bit로 이루어지기 때문에, 최대 2의 8승 값인 256, 즉, 0 ~ 255 사잇값을 value 값으로 출력해 줄 수 있고, 0이면 LED가 제일 어두우며(꺼짐), 127은 중간값, 255 일 때 최대 밝기가 됩니다. 
이렇게 해서 디지털 포트로 밝기 조절과 같은 아날로그 적인 출력 표현이 가능합니다. (아래)

아두이노 코드는 아래를 참고하거나 직접 다운로드하여 보세요.

int LED=9;    //우노에서는 디지털 포트는 숫자만 입력함
int LIGHT=A0; //아날로그 포트는 A0, A1,...형태로 입력함
int val=0;
int fix=0;
void setup() {
 pinMode(LED,OUTPUT);
 Serial.begin(9600);
}
void loop() {
 val=analogRead(LIGHT); 
 int val2 = map(val,0,340,255,0); 
 int val3 = constrain(val2,0,255);
 Serial.println(val3); 
 analogWrite(LED,val3);    
// delay(100);
}

 아두이노 파일입니다.  다운로드한 후 압축을 풀어서 사용하세요.

CDS.zip
0.00MB

CDS는 크기별 종류가 있으며, 5pi(5mm), 7pi, 10pi, 20pi ... 

이미지 참조 : www.societyofrobots.com


제조사별 및 품번 별로도 약간의 다른 특성을 지니고 있는데요,
빛에 따라 반응하는 저항값의 범위가 조금 다르고, 허용 최대 전압이 조금 다를 뿐이어서 이런 실험에서는 크기나 종류에 크게 영향이 없으니 어떤 것이든 실습에 사용하면 됩니다.

그럼, CDS를 연결해 주고, 코드를 빌드&업로드해 주세요. 
시리얼 모니터를 열어보면, 현재 주변의 밝기에 따른 입력값이 나오는 것을 볼 수 있습니다. 
그리고 손으로 가려보면, 수치가 작아지고, 오픈하면 수치가 올라갑니다. 
빛에 노출되는 정도에 따라, 수치가 변하는 것을 볼 수 있는데요,  수치는 CDS의 종류에 따라 달라지기도 하지만, 현재 놓인 장소의 밝기에 따라 달라지게 됩니다. 



그럼, 다른 종류의 CDS도 있으면 바꾸어 실험해 보세요.  
CDS의 종류에 따라서도 입력되는 값의 범위가 다름을 알 수 있습니다. 
따라서, 제공해드리는 코드를 그대로 사용하지 말고, 한 가지 변경해 주어야 하는데요,
밝기의 최소·최대 값 범위를 확인해서, LED의 출력 값 범위와(0~255)와 매핑(매칭)을 시켜야 합니다.  
이렇게 하여야, 현재 주변의 밝기에 따라 LED의 밝기 조절을 최대로(0~255) 할 수 있게 됩니다. 
이를 위해 화면에 보이는 매핑 함수를 사용합니다. 

'값'에는, CDS로부터 값이 입력되는 변수를 써주고,  fromLow, fromHigh 두 자리에는 CDS를 어둡게 했을 때의 최솟값과 밝게 했을 때의 최댓값을 적으세요. 
그리고, toLow, toHigh 두 자리에는 LED의 최대 범위 0과 255를 각각 적습니다. 
그리고, 매핑된 값을 시리얼 모니터로 확인해 보기 위해, val2로 바꾸어 주세요. 
코드는 순차적으로 컴파일되기 때문에, Serial.println(val2)는 val2 변수 선언 이후로 내려 주세요. 
그럼, 컴파일&업로드해서 확인해 보세요. 
약간의 오차가 있겠지만 0~255 범위를 크게 벗어나지 않을 거예요. 
그리고, 좀 더 나아가서 아예 0보다 작고 255보다 큰 값들은 제거해 버리도록 constrain( ) 함수를 써서 처리할 수 있어요.
constrain( ) 처리한 값은 val3에 저장하고,  마찬가지로 serial.println(val3) 문장을 val3선언 이후로 내려주면 됩니다. 
다시 업로드해서 값을 확인해 보세요. 


constrain( val3, 0, 255 ) 처리를 하면, 해당 값 이하(0)와 이상(255)은 잘라버리기 때문에,  해당 값 이외의 숫자가 나오면 안 되는 경우에 활용하면 좋습니다.   
이렇게 하면, LED 밝기를 최대 범위(0~255 : 0v~5v)로 컨트롤할 수 있습니다. 

 만약, CDS가 바뀌거나 실험 장소가 바뀌면 다시 A0로 입력되는 값을 실측해서 적용해 주어야 합니다.
첨부해드린 코드에는 , CDS주변이 어두우면 LED가 점점 어두워지고, 주변이 밝으면 LED가 밝게 작동하는데요,
이 작동을 반대로 하려면,“map( val, 최솟값, 최댓값, 255, 0 )”으로 LED값을 반대로 해주면 됩니다. 

이상으로 포터레지스터 소자인 CDS에 대한 아두이노 입출력 실습을 진행했습니다.
감사합니다.

【 실습과정 영상으로 보기 】

 

반응형
반응형

【 아두이노초급#4-2 아두이노 초급 강좌! #05 "아날로그 입출력하기 2편"( Arduino for Absolute beginner! )

아날로그 입출력 2편

 

- 가변저항을 돌리면 LED의 밝기가 조절되는 실습입니다.

- 아두이노에서 가변저항을 통해 아날로그 데이터를 입력받아서,  PWM(Pulse Width Modulation) 제어를 통해 LED로 밝기 조절이 되는 출력(아날로그 형태의 출력)을 해보는 실습입니다. 

- 아두이노는 기본적으로 디지털 장치여서 아날로그 출력이 되지 않습니다.  하지만, PWM 출력을 통해 아날로그와 같은 출력 효과를 낼 수 있습니다.  

- 가변저항의 전압값은 아두이노 Analog port (A0~A5)로 입력 받으면,  아두이노 내부에 10bit ADC (아날로그를 디지털로 변환하는 회로) 컨버터에 의해 즉, 2의 10승 (0~1023) 의 데이터를 입력 받게 됩니다.  그러면, 이 데이터를 가지고 8bit 의 출력을 지원하는 디지털 포트 (D2~D13)에 출력을 내보낼 수 있습니다.  이때, PWM(펄스 폭 변조) 신호 형태의 출력을 행하면 0V~5V 사이의 전압 형태로 출력을 조절 할 수 있어 아날로그식의 출력으로 활용 할 수 있게 됩니다. 
다만,  이런 PWM 출력 기능을 지원하는 디지털핀은 몇 개 정해져 있는데요,  아두이노 디지털포트 숫자 옆에 '~' 물결 무늬가 붙어 있는 단자가 바로 PWM출력 기능을 지원하는 단자입니다.  ( ~3, ~5, ~6, ~9, ~10 , ~11)  

- 이때,  입력값은 10비트인 2의 10승 (0~1023) 값이고, 출력값은 8비트인 2의 8승(0~255) 값이여서,   입력값과 출력값을 매칭시켜 주면 좋은 데요, 이를 지원하는 함수가 바로 매핑함수인 map ( ) 함수 입니다. 

 '값' 영역에는 수시로 변하는 입력 받는 변수를 넣고,   fromLow~fromHigh 는 0~1023 대입,  toLow~toHigh 는 0~255 를 대입하면 됩니다.   즉,  map(Value, 0, 1023, 0, 255);  이런 형태로 함수를 사용하면,  0~1023의 변화 값이 0~255의 변화값으로 대응(매칭이)되어 출력이 됩니다. 


【 이전 영상 보기 

 아두이노쌩초보 영상 #4  ☜ 클릭!
 아두이노쌩초보 영상 #3  ☜ 클릭!

 아두이노쌩초보 영상 #2  ☜ 클릭!
 아두이노쌩초보 영상 #1  ☜ 클릭!

 

【 실습절차 

1.  아래와 같은 회로를 조립하세요 ( 연결도 )

아날로그 입출력 연결도면

 

2. 부품준비
 -  아두이노 (우노)  x 1 개
 - 가변저항 또는 반고정 저항 1 개 (용량은 크게 상관 없음)

 3. 주의 사항
 - 가변저항의 가운데 핀을 반드시 아두이노의 A0 포트에 연결해 주어야 합니다. 

 

【 아두이노 코드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int VAR = 0
int LED = 11;
int LEDVar = 0;
void setup() {
  Serial.begin(9600); // 시리얼통신 사용선언
  pinMode(LED,OUTPUT);
}
void loop() {  
  VAR = analogRead(A0); 
  LEDVar = map(VAR,0,1023,0,255);
  Serial.println(LEDVar);
  analogWrite(LED, LEDVar);   
  delay(100);
}
 
cs


▶ 코드 다운로드

AnalogInOut_LED.zip
0.00MB


[ PWM 개념도 ]
디지털 보드인 아두이노에서는 아날로그 신호(전압)를 출력할 수 없는데요,
아래와 같이 PWM 방식을 이용하여 아날로그 출력을 보내어 LED 밝기 조절과 같은 할 수 있게 됩니다.

【 동작확인 및 강의 영상 

 아두이노를 처음 접하는 분들을 대상으로 자세하게 설명을 드리는 강의 영상입니다. 

 

 

반응형
반응형

【 아두이노초급#4-1 아두이노 초급 강좌! #04 "아날로그 입출력하기 1편"(Arduino for Absolute beginner!)

아두이노 아날로그 입출력 1편

 

 - 아두이노에서 아날로그 데이터를 입력받는 과정과 처리에 대해 설명합니다. 
 - 아두이노 Analog port (A0~A5)로 가변저항을 이용해서 데이터를 입력 받으면,  아두이노 내부에 10bit ADC (아날로그를 디지털로 변환하는 회로) 컨버터에 의해 즉, 2의 10승 (0~1023) 의 데이터를 입력 받게 됩니다.  
   이를 아두이노 IDE의 시리얼 모니터를 통해 확인할 수 있는 실습입니다.  
  이번 실습은 이어지는 다음 실습과 연결되어 있으니 바로 이어서 실습해 보세요. 
[ 이어지는 다음실습 :  rasino.tistory.com/317
 ] 

【 이전 영상 보기 

 아두이노쌩초보 영상 #3  ☜ 클릭!
 아두이노쌩초보 영상 #2  ☜ 클릭!
 아두이노쌩초보 영상 #1  ☜ 클릭!

 

【 실습절차 

1.  아래와 같은 회로를 조립하세요 ( 연결도 )

2. 부품준비
 -  아두이노 (우노)  x 1 개
 - 가변저항 또는 반고정 저항 1 개 (용량은 크게 상관 없음)

 3. 주의 사항
 - 가변저항의 가운데 핀을 반드시 아두이노의 A0 포트에 연결해 주어야 합니다. 

 

【 아두이노 코드 

int VAR = 0; 
void setup() {
  Serial.begin(9600); // 시리얼통신 사용선언
}
void loop() {  
  VAR = analogRead(A0); 
  Serial.println(VAR);
  delay(100);
}

▶ 코드 다운로드 

AnalogInOut_basic.zip
0.00MB

【 동작확인 및 강의 영상 

 

 

반응형
반응형

【 아두이노쌩초보#3 아두이노 완존 초보를 위한 강좌! #03 ( Arduino for Absolute beginner! )

 아두이노를 처음 접하는 분들을 대상으로 자세하게 설명을 드리는 강의 영상입니다. 

 - 아날로그와 디지털의 차이 및 개념에 대해 설명합니다.

 - 디지털 보드인 아두이노에서 아날로그 출력을 위한 analogWrite( ) 함수에 대해 다룹니다. 

 - PWM의 개념과 충력에 대해 설명합니다.  

[ 내용 설명 ]

 - 아날로그 시계는 시간과 분, 초가 각각 그 사이 사이를 움직이고 있으며 이를 관찰 할 수 있습니다.

   반면에, 디지털 시계는 그 사이 값의 이동 없이 특정값으로 바로 바뀌는 것을 알 수 있습니다.

 - , 아날로그는 어떤 양이나 데이터를 연속적으로 표현되는 것을 말하고 , 디지털은 비연속적이며,

   On Off, 01과 같은 2진 데이터로 표현되는 것을 말합니다.

 

 - 아두이노와 같은 보드는 내부적으로 디지털로 처리되기 때문에 입력받는 아날로그 신호를 디지털로 변환하거나,      

   디지털신호를 아날로그 형태로 표현해주는 역할이 필요하게 됩니다.

 

 - 예를 들어 디지털에서는 기본적으로 모터와 전등을 켜고 끄는 것만 가능합니다. 하지만, 볼륨조절 스위치와 같은 것을 돌려서 모터의 속도를 제어하거나, 전등의 밝기를 점점 밝게 또는 점점 어둡게 제어 하고자 할 때가 있습니다. 이때, 필요한 것이 바로 PWM 제어입니다.

 - PWM은 디지털신호를 아날로그화 시켜주는 것인데, PULS WIDTH MODULATION의 약자로서, HIGH신호의 펄스폭을 조절하여 구현하는 방식입니다.

 - 같은 시간에 HIGH 신호가 길면 최대출력이 되어 전등이 제일 밝을 것이며, HIGH신호 비율이 줄어들수록 평균적인 출력신호가 낮아져 전등이 어두워지게 됩니다.

 - 아두이노에서 이런 PWM방식으로 출력을 내보낼 수 있는 포트가 정해져 있습니다.

 - 출력 포트에 ~물결 표시가 있는 3, 5, 6, 9, 10. 11번 포트가 바로 그것입니다.

 - 일반적으로 ON OFF와 같은 출력조절에서 사용하는 명령어로 digitalWrite()를 사용하게되며,

 - PWM 포트를 통해 아날로그 형태로 출력을 내보내는 함수로 analogWrite()를 사용하게 됩니다.

 - 아두이노 코드는 LED가 점점 밝아진 후 다시 점점 어두워지기를 반복하도록 코드를 구성하였습니다.

 

【 이전 영상 보기 

 아두이노쌩초보 영상 #2  ☜ 클릭!

 아두이노쌩초보 영상 #1  ☜ 클릭!

 

 

【 다음 영상 보기 

▷ 아두이노쌩초보 영상 #x  ☜ 클릭!

 

【영상 강의 보기-YouTube

 

 

[ 강의 내용 요약 ]

1. 부품 준비

 

2. 회로 연결

 

3. 아두이노 코드

int led = 11;           //  11번 포트를 LED 전역변수로 선언
int brightness = 0;     // LED 밝기 0으로 초기화
int fadeAmount = 5;     // LED 밝기 조절 간격 ‘5’로 설정  
void setup ( ) {
}
void loop ( ) {   
 analogWrite(led, brightness);   // 11번 핀의 밝기 설정 
 brightness = brightness + fadeAmount; // fadeAmount 값 만큼 반복 증가
 if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;  // -부호를 붙여 최대로 밝아지면 어두워지도록 전환
  }  // brightness <= 0 || brightness >= 255
 delay(30);    // 0.03초 시간지연 (LED 밝기가 변화할 수 있는 시간을 부여) 
}

 

 

 

4. 동작확인

: LED가 점점 밝아지고,  다시 점점 어두워지기를 반복한다. 

 

 

오늘 학습내용은 여기까지 이며,  다음 학습영상을 기대해주세요~

감사합니다. ~~~ ^^

 

 

=== 아두이노 에러 대처 법 ===

1. 흔히 저지르기? 쉬운 에러 상황 #1

 - 두 단어의 조합으로 구성된 아두이노의 명령어는 두 번째 단어 첫 문자를 대문자로 표시하여 정해 놓았다.

 - 대·소 문자를 구분하지 않아 아래와 같은 에러를 발생시키는 경우가 종종 있다.

 

2. 흔히 저지르기? 쉬운 에러 상황 #2

 - 한 줄 코드 끝부분에는 반드시 ';' 세미콜론을 넣게 되어 있으나, 이를 빼먹는? 경우가 종종 발생한다.

 

===  아두이노 코딩을 잘하는 비결  ===

 :  (#1) 책이나 교재 혹은 타인의 코드를 그대로 따라 해보고 동작이 되었다고 해서 바로 다음 과제로 넘어가지 마라! 

 에러 없이 동작된 코드를 놓고, 궁금한 부분을 이리저리 만저보면서 변경해보는 실험들을 스스로 충분히 해보아야 한다. 대부분의 경우 동작만 성공한 것이지 특정 코드부분을 이해하지 못한채 새로운 코드를 학습하게 되기 때문이다. 물론 여러번 해봐도 완벽히 이해되지 않을 때는 우선 넘어가도 좋다.  이럴때는 나중에 다시 이해할 수 있는 기회가 생긴다. 

 

   (#2)  아두이노 공부를 하면서 닥쳐오는 수많은 에러에 스트레스를 받지 마라~!  

   근력운동할 때 괜시리 무겁고 버거운 기구를 드는게 아니듯, 발생되는 각종 다양한 에러를 경험하고 찾아내는 과정 속에서 여러분의 코딩 근력이 형성된다.   코딩을 배울 때 에러 경험을 많이 하면 할 수록 좋다. 경험하고 학습된 에러는 이후 잘 반복되지 않으며, 경험으로 비추어 쉽게 찾아 낼 수 있기 때문이다.   

 

 

반응형
반응형

【 아두이노쌩초보#2 아두이노 완존 초보를 위한 강좌! #01 ( Arduino for Absolute beginner! )

 아두이노를 처음 접하는 분들을 대상으로 자세하고 세심하게 설명을 드리는 강의 영상입니다. 

 - 아두이노에 푸쉬버튼 스위치를 달고 버튼의 입력을 감지하여 LED를 켜고 끄는 실습을 진행합니다. 

 - 버튼제어는 비록 단순해 보이지만 아두이노를 다루는데 있어 핵심적인 개념입니다.  버튼이라는 입력 조건에 따라 LED라는 출력을 제어하는 개념입니다.   

- 그리고 여기에 필요한 코딩을 연습하고 이해함으로서, 아두이노의 입력에 따른 출력제어라는 중요한 개념이해가 되는 것입니다. 

 - 이 번 개념을 잘 이해하면, 입력에 버튼이 아니라 각종 센서를 대체하고, 출력에 LED가 아니라 모터나, LCD등의 디스플레이 등으로 연결하면, 활용가능성이 무한대로 늘어나고 이를 제어 할 수 있는 기본기를 익히는 것이기 때문에 이후 학습에 있어서 매우 중요하다고 할 수 있습니다. 

 

【 이전 영상 보기

아두이노쌩초보 영상 #1  ☜ 클릭!

 

【 다음 영상 보기 

아두이노쌩초보 영상 #3  ☜ 클릭!

 

【영상 강의 보기-YouTube

https://youtu.be/XhPbvw0vMgE

 

【 아두이노강좌#2】 아두이노 1도 모르고 시작하기! #2 ( Arduino Absolute beginner! 02)

【 아두이노강좌#2】 아두이노 1도 모르고 시작하기! #2 ( Arduino Absolute beginner! 02) - 아두이노 따라하기 #1편 보러가기~! : https://youtu.be/nI7qUIkfqZ4 - 아두이노를 전혀 다루어 보지 않은 사람들을 위한 완전 상세 강의! [ 사전 학습 영상 링크 : 아래 영상을 먼저 시청하면 도움됩니다 ] - (전자기초) : https://www.youtube.com/playlist?list=PLu4Oq

www.youtube.com

 

[ 강의 내용 요약 ]

1. 부품 준비

2. 회로 연결

3. 아두이노 코드

 

4. 아두이노 ↔ PC  시리얼 통신을 위한 포트 선택 확인!

(연결 포트 번호는 사용자 마다 다를 수 있습니다)

 

5. 컴파일과 업로드

 (컴파일 후 에러가 없는지 확인하고 아두이노로 코드를 업로드 합니다) 

 

7. 동작확인

: 푸쉬 버튼을 누를 때 마다(누르고 있는 동안 계속) 불이 들어 오면 정상 동작 하는 것입니다.

오늘 학습내용은 여기까지 이며,  다음 학습영상을 기대해주세요~

감사합니다. ~~~ ^^

 

 

 

=== 아두이노 에러 대처 법 ===

1. 흔히 저지르기? 쉬운 에러 상황 #1

 - 두 단어의 조합으로 구성된 아두이노의 명령어는 두 번째 단어 첫 문자를 대문자로 표시하여 정해 놓았다.

 - 대·소 문자를 구분하지 않아 아래와 같은 에러를 발생시키는 경우가 종종 있다.

 

2. 흔히 저지르기? 쉬운 에러 상황 #2

 - 한 줄 코드 끝부분에는 반드시 ';' 세미콜론을 넣게 되어 있으나, 이를 빼먹는? 경우가 종종 발생한다.

 

===  아두이노 코딩을 잘하는 비결  ===

 :  (#1) 책이나 교재 혹은 타인의 코드를 그대로 따라 해보고 동작이 되었다고 해서 바로 다음 과제로 넘어가지 마라! 

 에러 없이 동작된 코드를 놓고, 궁금한 부분을 이리저리 만저보면서 변경해보는 실험들을 스스로 충분히 해보아야 한다. 대부분의 경우 동작만 성공한 것이지 특정 코드부분을 이해하지 못한채 새로운 코드를 학습하게 되기 때문이다. 물론 여러번 해봐도 완벽히 이해되지 않을 때는 우선 넘어가도 좋다.  이럴때는 나중에 다시 이해할 수 있는 기회가 생긴다. 

 

   (#2)  아두이노 공부를 하면서 닥쳐오는 수많은 에러에 스트레스를 받지 마라~!  

   근력운동할 때 괜시리 무겁고 버거운 기구를 드는게 아니듯, 발생되는 각종 다양한 에러를 경험하고 찾아내는 과정 속에서 여러분의 코딩 근력이 형성된다.   코딩을 배울 때 에러 경험을 많이 하면 할 수록 좋다. 경험하고 학습된 에러는 이후 잘 반복되지 않으며, 경험으로 비추어 쉽게 찾아 낼 수 있기 때문이다.   

 

 

반응형
반응형

《아두이노》아두이노 설치 파일(Ver1.8.10) 최신버전 다운로드 입니다.

 우선, 윈도우 버전과, 맥OS 버전은 아래 바로 다운로드가능 하며, 

기타 리눅스(Linux) 버전은 맨 아래 링크를 클릭하여 다운가능합니다.

  [ 윈도우 Windows 버전 다운로드  ] 

Windows

다운로드 클릭!

windows XP이상 

VISTA, 7 , 8 , 10 모두 가능

  

  [ 맥 OS X 버전 다운로드  ] 

Mac OSX

다운로드 클릭!

Mac OS 10.8 마운틴 라이언(Mountain Lion) 이상버전 모두 가능

 

  [ 기타 Linux 버전 다운로드 ]

https://www.arduino.cc/en/Main/Software

 

Arduino - Software

By downloading the software from this page, you agree to the specified terms. THE ARDUINO SOFTWARE IS PROVIDED TO YOU "AS IS" AND WE MAKE NO EXPRESS OR IMPLIED WARRANTIES WHATSOEVER WITH RESPECT TO ITS FUNCTIONALITY, OPERABILITY, OR USE, INCLUDING, WITHOUT

www.arduino.cc

 

반응형
반응형

【 아두이노쌩초보#1 아두이노 완존 초보를 위한 강좌! #01 ( Arduino for Absolute beginner! )

 아두이노를 처음 접하는 분들을 대상으로 자세하고 세심하게 설명을 드리는 강의 영상입니다. 

【 다음 영상 보기 

아두이노쌩초보 영상 #2  ☜ 클릭!

 

 

【영상 강의 보기-YouTube

https://youtu.be/nI7qUIkfqZ4

 

 

[ 강의 내용 요약 ]

 

1. 아두이노 ↔ PC  시리얼 통신을 위한 포트 선택

 

2. LED를 12포트와 GND에 직접 연결하기

 (LED+리드선을 12번에,  LED-리드선을 GND에 연결) 

 

3. 아두이노의 디지털핀은 입력으로 사용할 것인지? 혹은 출력으로 사용할 것인지?에 대한 

방향을 setup() {  } 함수에서 설정해 주어야 한다.

 

4.  출력방향 설정은 아두이노 내장 명령어인 pinMode( ) 함수를 이용한다.

 - pinMode(핀 번호, 입력/출력 모드) 

 

5. LED를 켜기 위해서는 digitalWrite( )라는 명령어를 사용한다. 

 - digitalWrite(핀 번호, HIGH/LOW 논리값)

 

6.  직접적인 핀 번호 대신 변수를 활용하면 코드 길이가 길고 복잡할 수록 간단히 수정할 수 있고 판독이 쉬워지는 장점이 있다.   

  - int LED = 12;    (int : 정수형 선언으로, 정수 숫자에 해당하는 변수 선언)

 

7. 아두이노 delay( ) 딜레이 함수를 사용하여 LED가 켜고 꺼지는 타이밍을 조절할 수 있다. 

 - delay( ) 함수의 기본 단위는 ms (밀리 세컨드)로 1/1000을 의미 함으로,  1초 시간지연은 'delay(1000)'이라고 표시한다.

 

8. 흔히 저지르기? 쉬운 에러 상황 #1

 - 두 단어의 조합으로 구성된 아두이노의 명령어는 두 번째 단어 첫 문자를 대문자로 표시하여 정해 놓았다.

 - 대·소 문자를 구분하지 않아 아래와 같은 에러를 발생시키는 경우가 종종 있다.

 

9. 흔히 저지르기? 쉬운 에러 상황 #2

 - 한 줄 코드 끝부분에는 반드시 ';' 세미콜론을 넣게 되어 있으나, 이를 빼먹는? 경우가 종종 발생한다.

 

10. 아두이노 코딩을 잘하는 비결 :

 :  (#1) 책이나 교재 혹은 타인의 코드를 그대로 따라 해보고 동작이 되었다고 해서 바로 다음 과제로 넘어가지 마라! 

 에러 없이 동작된 코드를 놓고, 궁금한 부분을 이리저리 만저보면서 변경해보는 실험들을 스스로 충분히 해보아야 한다. 대부분의 경우 동작만 성공한 것이지 특정 코드부분을 이해하지 못한채 새로운 코드를 학습하게 되기 때문이다. 물론 여러번 해봐도 완벽히 이해되지 않을 때는 우선 넘어가도 좋다.  이럴때는 나중에 다시 이해할 수 있는 기회가 생긴다. 

 

   (#2)  아두이노 공부를 하면서 닥쳐오는 수많은 에러에 스트레스를 받지 마라~!  

   근력운동할 때 괜시리 무겁고 버거운 기구를 드는게 아니듯, 발생되는 각종 다양한 에러를 경험하고 찾아내는 과정 속에서 여러분의 코딩 근력이 형성된다.   코딩을 배울 때 에러 경험을 많이 하면 할 수록 좋다. 경험하고 학습된 에러는 이후 잘 반복되지 않으며, 경험으로 비추어 쉽게 찾아 낼 수 있기 때문이다.   

반응형
반응형

 【 아두이노 기초 】 #37 스텝(Step Motor)모터 제어6 (버튼제어)

  지난시간 28BYJ-48 스텝모터와 ULN2003 드라이버 모듈을 가지고 버튼을 이용해 정방향, 역방향 제어를 해 보았다. (버튼1을 누르면 시계방향 1회전, 버튼2를 누르면 반시계방향 1회전)

 이번 시간에는 버튼을 누르고 있는 동안은 계속 회전을 하도록 프로그램을 변경해보자.  버튼을 짧게 누르든 길게 누르든 누르는 순간만큼만 정역 회전을 시켜보려는 것이다.  앞 실습의 내용과 프로그램은 거의 동일하고 두 부분만 변경하면 문제를 해결할 수 있다.  이번 프로그래밍의 동작원리를 이해하고 있다면 쉽게 해결할 수 있을 것이다. 


▶ 실험에 사용되는 스텝 모터 자료 ( 28BYJ-48 ) 

 



[ ULN2003 모듈의 내부 회로도 참고 ]





▶ 스텝모터 구동 원리 




▶ 기본 동작 원리 추가 설명 (ULN2003 제외하고)

(28BYJ28 스텝모터 부연 설명)

유니폴라 방식의 모터로서(1,3,4,2번으로 전류가 들어가며 5번(Red) 공통단자로 전류가 흘러나오는 연결 구조이다,  15  , 354525  )

※ 색깔을 주의 깊게 보면서,  A → B → C → D의 순서대로 켜지도록 전류를 흘려주면 CW(시계방향),    D → C → B → A의 순서대로 흘려주면 CCW(반시계 방향) 으로 모터가 회전하게 된다. 



▶ 실습 목표 :  

 버튼 두 개를 이용하여 스텝모터의 정회전과 역회전 제어를 해 볼 것이다. 

버튼 1을 한 번 클릭하면 정회전(시계방향)하고, 

버튼 2를 한 번 클릭하면 역회전(반시계방향)하도록 한다.


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)






▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 스텝 모터(28BYJ48, 5.625˚) , ULN2003모듈, 푸시버튼 2개 (2Pin 이용)


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 보드 등을 연결한다.
 
 2. 모터와 ULN2003 보드 모듈을 연결한다. (연결 소켓은 앞뒤 구분이 되어 있어 잘못 연결할 걱정은 하지 않아도 된다)

 3. ULN 보드 공급 전원은 5V~12V 공급이 가능하고, 
    '+'로 표시된 곳의 점퍼를 아두이노 보드의 VCC(5V) 단자에 연결하고, 
    '-'로 표시된 곳의 점퍼를 아두이노 보드의 GND 단자에 연결한다.  


▶ 프로그램 (코드& 설명) : 


#include <Stepper.h>      // 스테핑 모터 라이브러리 정의 

int stepsPerRev = 2048; // 한바퀴(360): 2048 , 반 바퀴(180) : 1024

Stepper stepper (stepsPerRev, 11,9,10,8); // ( IN4,IN2,IN3,IN1) 

int btn1 = 7;

int btn2 = 6; 

void setup() {

 stepper.setSpeed(10);   // 스텝모터의 스피드 설정

 pinMode(btn1, INPUT_PULLUP);

 pinMode(btn2, INPUT_PULLUP);

}

void loop()  { 

 boolean btn1HL = digitalRead(btn1);

 boolean btn2HL = digitalRead(btn2); 

 if (btn1HL == LOW) {           // 버튼 1의 입력을 확인

   stepper.step(1);  //1스텝 회전 명령(버튼을 계속누르고 있으면 계속회전) 

  }

  if (btn2HL == LOW) {           // 버튼 2의 입력을 확인

   stepper.step(-1);//1스텝 역회전명령(버튼을 계속누르고 있으면 계속회전)

  }

}



▶ 실행 영상 : 





▶ 아두이노 소스 코드 다운로드 : 



반응형
반응형

 【 아두이노 기초 】 #36 스텝(Step Motor)모터 제어5 (버튼제어)


  지난시간 일반적으로 많이 쓰이는 저렴한 가격의 28BYJ-48 스텝모터와 ULN2003 드라이버 모듈에 대해 다루어 보았다. 

 이번 시간에는 조금 더 다루어 보기 위해 버튼을 사용해볼 것이다. 

 앞으로의 실험에서도 버튼제어가 중요한데, 그 이유는 버튼으로 무언가 제어가 가능하다는 뜻은 버튼을 대신해서 그 위치에 그 어떤 센서나 모듈로도 제어를 할 수 있다는 뜻이 된다.  단지, 각 센서 마다 고유의 특징과 사용법만 파악하면 되는 것이다.  버튼은 비록 수동으로 동작을 하지만 매우 직관적이어서 회로의 동작 원리를 이해하기 쉽다는 장점이 있다. 



▶ 실험에 사용되는 스텝 모터 자료 ( 28BYJ-48 ) 

 



[ ULN2003 모듈의 내부 회로도 참고 ]





▶ 스텝모터 구동 원리 





▶ 실습 목표 :  

 버튼 두 개를 이용하여 스텝모터의 정회전과 역회전 제어를 해 볼 것이다. 

버튼 1을 한 번 클릭하면 정회전(시계방향)하고, 

버튼 2를 한 번 클릭하면 역회전(반시계방향)하도록 한다.


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)






▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 스텝 모터(28BYJ48, 5.625˚) , ULN2003모듈, 푸시버튼 2개 (2Pin 이용)


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 보드 등을 연결한다.
 
 2. 모터와 ULN2003 보드 모듈을 연결한다. (연결 소켓은 앞뒤 구분이 되어 있어 잘못 연결할 걱정은 하지 않아도 된다)

 3. ULN 보드 공급 전원은 5V~12V 공급이 가능하고, 
    '+'로 표시된 곳의 점퍼를 아두이노 보드의 VCC(5V) 단자에 연결하고, 
    '-'로 표시된 곳의 점퍼를 아두이노 보드의 GND 단자에 연결한다.  


▶ 프로그램 (코드& 설명) : 


#include <Stepper.h>      // 스테핑 모터 라이브러리 정의 

int stepsPerRev = 2048; // 한바퀴(360): 2048 , 반 바퀴(180) : 1024

Stepper stepper (stepsPerRev, 11,9,10,8); // ( IN4,IN2,IN3,IN1) 

int btn1 = 7;

int btn2 = 6; 

void setup() {

 stepper.setSpeed(10);   // 스텝모터의 스피드 설정

 pinMode(btn1, INPUT_PULLUP);

 pinMode(btn2, INPUT_PULLUP);

}

void loop()  { 

 boolean btn1HL = digitalRead(btn1);

 boolean btn2HL = digitalRead(btn2); 

 if (btn1HL == LOW) {           // 버튼 1의 입력을 확인

    stepper.step(stepsPerRev);  // 한 바퀴 회전 명령

  }

  if (btn2HL == LOW) {           // 버튼 2의 입력을 확인

    stepper.step(-stepsPerRev);  // 반대 방향으로 한 바퀴 회전

  }

}



▶ 실행 영상 : 




▶ 아두이노 소스 코드 다운로드 : 



반응형
반응형

 【 아두이노 기초 】 #35 스텝(Step Motor)모터 제어4 (28BYJ-48 & ULN2003)


  지난시간 스텝각 1.8도, 바이폴라 제어가 가능한 스텝모터(6선식)와 293D 모터드라이버 IC를 가지고 제어해 보았다. 만약 스텝모터 동작 원리를 참고하려면 여기 글을 참고하라. ( ☞ 스텝모터의 이해 ) 

 이번 시간에는 좀더 다루기 간편한 유니폴라 방식전용의(5선식) 스텝모터와 모터드라이버 IC 가 모듈화되어 사용하기 간편해진 ULN2003 모듈에 대해 학습해보도록 하자. 



▶ 실험에 사용되는 스텝 모터 자료 ( 28BYJ-48 ) 

 




▶ 스텝모터 구동 원리 





▶ 실습 목표 :  

 5선식 스텝모터와 ULN2003 드라이버 IC 모듈로 좀더 쉽게 스텝모터를 제어 회보자. 이번 실습에서는 정회전(시계방향) 한 바퀴 회전 후, 역회전(반시계방향) 한 바퀴 회전을 반복하도록 한다. 


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)






[ ULN2003 모듈의 내부 회로도 참고 ]



▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 스텝 모터(28BYJ48, 5.625˚) , ULN2003모듈, 


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 보드 등을 연결한다.
 
 2. 모터와 ULN2003 보드 모듈을 연결한다. (연결 소켓은 앞뒤 구분이 되어 있어 잘못 연결할 걱정은 하지 않아도 된다)

 3. ULN 보드 공급 전원은 5V~12V 공급이 가능하고, 
    '+'로 표시된 곳의 점퍼를 아두이노 보드의 VCC(5V) 단자에 연결하고, 
    '-'로 표시된 곳의 점퍼를 아두이노 보드의 GND 단자에 연결한다.  

 


▶ 프로그램 (코드& 설명) : 


#include <Stepper.h>      // 스테핑 모터 라이브러리 정의 

  int stepsPerRev = 2048; // 한바퀴(360): 2048 , 반 바퀴(180) : 1024

  Stepper stepper (stepsPerRev, 11,9,10,8); // ( IN4,IN2,IN3,IN1) 


void setup()

{

 Serial.begin(9600);

  stepper.setSpeed(10);   // 스텝모터의 스피드 설정

}

void loop()

{ 

  stepper.step(stepsPerRev);  // 한 바퀴 회전 명령

  delay(1000);

  stepper.step(-stepsPerRev);  // 반대 방향으로 한 바퀴 회전

  delay(1000);

}




▶ 실행 영상 : 





▶ 아두이노 소스 코드 다운로드 : 



반응형