아두이노 선택하기 우노 VS 나노 VS 미니 차이(feat.핀맵) 안녕하세요. 공대 박형입니다. 오늘은 아두이노 보드 우노, 나노, 미니의 차이에 대해 알아보겠습니다. 일반적으로 사람들이 아두이노를 접할 때는 우노 보드를 많이 접합니다. 가장 사용화되어있기도 하고 처음 사용하기에 부담 없는 가격과 성능을 가지고 있기 때문이죠. 저도 처음 아두이노란 보드를 봤을 때 우노 보드였습니다. 그 당시에는 아두이노 보드에 종류가 있다고 생각하지 않았고, '아두이노' = '아두이노 우노'라고 알고 있었습니다. 그러다 작품 제작을 위해 아두이노가 더 작았으면 좋겠다고 생각하여 정보를 알아봤고, 알아보던 중 나노를 발견하고 아두이노에 많은 종류가 있다는 것을 알게 되었습니다. 자 이제 아두이노 우노, 나노, 미니를 비교..
[복사하고 따라하는 아두이노] 아두이노 온습도센서 제어(feat.DHT22) 안녕하세요. 공대 박형입니다. 오늘은 아두이노에서 온습도 센서를 사용하는 방법을 알아보고, 온습도 센서를 통해 LED를 제어해보겠습니다. 우선 아두이노에서 DHT온습도센서(11버전, 22버전 모두)를 사용하기 위해서는 온습도센서 관련 정보가 담겨있는 라이브러리를 추가해야 합니다. 라이브러리란 자주 사용하는 변수, 함수 등을 따로 한 파일에 미리 지정하여 저장하고, 그 지정한 파일을 불러옴으로써 내가 작성하는 코드에서 변수나 함수를 정의하지 않아도 불러온 파일에 있는 함수, 변수를 사용할 수 있는 기능이 있습니다. 사용하기 복잡하거나 까다로운 센서 같은 경우는 제조사에서 센서를 사용하기 쉬운 환경을 제공하기위해 라이브러리를 추가로..
[복사하고 따라하는 아두이노] 아두이노 블루투스 LED제어(feat.앱인벤터,HC-06) 안녕하세요 공대 박형입니다. 오늘은 블루투스 센서 HC-06을 통해 아두이노와 스마트폰을 무선 통신하여 LED를 제어해보겠습니다. 스마트폰을 이용해 아두이노와 자유롭게 통신하기위해 앱인벤터를 통해 간단한 앱도 제작해 보겠습니다. 코드부터 보시죠 #include // 블루투스 통신을 위한 라이브러리를 가져온다. SoftwareSerial BSerial(2, 3); // (RX, TX) int LED = 13; char data; void setup(){ BSerial.begin(9600); Serial.begin(9600); pinMode(13, OUTPUT); // led 제어 핀 } void loop(){ if (..
[복사하고 따라하는 아두이노] 아두이노 압력센서 사용(feat.FSR402) 안녕하세요 공대 박형입니다. 오늘은 아두이노 압력센서를 사용해보겠습니다. 코드부터 보시죠. int Led = 13; int FSRsensor = A0; // 센서값을 아나로그 A0핀 설정 int value = 0; // loop에서 사용할 변수 설정 void setup() { pinMode(Led, OUTPUT); Serial.begin(9600); } void loop() { value = analogRead(FSRsensor); // 아날로그 센서값을 value 변수에 저장 Serial.println(value); // 센서값을 시리얼 모니터에 출력 value = map(value, 0, 1023, 0, 255); // va..
[복사하고 따라하는 아두이노] 아두이노 EEPROM(feat.put&get) 안녕하세요. 공대 박형입니다. 오늘은 아두이노 EEPROM put, get 함수 예제를 실습해보겠습니다. 아두이노 EEPROM에서는 5개의 함수가 있습니다. 1.write : EEPROM의 인덱스에 전달된 매개변수 값을 저장 2.read : 매개변수로 전달되는 인덱스에 저장되어 있는 1바이트값을 읽어와서 반환 3.update : EEPROM의 인덱스에 저장된 ㄱ밧이 전달된 매개변수 값과 다를 경우 값을 저장 4.put : EEPROM의 위치에 전달된 데이터(구조체)를 저장 5.get : 매개변수로 전달되는 위치에 저장되어 있는 데이터를 가져옴 이번 시간에는 put 와 get함수를 실습해 보겠습니다. 대체적으로 많이 사용하는 방법..
[복사하고 따라하는 아두이노] 아두이노 EEPROM(feat.write&read) 안녕하세요. 공대 박형입니다. 오늘은 아두이노 EEPROM write, raed 함수 예제를 실습해보겠습니다. 아두이노 EEPROM에서는 5개의 함수가 있습니다. 1.write : EEPROM의 인덱스에 전달된 매개변수 값을 저장2.read : 매개변수로 전달되는 인덱스에 저장되어 있는 1바이트값을 읽어와서 반환3.update : EEPROM의 인덱스에 저장된 ㄱ밧이 전달된 매개변수 값과 다를 경우 값을 저장4.put : EEPROM의 위치(location)에 전달된 데이터(구조체)를 저장5.get : 매개변수로 전달되는 위치(location)에 저장되어 있는 데이터를 가져옴 이번 시간에는 write 와 read기능을 실습..
[복사하고 따라하는 아두이노] 아두이노 인터럽트 기능 안녕하세요 공대 박형입니다. 오늘은 아두이노 인터럽트 예제를 실습해보겠습니다. 코드부터 보시죠. const int r_led = 13; int sw = 2; void setup() { Serial.begin(9600); pinMode(sw, INPUT); pinMode(r_led, OUTPUT); attachInterrupt(0, r_led_off, RISING); // D2 의 신호가 0에서 1이될 때 r_led_off 함수 실행 } void loop() { digitalWrite(r_led, HIGH); delay(2000); digitalWrite(r_led, LOW); delay(2000); } void r_led_off() { digitalW..
[복사하고 따라하는 아두이노] 아두이노 타이머 사용하기 안녕하세요 공대 박형입니다. 오늘은 아두이노 타이머 예제를 실습해보겠습니다. 코드부터 보시죠. int led = 13; void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } 이 코드에서 delay함수를 이용해 1초 동안 코드 처리를 중단시킵니다. 하지만 digitalWrite(led, HIGH);함수를처리하는시간은고려되지않았습니다. 즉 이와 같은 방법으로는 정확히 1초 간격으로 깜박이지 않고 오차가 발생합니다. 다른 방법으로 코드를 작성해보겠습니다. int led = 13;..
[아두이노 필수 이론] 아두이노 인터럽트 사용법 안녕하세요 공대 박형입니다. 오늘은 아두이노 인터럽트에대해 알아보겠습니다. MCU에서 인터럽트는 소프트웨어가 가 이상 행동을하여 이벤트에 의한 프로세서의 응답입니다. 인터럽트 조건은 프로세서 인터럽트가 허가되었을 때 프로세서가 현재 실행중의 코드를 인터럽트해(정지해) 이벤트를 시기적절하게 처리하기 위한 요구입니다. 인터럽트 요구가 받아들여지면 프로세서는 현재의 실행을 일시 정지하고 그 상태를 저장하고 인터럽트 이벤트를 처리하기 위해 인터럽트 핸들러또는 인터럽트 서비스 루틴 라고 불리는 기능을 실행합니다. 이 인터럽트는 일시적인 것으로 인터럽트가 치명적인 에러를 나타내지 않는 한 인터럽트 핸들러의 종료후에 프로세서는 진핸중이던 동작을 재개합니다. 인터럽트는 ..
[아두이노 필수 이론] 아두이노 타이머 사용법 안녕하세요 공대 박형입니다. 오늘은 아두이노 타이머 기능에대해 알아보겠습니다. 우선 타이머에대해 설명드리겠습니다. 타이머는 주로 카운커와 함께 사용되며 MCU를 컨트롤하는데 매우 중요합니다 .이름이 나타내듯이 타이머는 시각과 카운트를 식별할 수 있습니다.이를 이용해LED 제어, 서보 각도 제어, PWM펄스 폭 변조 등 다양한 기능으로 구현됩니다. 그러나 처음에 마이크로 컨트롤러 내부 혹은 외부에 클락이 있음을 알아두는 것이 중요합니다. 실제로 모든 마이크로컨트롤러에는 클락이 내장되어 있습니다. 그렇지 않다면 마이크로컨트롤러 외부에 있는 클럭을 사용해야합니다. 마이크로컨트롤러에는 클락이 필요하고 프로그램이 클락에 맞춰 동작하게 됩니다. 이게 마이크로 컨트롤러의..
[복사하고 따라하는 아두이노] 아두이노 서보모터 제어 안녕하세요 공대 박형입니다. 오늘은 서보모터를 제어해보겠습니다. 코드부터 보시죠 #include Servo servo; const int servo_motor=3; int angle = 90; void setup() { Serial.begin(9600); servo.attach(servo_motor); servo.write(angle); } void loop() { servo.write(angle); Serial.print("angle = "); Serial.println(angle); delay(2000); angle += 20; if ( angle == 190) angle = 10; } 동작 영상입니다. 1초마다 각도를 20도씩 증가시키고, 각도가..
안녕하세요 공대 박형입니다. 오늘은 L293D모터 드라이버 IC를 사용하여 DC모터의 방향과 속도를 제어해보겠습니다. 코드부터 보시죠. const int enable = 11; // 속도 조정핀 const int left = 6; // 방향 조절핀 1 const int right = 5; // 방향 조절핀 2 int speed = 0; // 속도 조절 변수 int direction = 0; // 방향 조절 변수 void setup() { Serial.begin(9600); pinMode(enable,OUTPUT); pinMode(left,OUTPUT); pinMode(right,OUTPUT); Serial.println("Program start\nRight direction\n"); } void loo..
[복사하고 따라하는 아두이노] DC모터 속도 제어(feat. PWM ) 안녕하세요 공대 박형입니다. 오늘은 아두이노 DC모터를 구동시키고 PWM제어를통해 속도조절을 해보겠습니다. 코드부터 보시죠 const int dc=11; int speed = 0; void setup() { Serial.begin(9600); pinMode(dc,OUTPUT); } void loop() { analogWrite(dc,speed); Serial.print("speed = "); Serial.println(speed); speed = speed +85; // 속도를 0, 85, 170, 255, 0...순으로 if ( speed > 255 ) speed=0; // 속도가 255초과되면 0으로 변환 delay(1000); ..
안녕하세요. 공대 박형입니다. 오늘은 아두이노 초음파센서를 알아보겠습니다. 코드부터 보시죠. ( 3핀 초음파 센서 ) int distance = 0; void setup () { Serial.begin (9600); } void loop() { pinMode(9, OUTPUT); //출력 모드 digitalWrite(9, HIGH); // 초음파 송출 delay(10); digitalWrite(9, LOW); // 초음파 송출 정지 pinMode(9, INPUT); // 입력 모드 distance = 0.01723 * pulseIn(9, HIGH); // 들어온 값을 0.01723과 곱하여 거리 계산 Serial.print(distance); //계산된 거리를 cm로 출력 Serial.println(" ..
안녕하세요 공대 박형입니다. 오늘은 아두이노 pir센서를 사용해보겠습니다. 코드부터 보시죠 int g_led = 9; // 초록 led 핀 int b_led = 10; // 파란 led 핀 int r_led = 11; // 빨간 led 핀 void setup() { Serial.begin(9600); pinMode(g_led, OUTPUT); pinMode(b_led, OUTPUT); pinMode(r_led, OUTPUT); } void loop() { char data = Serial.read(); // 시리얼 값 data변수에 저장 if (data == 'g'){ digitalWrite(g_led, HIGH); // 초록 led는 키고 나머지는 off digitalWrite(b_led, LOW); ..
안녕하세요. 공대 박형입니다. 오늘은 아두이노 반복문 ( for )사용 방법을 학습하겠습니다. 반복문은 주어진 조건이 참일 때 for문 안의 코드를 반복해서 실행시켜주는 방법입니다. 주로 똑같은 동작을 반복하거나 여러 동작을 순차적으로 동작시키기위해 사용합니다. 아두이노에서 사용되는 void loop도 무한 반복문입니다. setup문을 한번 동작한 다음에 loop문을 무한으로 동작시키는 방식인데 for문 같은 경우는 동작하기 위한 조건을 제시하며 사용합니다. for문 사용 방법입니다. for ( 초기 처리 부문; 조건 부문; 변화 처리 부문) 실제로 코드를 작성하고 동작을 확이하며 학습해보겠습니다. 저번시간에 실습했던 예제를 for문을 사용하는 코드로 변환하며 실습해보겠습니다. const int sw =..
안녕하세요. 공대 박형입니다. 오늘은 제어문 if에대해 알아보겠습니다. 제어문은 크게 두가지로 나뉘는데 사용 방법에따라 조건 제어문과 반복 제어문으로 분류됩니다. 복잡한 동작을 할 수행할 때는 제어문을 사용해 프로그램을 작성하면 보다 쉽고 간결하게 프로그램을 작성할 수 있습니다. 대표적인 조건 제어문인 if문은 주어진 조건일 참(True)일 경우 작성한 코드를 실행시키고 거짓(False)일 경우 코드를 실행시키지 않고 다음 코드를 넘어가는 방식입니다. 순서도로 표현하면 아래와 같습니다. 코드 사용법은 아래와 같습니다. if ( 조건 ){ 동작 할 코드 } ex) const int sw = 7; const int led = 13; void setup() { Serial.begin(9600); pinMode..
안녕하세요 공대 박형입니다. 오늘은 아두이노 시리얼 통신을 통해 데이터를 read 해보겠습니다. 코드부터 보시죠. int g_led = 9; // 초록 led 핀 int b_led = 10; // 파란 led 핀 int r_led = 11; // 빨간 led 핀 void setup() { Serial.begin(9600); pinMode(g_led, OUTPUT); pinMode(b_led, OUTPUT); pinMode(r_led, OUTPUT); } void loop() { char data = Serial.read(); // 시리얼 값 data변수에 저장 if (data == 'g'){ digitalWrite(g_led, HIGH); // 초록 led는 키고 나머지는 off digitalWrite(..
안녕하세요 공대 박형입니다. 오늘은 아두이노 시리얼 통신을 통해 데이터를 read 해보겠습니다. 코드부터 보시죠. void setup() { Serial.begin(9600); } void loop() { if (Serial.available()){ // 만약 시리얼 통신이 온다면 char data = Serial.read(); // 시리얼 통신 값을 문자형변수 data에 저장 Serial.println(data); // 그 값을 출력 } delay(100); } 짤과 같이 시리얼 모니터를 통해 정보를 전달하면 전달한 값을 data변수에 저장하고 시리얼 모니터에 출력합니다. 하지만 char변수는 문자는 저장 가능하지만 "mom"이나 "15"같은 문자가 하나 이상인 문자열은 한번에 출력하지 못하고 하나씩 ..
안녕하세요 공대 박형입니다. 오늘은 아두이노 가변저항 제어를 해보겠습니다. 코드부터 보시죠. void setup() { Serial.begin(9600); } void loop() { int data = analogRead(A5); // A5에 연결된 가변저항의 아날로그값을 data변수에 저장 Serial.println(data); delay(100); } 회로도입니다. 가운데 선을 아날로그핀(A5)으로 연결하고 나머지 두 핀을 전원과 그라운드에 연결하면 됩니다. 실제 가변저항은 저런 모양의 것을 많이 사용합니다. 띵커캐드로 작성한 회로도와 같이 가운데 선이 아날로그 신호선, 나머지 선을 전원과 그라운드에 각각 연결하면 됩니다. 가변저항 아날로그 값을 디지털값으로 변환하여 손잡이를 돌릴 때 data변수 ..
안녕하세요 공대 박형입니다. 오늘은아두이노 스위치 제어를 해보겠습니다. 코드부터 보시죠. int sw = 7; void setup() { Serial.begin(9600); pinMode(sw, INPUT); } void loop() { int value = digitalRead(sw); Serial.println(value); delay(100); } 회로도입니다. 풀다운 저항을 이용해 스위치를 눌렀을 때 HIGH(1)을 출력하여 LED를 점멸시키는 회로도입니다. 플로팅현상 제거를 위한 풀업, 풀다운 저항에 대해 자세한 설명은 아래 링크에 있습니다. engineerparkbro.tistory.com/11 스위치를 누르지 않을때는 스위치 왼쪽 라인에 LOW(0), 오른쪽 라인에 HIGH(1)이 출력됩니다..
안녕하세요 공대 박형입니다. 오늘은 아두이노에서 스위치를 사용하기 전 플로팅 현상과 풀업 저항 및 풀다운 저항에대해 알아보겠습니다. 택트 스위치 연결도 그림과 같이 버튼을 누르지 않은 상태에서는 초록색은 초록색끼리, 청록색은 청록색끼리 연결되어있습니다. 버튼을 누르게되면 초록색과 청록색 라인 모두가 연결되는 상태가 됩니다. 플로팅 현상이란? 아두이노에서 사용하는 디지털 신호는 1과 0으로 구성되어있습니다. HIGH상태일 떄는 1, LOW상태일 떄는 0의 신호를 출력합니다. 하지만 전기가 흐를 때 주변의 자기장과 같은 전기 에너지 때문에 신호가 불안정하게 변해 부정전압으로 인한 오작동이 발생하게 됩니다. 이러한 상태를 플로팅 상태, 플로팅 현상이라하며 이러한 문제를 해결하기 위한 방법으로 풀업 저항, 풀다..
안녕하세요 공대 박형입니다. 오늘은 아두이노 보드 없이 온라인으로 아두이노 개발을 가능하게 해주는 띵커캐드(Tinkercad)에 대해 설명드리겠습니다. 먼저 아래 주소에 접속합니다. www.tinkercad.com/dashboard Tinkercad | From mind to design in minutes Tinkercad is a free, easy-to-use app for 3D design, electronics, and coding. www.tinkercad.com 위와 같은 홈페이지에 접속되면 회로를 클릭합니다. 새 회로 작성을 클릭합니다. 오른쪽에 있는 소자를 이용해 회로를 구성할 수 있습니다. 회로를 구성했다면 코드를 눌러 아두이노 코딩을 할 수 있습니다. 코딩을 완료했다면 시물레이션 시작..
안녕하세요 공대 박형입니다. 오늘은 LED 제어를 해보겠습니다. 코드부터 보시죠. void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); } 회로도입니다. 디지털 출력을 LED에 바로 인가하면 LED가 손상될 우려가 있기 때문에 약 150옴 정도의 저항을 연결합니다. 아두이노에 코드를 업로드하여 1초 간격으로 LED를 켰다 껐다를 반복하는 프로그램을 완성했습니다. 다음 시간에는 LED PWM 제어 방법에 대해 알아보겠습니다. 읽어주셔서 감사합니다.
안녕안녕하세요 공대 박형입니다. 오늘은 시리얼 통신을 통해 시리얼 모니터에 글자를 출력하는 방법에 대해 알아보겠습니다. 코드부터 보시죠. int time_sec = 0; void setup() { 1erial.begin(9600); 1Serial.println("시리얼 통신을 시작합니다. [공대 박형]"); } void loop() { 1Serial.print("아두이노가 시작된지 "); 1Serial.print(time_sec); 1Serial.println("초가 지났습니다."); time_sec++; // time_sec = time_sec + 1 수식의 간편화 delay(1000); } 아두이노 시리얼 출력을 통해 시리얼 모니터에 "시리얼 통신을 시작합니다. [공대 박형]" 를 출력했습니다. de..
안녕하세요 공대 박형입니다. 오늘은 저번시간에 아두이노와 케이블을 연결할 때 발생하는 문제점을 해결하는 방법을 알려드리겠습니다. 아두이노 정품 같은 경우는 engineerparkbro.tistory.com/4?category=883476 포스팅을 통해 아두이노 보드와 PC를 연결, 통신하는 방법을 익힐 수 있습니다. 하지만 아두이노 호환보드나 나노 보드 등을 사용할 때는 추가적으로 드라이버를 설치해야 통신을 할 수 있습니다. 윈도우 검색창에서 '장치관리자'를 검색하여 접속합니다. 아두이노 호환보드나 나노 보드 등을 사용할 때는 장치 관리자에 연결된 포트가 CH340 이나 CH341이 보일 것입니다. 이럴 경우 sparks.gogo.co.nz/ch340.html 주소로 접속합니다. 위 홈페이지로 접속되면 ..
안녕하세요 공대 박형입니다. 오늘은 아두이노와 pc를 연결해보겠습니다. 저는 아두이노 우노 ( UNO ) 를 준비했고 시리얼 통신을 위한 케이블선도 필요합니다. 우선 아두이노 케이블 USB단자를 PC에 연결합니다. 반대쪽 단자는 아두이노에 연결합니다. 아두이노를 실행시키고 툴 - 보드 - Arduino UNO 로 설정합니다. 다른 보드를 사용하시는 분들은 각자 환경에 맞게 설정하시면 됩니다. 다음으로 툴 - 포트 - COM4 로 설정합니다. 포트 숫자는 환경에따라 다르기 때문에 COM4가 아닌 다른 포트가 있다면 그 포트를 연결하면 됩니다. 만약 포트가 여러개라면 설정 - 장치 관리자 - 포트 탭에서 현재 연결되어있는 포트를 확인하고 아두이노에 연결한 포트를 찾아낼 수 있습니다. 어떤 포트가 아두이노와 ..
안녕하세요 공대 박형입니다. 오늘은 아두이노를 사용하기 위한 준비를 해보겠습니다. 우선 아두이노 소프트웨어를 설치하기위해 아래 주소로 접속합니다. www.arduino.cc/ Arduino - Home www.arduino.cc 주소로 접속하면 아래와 같은 화면이 보입니다. 여기서 SOFTWARE 를 접속합니다. 각자 사용하고계신 운영체제에따라 선택 옵션이 갈립니다. 저는 윈도우10을 사용하고 있으므로 Windows app을 선택했습니다. 어떤 옵션을 선택해도 이와같은 화면으로 넘어옵니다. 여기서 아두이노 IDE(통합 개발환경 소프트웨어) 개발자를 위해 기부할 수 있습니다. 기부할 의사가 있으시면 각 $달러를 선택하시고 CONTRIBUTE & DOWNLOAD를 선택하시면 됩니다. 의사가 없으시다면 JUS..
안녕하세요 공대 박형입니다. 제 블로그 첫 콘텐츠로 아두이노에 관련된 강의를 시작합니다. 제가 처음 아두이노를 배울 때 가장 수요를 많이 느꼈던 부분이 예제 코드와 코드 설명이었습니다. 예제 코드 같은 경우는 이미 사용해본 경험이 있는 알고리즘이라도 새로운 프로젝트를 진행 할 때 헷갈리거나 타이핑이 귀찮은 경우 찾아보곤 했습니다. 그래서 모든 예제 코드는 맨 위에 스크랩 가능하도록 게시할 예정입니다. 그리고 코드에 맞는 회로도를 이해하기 쉽게 시각적으로 제작할 것입니다. 센서나 엑츄에이터의 구체적인 Database 이론 부분보다 따라하기 쉬운 방향으로 포스팅을 시작할 계획입니다. 읽어주셔서 감사합니다.