라벨이 Arduino인 게시물 표시

[Arduino] 아두이노 LED 밝기 조절하기

이미지
아두이노 LED 밝기 조절하기 LED는 밝기 조절을 하기 위해서는 analogWrite 를 사용해야 한다.  digitalWrite 를 사용하면 밝기 조절을 할 수가 없다. ex) digitalWrite(LEDPIN, HIGH); : LED 껐다 켰다하기(밝기 조절 X)  analogWrite(LEDPIN, 0 ~ 255); : LED 밝기 조절(0~255) 회로도 연결 방법과 소스 코드를 작성했다. 주의할 점과 함께보자. 펄스 폭 변조(PWM) 밝기 조절은 0 에서 255까지 아날로그 값으로 표현 해야 한다. 하지만 디지털 핀은 아날로그의 값을 표현 할 수 없다. 이때 디지털 핀을 아날로그 신호로 동작 할 수 있는 PWM을 지원하는 디지털 핀을 사용하면 아날로그 값을 나타낼 수 있다. '~' 가 붙은 핀 번호를 사용하면 된다. 아래 그림처럼 빨간색 네모가 되어있는 핀만 아날로그 값을 사용할 수 있다. 회로도 저항은 220옴을 사용 하면된다. PWM을 지원하는 ~9 번 핀에 연결 했다. 코드 구현 LED 값 이 0 ~ 255까지 점차 밝아지는 것을 확인 할 수 있다. (높을 수록 밝음) #define LEDPIN 9 void setup () {   pinMode ( LEDPIN, OUTPUT ) ; } void loop () {   for ( int i = 0 ; i <= 255 ; i++ ) //0 ~ 255 값 출력   {     analogWrite ( LEDPIN, i ) ;     delay ( 5 ) ;   } }

[Arduino] 아두이노 시리얼 모니터에 값 입력받기

이미지
아두이노 시리얼 모니터에 값 입력받기 시리얼 모니터에 변수나 문자열을 입력 할 수 있다.  데이터 입출력을 위해 시리얼 객체 선언 아두이노 처음 할 때 가장 많이 하는 실수가 통신 셋업을 안해주는 거다. 이러면 시리얼 모니터가 안 뜬다. set up 함수에 꼭 시리얼 객체를 선언을 해줘야 한다. void setup () {   Serial . begin ( 9600 ) ; //초당 9600 비트로 통신 하겠다. } 시리얼 모니터 입력 값 확인하기 입력 값을 받기 전에 꼭 available() 함수를 사용 해야한다. 그래야 쓰레기 값이 안들어 온다. void loop () {   String str = "" ;   if ( Serial . available () > 0 ) // 입력 값이 0 보다 크면   {     str = Serial . read () ; //문자열 읽어 오기     str = Serial . readStringUntil () ; // 문자열 가져오기 // \n(공백)을 만날 때 까지   } } 시리얼 모니터 입력 값 확인 함수 입력 값을 받기 전에 꼭 available() 함수를 사용 해야한다. 그래야 쓰레기 값이 안들어 온다. void loop () {   char chr = "" ;   String str = "" ;   int data;   if ( Serial . available () > 0 ) // 입력 값이 0 보다 크면   {     chr = Serial . read () ; //변수 읽어 오기     str = Serial . readString () ; //문자열 읽어 오기   ...

[Arduino] 아두이노 시리얼 모니터 값 출력하기

이미지
아두이노 시리얼 모니터 값 출력하기 시리얼 모니터에 변수나 문자열을 출력 할 수 있다. 데이터 입력을 위한 시리얼 객체 선언  아두이노 처음 할 때 가장 많이 하는 실수가 통신 셋업을 안해주는 거다. 이러면 시리얼 모니터가 안 뜬다. set up 함수에 꼭 시리얼 객체를 선언을 해줘야 한다. void setup () {   Serial . begin ( 9600 ) ; //초당 9600 비트로 통신 하겠다. } 시리얼 모니터에 출력  void loop () {   int data = 5 ;   Serial . print ( data ) // 시리얼 모니터 화면에 출력   Serial . println ( data ) // 시리얼 모니터 화면에 출력 후 줄 바꿈 }

[Arduino] 아두이노 적외선 수신기(IR Receiver) 사용하기

이미지
아두이노 적외선 수신기(IR Receiver) 사용하기 적외선 수신기는 적외선 리모컨 or 적외선 송신기에서 보내는 신호를 받는다. 리모컨으로 TV, 에어컨, 선풍기 등 제어하는 것 처럼 사용 할 수 있다. 회로도 적외선 수신기 그림이 이상하긴 하지만 회로도 대로 연결 하면 된다. (아무리 찾아도 적외선 수신기 그림이 저거 밖에 없다.) 코드 구현 리모컨이 누른 IR 수신 정보를 출력 해준다. 실행이 안되면 <IR.H>를 추가해야한다. #include <IR.h> //적외선 수신기 사용   #define IR_PIN 13 unsigned long last = millis () ; IRrecv irrecv ( IR_PIN ) ; decode_results decResult; void setup () {   Serial . begin ( 9600 ) ;   irrecv . enableIRIn () ; } void loop () {   if ( irrecv . decode ( &decResult ) == true )   {     Serial . println ( decResult . value , HEX ) ;     Serial . println ( getDecodetype ( decResult . decode_type )) ;     if ( millis () - last > 250 )     {       last = millis () ;       irrecv . resume () ;     }   } } String getDecodetype ( int type) {   String szType= "Typ...

[Arduino] 아두이노 서보(servo) 모터 사용하기

이미지
아두이노 서보(servo) 모터 사용하기 서보모터는 자체적으로 속도 조절을 할 수 있으며 자신이 얼마나 회전했는지 센싱하고 입력 받은 값을 회전 시켜준다. 산업에서 많이 사용되는 모터 중 하나다. 0 ~ 180도 회전을 한다. 회로도 검은색 : GND 빨간색 : 5v 노란색 or 파란색 : 10번 핀 코드 구현 서보 모터를 0부터 180 까지 회전 시킨 후 180도가 되면 0도 로 다시 역회전 시킨다. #include <Servo.h> //서보 모터 라이브러리 포함 #define SERVO_PIN 10 Servo servo; // 서보모터 사용 int pos = 0 ; void setup () {   servo . attach ( SERVO_PIN ) ; // 서보모터 핀 초기화 } void loop () {   for ( pos = 0 ; pos < 180 ; pos += 1 ) // 0 -> 180각도 까지 0.02초 마다 1도씩 회전   {     servo . write ( pos ) ;     delay ( 20 ) ;   }   for ( pos = 180 ; pos>= 1 ; pos-= 1 ) 180 도가 되면 0 도 까지 반대로 회전   {     servo . write ( pos ) ;     delay ( 20 ) ;   } }

[Arduino] 아두이노 RGB LED 사용하기

이미지
아두이노 RGB LED 사용하기 기본 led는 빨간색, 초록색, 흰색, 노란색 등 한가지 색만 나타낸다. 하지만 RGB Led는 Red Led, Green Led, Blue Led 3개가 함께있는 센서다. RGB값을 조합하여 여러가지 색상을 표현 할 수 있으면 밝기 값도 조절이 가능다. 회로도 각각 선의 색깔이 R, G, B 센서를 제어한다. 코드 구현 1초에 한번씩 여러가지 색상을 출력한다.. #define R_PIN 8 #define G_PIN 9 #define B_PIN 10 void setup () {   Serial . begin ( 9600 ) ;   pinMode ( R_PIN, OUTPUT ) ;   pinMode ( G_PIN, OUTPUT ) ;   pinMode ( B_PIN, OUTPUT ) ; } void loop () {   SetColor ( 255 , 0 , 0 ) ; // 빨강   SetColor ( 0 , 255 , 0 ) ; //연두   SetColor ( 0 , 0 , 255 ) ; //파랑   SetColor ( 255 , 255 , 0 ) ; //노랑   SetColor ( 80 , 0 , 80 ) ; //보라 } void SetColor ( int r , int g , int b) {   analogWrite ( R_PIN, r ) ; // rgb 색상 출력   analogWrite ( G_PIN, g ) ;   analogWrite ( B_PIN, b ) ;   delay ( 1000 ) ; }

[Arduino] 아두이노 조이스틱 사용하기

이미지
아두이노 조이스틱 사용하기 조이스틱은 X, Y, Z 값을 얻을 수 가 있다. X, Y 는 아날로그 값. Z 는 디지털 값(0 , 1) 조이스틱을 활용해서 미니카를 움직일 수 있다. 회로도 그림 잘 보고 연결 해야 한다. 그림이 반전 되어 있을 수 도 있으니 GND 위치 확인하고 연결. 코드 구현 조이스틱의 x, y, z축 값을 출력하는 코드다. #define X_PIN A0 #define Y_PIN A1 #define SW_PIN 2 void setup () {   pinMode ( SW_PIN, INPUT_PULLUP ) ;   pinMode ( X_PIN, INPUT ) ;   pinMode ( Y_PIN, INPUT ) ;   Serial . begin ( 9600 ) ; } void loop () {   int x = analogRead ( X_PIN ) ;   int y = analogRead ( Y_PIN ) ;   int z = digitalRead ( SW_PIN ) ;   if ( !z ) // 스위치가 안 눌렸으면 x, y, z 값 출력   {     Serial . print ( x ) ;     Serial . print ( ", " ) ;     Serial . print ( y ) ;     Serial . print ( ", " ) ;     Serial . println ( z ) ;   } }

[Arduino] 아두이노 써미스터(Thermistor) 온도 센서 제어하기

이미지
아두이노 써미스터(Thermistor) 온도 센서 제어하기 써미스터 온도 센서는 열에 민감한 저항이다. 또한 써미스터가 구한 저항 값을 우리가 사용하는 온도로 바꿔줘야 한다. 회로도 저항은 100k를 사용 하면 된다. 코드 구현 1초마다 온도 값을 불러온다. 코드 실행이 안되면 <Thermistor.h> 라이브러리를 추가 해주면 된다. //센서 라이브러리 #include <Thermistor.h> // 센서 연결 선언 Thermistor temp ( A0 ) ; void setup () {   Serial . begin ( 9600 ) ; } void loop () {   int temp = temp . getTemp () ;   Serial . print ( temp ) ;   Serial . println ( "℃" ) ;   delay ( 1000 ) ; }

[Arduino] 아두이노 조도센서(Photoresistor) 사용하기

이미지
아두이노 조도센서(Photoresistor) 사용하기 조도 센서는 빛의 밝기에 따라 저항 값이 변하며 출력을 해주는 센서다. 빛이 약할 수록 저항 값이 낮다. 회로도 저항은 10k를 사용 하면 된다. 코드 구현 1초마다 빛의 밝기 값을 출력한다. 손가락으로 조도 센서를 가리게 되면 밝기가 낮아지니 값이 낮게 나온다. #define PHO_PIN A0 void setup () {   pinMode ( PHO_PIN, INPUT ) ;   Serial . begin ( 9600 ) ; } void loop () {   String Temp = "Value : " ;   Temp += analogRead ( PHO_PIN )   Serial . println ( Temp ) ;   delay ( 1000 ) ; }

[Arduino] 아두이노 가변저항으로 LED 밝기 조절하기

이미지
아두이노 가변저항으로 LED 밝기 조절하기 가변 저항은 스위퍼를 돌려서 0 ~ 1023 값을 받을 수 있다. 가변 저항으로 얻은 값으로 LED 밝기를 조절 해 보자. 회로도 저항은 220옴을 사용하면 된다. 코드 구현 가변 저항 값이 커질 수록 LED 밝기가 올라간다.  map함수 = 가변저항 최대값(1023) / LED 최대값(255)의 근사치다. #define LED_PIN 11 void setup ( ) {   pinMode ( LED_PIN, OUTPUT ) ; } void loop ( ) {   int readVal= analogRead ( A0 ) ;   readVal = map ( readVal, 0 , 1023 , 0 , 255 ) ; //가변저항 값 -> led 값으로 변환   analogWrite ( LED_PIN, readVal ) ; // led를 아날로그 값으로 출력 }

[Arduino] 아두이노 DC 모터 제어하기(L298N)

이미지
아두이노 DC 모터 제어하기(L298N)  DC 모터는 PWM((Pulse Width Modulation)을 이용해서 0 ~ 255 까지 속도를 제어 할 수 있다. 낮을 수록 회전수가 적어진다. 또 한 DC 모터를 제어하기 위해서 드라이버가 필요한데 회로도에 나와있는 L298D다. L298D는 DC모터와 Servo 모터를 제어 할 수 있다. 회로도 DC모터가 회전을 하지 않을 때 1. 회전 속도가 낮아 안 돌아감 -> 손으로 한번 돌려 봐야한다. 2. DC모터의 노란색, 초록색 선을 반대로 연결 -> 바꿔서 연결 해 볼 것. 코드 구현 DC모터를 255 속도로 1초마다 반대로 회전 하도록 하는 코드 // 모터 회전력 제어 #define EN_PIN 11 //모터 제어 핀 #define IN1_PIN 10 #define IN2_PIN 9 boolean bReverse = false ; void setup () {   pinMode ( EN_PIN, OUTPUT ) ;   pinMode ( IN1_PIN, OUTPUT ) ;   pinMode ( IN2_PIN, OUTPUT ) ; } void loop () {   setMotor ( 255 , bReverse ) ;   delay ( 1000 ) ;   bReverse = !bReverse; // 반향 반전   delay ( 1000 ) ; } void setMotor ( int nSpeed , boolean bReverse) {   analogWrite ( EN_PIN, nSpeed ) ; // 속도 설정   if ( bReverse == 0 )   {     digitalWrite ( IN1Pin, HIGH ) ;     digitalWrite ( IN2Pi...

[Arduino] 7세그먼트 사용해서 숫자 카운트하기

이미지
[Arduino] 7세그먼트 사용해서 숫자 카운트하기 내용 1. 7세그먼트 ON, OFF  2. 7세그먼트 0 ~ 9 출력하기 회로도 참 복잡하다 세그먼트 on, off하기 1초마다 세그먼트가 on, off 하는 코드다. on을 하면 세그먼트에 8이 나올 것이며 off를 하면 아무것도 나오지 않는다. #define A_PIN 2 #define DP_PIN 9 void setup () {   for ( int i = A_PIN; i <= DP_PIN; i++ ) //세그먼트 셋업     pinMode ( i, OUTPUT ) ; } void loop () {   OnOff ( 1 ) ;   delay ( 1000 ) ;   OnOff ( 0 ) ;   delay ( 1000 ) ; } void OnOff ( bool bOn) {   for ( int i=A_PIN; i<=DP_PIN; i++ ) //전부 끄기 or 켜기     digitalWrite ( i, bOn ) ; } 제목 2 1초 간격으로 세그먼트 0 ~ 9 까지 출력 #define A_PIN 2 #define DP_PIN 9 //LED 숫자 #define NUM_0 1 , 1 , 1 , 1 , 1 , 1 , 0 #define NUM_1 0 , 1 , 1 , 0 , 0 , 0 , 0 #define NUM_2 1 , 1 , 0 , 1 , 1 , 0 , 1 #define NUM_3 1 , 1 , 1 , 1 , 0 , 0 , 1 #define NUM_4 0 , 1 , 1 , 0 , 0 , 1 , 1 #define NUM_5 1 , 0 , 1 , 1 , 0 , 1 , 1 #define NUM_6 0 , 0 , 1 , 1 , 1 , 1 ,...

[Arduino] 아두이노 푸시 버튼으로 LED 제어하기

이미지
아두이노 푸시 버튼으로 LED 제어하기 버튼을 누르면 LED에서 빛이 나오는 예제 회로도 저항은 220옴을 사용하면 된다. 코드 구현 푸시 버튼 핀 모드를 INPUT_PULLUP으로 구현을 했다. 누르고 있으면 LED 버튼 ON 누르지 않으면 OFF #define PUSH_PIN 9 #define LED_PIN 10 void setup () {   pinMode ( PUSH_PIN, INPUT_PULLUP ) ;   pinMode ( LED_PIN, OUTPUT )   Serial . begin ( 9600 ) ; } void loop () {   int value = digitalRead ( PUSH_PIN ) ;   Serial . println ( value ) ;   if ( value == 0 ) // 버튼이 눌리고 있으면     digitalwrite ( LED_PIN, HIGH )   else     digitalwrite ( LED_PIN, LOW ) }

[Arduino] 아두이노 푸시 버튼 사용하기

이미지
아두이노 푸시 버튼(Push Button) 사용하기 푸시 버튼은 여러 이름으로 불린다. ex)버튼, 스위치 푸시 버튼을 제어하는 방법에는 두개가 있다. 1. INPUT : 푸시 버튼을 한번 누르면 0 2. INPUT_PULLUP : 푸시 버튼을 누르고 있으면 0, 떼면 1 INTPUT과 INPUT_PULLUP 의 회로도는 조금 다르다. INPUT 회로도 INPUT 코드 푸시 버튼의 상태를 시리얼 모니터에 출력한다. 업로드를 하면 시리얼 모니터에 0, 1, 0, 0, 1 이런 식으로 값이 나온다. 이것은 플로팅 값이라고 하는데 0 과 1 중 정해지지 않은 값이 랜덤으로 나오는 것이다. 이 상태에서  버튼을 한번 누르면 0으로 고정 된 값이 나온다. #define PUSH_PIN 9 void setup () {   pinMode ( PUSH_PIN, INPUT ) ;   Serial . begin ( 9600 ) ; } void loop () {   int value = digitalRead ( PUSH_PIN ) ;   Serial . println ( value ) ; } INPUT_PULLUP 회로도 저항은 220옴 사용해주면 된다. INPUT_PULLUP 푸시 버튼의 상태를 시리얼 모니터에 출력한다. 업로드를 하면 (1,1,1,1,1) 쭉 1로 출력이 된다. 이 상태에서 버튼을 누르고 떼지 않으면 (0,0,0,0,0)으로 나온다. 버튼에서 손을 떼면 다시 0이된다. #define PUSH_PIN 9 void setup () {   pinMode ( PUSH_PIN, INPUT_PULLUP ) ;   Serial . begin ( 9600 ) ; } void loop () {   int value = digitalRead...

[Arduino] 아두이노 부저(buzzer) 사용하기

이미지
아두이노 부저(buzzer) 사용하기 부저는 2가지 종류가 있다. 1. 능동 부저 2. 수동 부저 차이점 능동 부저 : 한 가지 음만 낼 수 있다. 수동 부저 : 여러 음을 낼 수 있다.(계이름으로 멜로디를 만들 수 있다.) 두 개의 부저를 구별하는 방법은 부저를 뒤집어 보면 보면 다르게 생겼다. 둘 중 뭔지 모르겠으면 바꿔서 껴보면 된다. 부저가 켜졌을 때 나는 소리가 확연히 차이가 난다. 회로도 검은색 선이 +, 빨간색 선이 - 다. 능동 부저, 수동 부저 둘 다 똑같이 연결 하면 된다. 능동 부저로 한 음만 내기 능동 부저가  1초에 한번 씩 소리를 낸다. #define BUZ_PIN 13 void setup ( ) {   pinMode ( BUZ_PIN, OUTPUT ) ; } void loop ( ) {   digitalWrite ( BUZ_PIN, HIGH ) ;   delay ( 1000 ) ;   digitalWrite ( BUZ_PIN, LOW ) ;   delay ( 1000 ) ; } 수동 부저로 한 음만 내기 수동 부저가 한 음만 울린다. tone 함수에 400 이라고 들어간 부분이 음계다. 낮을 수록 낮은 음을 낸다. #define BUZ_PIN 13 void setup ( ) {   pinMode ( BUZ_PIN, OUTPUT ) ; } void loop () {   tone ( BUZ_PIN, 400 , 500 ) ; //tone(핀번호, 음계, 몇 초 동안 켜질것 인지)   delay ( 500 ) ;   noTone ( BUZ_PIN ) ; //부저 끄기   delay ( 500 ) ; } 수동 부저로 멜로디 연주하기 수동 부저에서 음계는 다음과 같다. ...