본문 바로가기

코딩/아두이노47

아두이노 입출력 인터럽트에 대해서 알아보자 attachInterrupt() 이번 포스트에서는 임베디드 시스템에서 제일 중요한 부분 중 하나인 인터럽트에 대해서 알아보도록 한다. 인터럽트란 마이크로컨트롤러프로세서(MCU) 에서 프로그램이 실행 중에 있을때, 예외상황이 발생하면 우선적으로 처리하는 것을 말한다. 아두이노를 가지고 설명하자면, 아두이노는 흔히 LOOP() 함수에서 코드가 반복해서 돌아가게 된다. 그런데 이상하게 구동이 되는 경우 도중에 코드를 멈춰야 한다. 이걸 LOOP() 함수 안에서 구현하려면 코드가 매우 난잡해지고, 즉시 멈추는게 불가능 하다. 멈추더라도 이전 작업이 다 끝나야 멈출 수 있다는 것이다. 코드가 난잡해지면 실수가 발생할 수 있고, 오류가 생길 가능성이 커진다. 그리고 즉시 멈출 수 없어서 그 짧은 시간동안 다른 문제를 야기할 수 있다. 따라서 이런.. 2020. 12. 23.
아두이노와 ESP8266으로 wifi에 연결해서 웹서버 만드고, 센서값 출력하기 - 몇년 전부터 아두이노를 통한 IoT 개발이 정말 많이 이루어지고 있다. 자료가 많이 없어서 이렇게 글을 써보려 한다. 아두이노에 ESP8266 모듈을 장착하면 아두이노로 wifi연결을 통해 인터넷에 접속할 수 있다. 그리고 웹 서버도 만들 수 있는데, 이 웹서버를 통해서 센서값 등을 표현시킬 수도 있다. 그 방법을 한번 알아보자. 아두이노, ESP8266 모듈, 또는 아두이노 NodeMCU 같은 ESP8266이 포함된 개발보드, CDS센서 LED 아날로그 0번에서 CDS 센서값을 읽어오고, 주변이 밝으면 LED를 끄고, 어두우면 LED를 키는 회로를 구성하였다. 필자는 NODE MCU를 이용해서 회로를 구성하였다. 아두이노에 ESP8266 wifi 모듈을 연결하면 똑같이 사용 가능하다. 코드 작성에 .. 2020. 10. 23.
아두이노 내부전원으로 서보모터(SG-90) 여러개 사용하는 방법 - 아두이노 내부 전원은 매우 약하다. 각종 센서나 LED 사용에는 큰 문제가 없지만, 모터류를 사용할 때에는 문제가 항상 따른다. 전류가 부족한 문제로, 모터쪽으로 과전류가 흐르게 되면 아두이노가 오작동 하는 등 문제가 생긴다. 그래서 원래는 외부전원을 사용하는 등 정석의 방법이 존재 한다. 하지만 이런 외부전원 회로를 만드는게 힘든 상황이거나 귀찮을 경우에 서모모터를 여러개 사용해야 하는 경우가 생기곤 한다. 이럴 때에 어떻게해야 아두이노 내부전원으로 서보모터를 여러개 돌릴 수 있을지 알아보자. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 점퍼선(M-M), 서보모터(SG-90) 여러개 아두이노 내부 전원 5V 를 통해서 서보모터 여러개에 전원 공급을 해준다. signal 신호는 각각 하나.. 2020. 10. 16.
모스펫으로 DC모터 제어하는 방법 ( IRFZ44N ) 오늘 다룰 센서는 모스펫 ( MOSFET ) 이다. 생긴것이 마치 트랜지스터 처럼 생겼는데, 맞다. 트랜지스터의 한 종류다. 트랜지스터처럼 증폭의 역할을 하는 것이 아닌, 스위치의 역할을 한다고 보면 된다. 마치 릴레이와 같다. 릴레이는 하드웨어적으로 스위치 역할을 한다면, 모스펫은 회로적으로 스위치 역할을 한다. 모스펫은 언제 사용하나? - 아두이노의 출력으로는 부족한 센서를 다룰 때 사용 - 스위치 회로를 구성할 때 사용 모스펫의 활용도는 너무 무궁무진 하지만, 일반적으로 사용하는 경우는 위의 경우들이다. 아두이노는 보통 5V 와 낮은 출력 전류를 갖고 있기에 모터를 구동하기엔 턱없이 부족하다. 따라서 이런 경우에 릴레이는 부피가 너무 커서 부적합하며 모스펫을 사용하는 것이 적당하다. 또한 모터의 방.. 2020. 9. 14.
아두이노에서 서보모터 SG-90 사용하는 방법 모든 기계에서 구동부로 사용되는 부품중 제일 많은 것이 바로 모터이다. 서보모터는 기계 중에서도 로봇을 제어에 엄청 많이 사용되고 있다. 서보모터는 안에 여러개의 크고 작은 기어들로 구성되어 있어서 힘(토크)이 세고, PWM 신호를 통해서 각도를 제어할 수 있다. -서보모터의 원리를 이해하고, 아두이노에서는 어떻게 사용할 수 있는지 알아보자. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 점퍼선(M-M) 서보모터를 사용하다보면 항상 헷갈리곤 하는게 GND가 뭐고, SIGNAL 선이 어떤 것인지이다. 신호선에 ▼ 삼각형 표시가 있으니, 앞으로는 헷갈려하지 말자! 아니면 주황색 선이 신호선이라는 것을 기억하자! 서보모터는 PWM 신호를 통해서 제어할 수 있다. 아두이노 우노에는 PWM 신호를 보낼.. 2020. 9. 14.
아두이노에서 적외선 근접센서 TCRT5000 사용하는 방법 아두이노를 사용함에 있어서 적외선 근접센서는 정말 손쉽게 접할 수 있는 센서이다. 쉽게 접할 수 있지만, 사용방법을 모르면 문제가 많은 센서이기도 하다. LED 이므로 +극과 -극을 정확하게 이해하고 사용해야 하며, LED 이고 적외선이기에 전압이 많이 흘러버리면 한순간에 타버려 고장나기 일수다. - 적외선 근접센서 TCRT5000 사용법을 정확하게 이해하고 사용하자. 원리는 정말 간단하다. 적외선 LED에서는 항상 적외선 신호를 발사해주고, 물체가 가깝다면 그 적외선 불빛의 반사량을 측정해서 가까운 정도를 측정하는 것이다. 약간 다른 식으로 사용한다면 검은색을 구분하는 센서로 사용하기도 한다. 검은색은 하약색에 비해서 빛을 반사하는 정도가 적기 때문이다. 예를 들면, 라인 트레이싱에 사용되는 것이 대표.. 2020. 8. 19.
피에조부저 수동, 능동 원리와 아두이노에서의 사용방법 경고 신호를 알려주는데 가장 흔히 사용하는 피에조부저에 대해서 글을 작성해본다. 컴퓨터 부저 비프음을 내는데에도 쓰인다. 수동과 능동의 차이는 간단하다. 능동부저는 5V 전원을 연결했을때, 소리가 난다. 수동부저는 5V 전원을 연결해도 소리가 나지 않는다. 능동부저는 단순히 소리를 내는데 사용되고, 수동부저는 음계를 사용해 멜로디를 낼 수 있다. 피에조부저는 주파수로 제어할 수 있다. 능동 부저는 단순히 +단자와 -단자만 조심히 하고, +단자에 디지털 신호를 주면 소리가 난다. 수동 부저는 음계에 맞는 주파수를 디지털 신호로 주어야한다. 사용되는 음계와 주파수의 관계는 위의 표를 참고하면 된다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 점퍼선, 피에조 부저(수동 or 능동) int pie.. 2020. 5. 7.
초음파센서 HC-SR04 원리와 아두이노에서의 사용방법 초음파 센서중에서 가장 흔히 사용하는 HC-SR04 센서에 대해서 글을 작성해본다. 초음파 센서중에서 가장 저렴하며, 제일 쉽게 구할 수 있는 장점이 있는 센서이다. 각종 메이커톤, 발명대회에서 빠질 수 없는 센서 중 하나이다. 흔히 근접센서라고도 부른다. 초음파 센서는 초음파가 반사되어 오는데 걸린 시간을 이용하여 거리를 산출해낸다. 센서 전면부에 센싱을 하게 생긴 두개의 기둥이 존재한다. 하나는 발신부이고, 하나는 수신부이다. 발신부에서 초음파 파장이 발생되고, 직선상의 물체에 그 파장이 반사되어 돌아온다. 흔히 우리말로는 메아리 라고 하는 echo파장을 수신하고, 그 사이의 시간을 구하는게 핵심이다. 음속은 통상 340m/s 로 계산하는데, 등속운동이라는 가정하에 식을 세워보면 다음과 같다. [ t.. 2020. 5. 6.
아두이노 업로딩이 안 된다면! 아두이노 호환보드 CH340&CH341 드라이버 설치! [포크리에 사용된 이미지는 별도의 라이선스를 취득하여 제공되고 있습니다. 포크리 출처가 없으면 무단도용으로 저작권 분쟁에 휘말릴 수 있습니다. I made a thumbnail for free in website "www.forcre.co.kr"] 아두이노 정품은 UNO 기준으로 2만5천원~3만원 이라는 비싼 가격대에 구입할 수 있는데, 사실 아두이노 정품을 쓰는 사람은 거의 없을 것이다. 지원금으로 구입하는것 아닌이상 정품을 살 엄두가 안 날 뿐더러, 호환보드와 성능차이가 없기 떄문이다. 원래 호환보드는 아두이노와 똑같은 구성으로 제작이 되었다면, 오늘 다뤄볼 호환보드는 칩셋이 CH34x 계열이다. 정품 아두이노를 기반으로 하는 호환보드는 정품 아두이노처럼 그냥 아두이노 프로그램으로 업로딩이 잘 된다... 2020. 5. 6.
[아두이노 강좌] 예제로 배우는 아두이노 #8 timer interrupt() 사용법, delay 없이 LED 제어하기 - delay() 함수를 사용하지 않고, LED를 원하는 시간만큼 점등시키고 소등시킬 수 있다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led(백색) 이전 강의부터 계속 언급하지만, 원래는 1 led당 1저항이 원칙이다. 하지만 백색 led의 경우 타지않고 버틸 수 있기 때문에 편의성을 위해서 저항을 사용하지 않는다. 그리고 led가 없더라도 13번핀은 내부 led와 연결되어 있으므로 외부 led가 없어도 이번 강의를 이해하는데 문제 없다. const int ledPin = LED_BUILTIN;// the number of the LED pin int ledState = LOW; // ledState used to set the LED unsigned long previo.. 2020. 3. 30.
[아두이노 강좌] 예제로 배우는 아두이노 #7 DigitalInputPullup, 아두이노 내장 pullup 저항 이용하기 - 아두이노 내부 회로에 내장되어 있는 풀업저항을 pinMode() 함수를 사용하여 설정하고, digitalRead() 함수를 사용하여 스위치 상태를 읽은 후 digitalWrite() 함수를 이용하여 LED를 제어한다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led, 버튼(택트스위치) void setup() { //start serial connection Serial.begin(9600); //configure pin 2 as an input and enable the internal pull-up resistor pinMode(2, INPUT_PULLUP); pinMode(13, OUTPUT); } void loop() { //read the pushbutton val.. 2020. 3. 27.
[아두이노 강좌] 예제로 배우는 아두이노 #6 , 스위치 버튼으로 led 제어하기 - 아두이노에서 스위치 상태를 digitalRead() 함수를 통해 읽은 후, LED를 digitalWrite() 함수를 통해 제어한다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led, 저항 1~2개, 버튼(택트스위치) led에 원래 저항을 연결해주는것이 원칙이지만, 백색 led를 사용하는 경우에는 위와같이 간단하게 테스트해 볼 수 있다. 또한 스위치에 연결되어 있는 저항은 아무 저항이나 사용하면 된다. const int buttonPin = 2; // the number of the pushbutton pin const int ledPin = 13; // the number of the LED pin // variables will change: int buttonStat.. 2020. 3. 25.
[아두이노 강좌] 예제로 배우는 아두이노 #5 analogWrite( ), 아두이노로 pwm 출력하기 - analogWrite() 함수를 이용하여 전압 출력을 pwm 신호로 출력할 수 있다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led LED 사용하는데에는 저항이 필수적으로 필요하지만, 간단히 테스트를 위해서 이번에는 LED(백색)을 이용한다. 적색과 노란색, 녹색의 LED를 사용하시려면 저항이 필요합니다. 110옴 저항 사용 권장. LED의 긴다리(+극)를 9번핀에 연결한다. int led = 9; // the PWM pin the LED is attached to int brightness = 0; // how bright the LED is int fadeAmount = 5; // how many points to fade the LED by // the setup .. 2020. 3. 25.
[아두이노 강좌] 예제로 배우는 아두이노 #4 ReadAnalogVoltage, 아두이노로 전압측정하기 - analogRead() 함수를 이용하여 아두이노로 회로의 전압을 측정할 수 있다. - 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led, 110옴 저항, 건전지 저항 110 옴에 걸린 전압 측정하기 건전지 전압 측정하기 void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // Convert the analog read.. 2020. 3. 25.
[아두이노 강좌] 예제로 배우는 아두이노 #3 analogRead()사용법 - digitalRead() 함수를 이용하여 아날로그 센서를 사용할 때, 아두이노에서 센서값을 읽는 것을 수행 한다. - 아두이노(나도, 우노, 메가), 시리얼 통신 케이블, 포텐시오미터(가변저항), 브레드보드 void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // print out the value you read: Serial.printl.. 2020. 3. 25.