반응형

아두이노 13

[아두이노] 파이썬 threading timer 로 주기적으로 LED 켜고 끄기(타이머, 인터럽트, Interrupt)

목차 [Arduino] Python threading timer 함수 이번 포스트에서는 파이썬의 스레딩(Threading)의 타이머(timer) 함수에 대해 알아보겠습니다. 타이머의 말 자체가 알려 주듯이 타이머는 정해진 시간(Time)이 지났을 때 사용자가 원하는 동작을 하게 도와주는 함수 입니다. Syntax는 아래와 같습니다. 인스턴스명 = threading.Timer(타이머시간, 실행시킬함수명) 인스턴스명.daemon = True 인스턴스명.start() 입력 값에 타이머 시간은 시간 단위이고 밀리초 (mili second)는 소수점 형식으로 표기하시면 됩니다. 실행 시킬 함수 명은 타이머가 시간이 되었을 때 구현할 함수 명을 입력 하시면 됩니다. 리턴 값을 인스턴스(Instance)에 입력 하시..

[아두이노]1초마다 프로그램 동작 시키기(millis(),delay(), scheduling, 스케쥴링)

목차 Arduino 스케줄에 따라 프로그램 동작 시키기 원하는 시간(Timing)에 원하는 코드(Code)를 실행시키는 방법에 대해 알아보겠습니다. 일반적으로 Atmega 칩에서 이러한 스케쥴링(Scheduling)을 하기 위해서는 타이머 인터럽트(Timer Interrupt)를 사용해서 원하는 시간에 특정 코드가 동작하게 만들어 줍니다. 아두이노(Arduino)에는 다행이도 millis 라는 함수를 사용해서 해당 라인에 왔을때 당시 시간을 밀리세컨드(milli second)로 Return 해줍니다. Delay 함수는 입력 값으로 밀리세컨드를 입력 값으로 받아서 그 시간동안 다른 코드를 진행하지 않고 홀드(Hold) 해서 시간을 보냅니다. 아래의 예제 코드를 통해 쉽게 이해할 수 있습니다. Arduino..

[아두이노]메모리가 부족할 때 처리방법(프로그램 저장 공간, 전역 변수, 지역변수)

목차 Arduino 메모리(Memory) 공간이 작을 때 아두이노 스케치에서 코드를 작성하고 컴파일(Compile)을 진행하면 아래와 같은 메세지를 받을 수 있습니다. 스케치는 프로그램 저장 공간 3242 바이트(10%)를 사용. 최대 32256 바이트. 전역 변수는 동적 메모리 226바이트(11%)를 사용, 1822바이트의 지역변수가 남음. 최대는 2048 바이트. 앞서 아두이노를 구성하는 메모리(Memory) 공간에 대해 살펴 보았습니다. 메모리에 대해 잘 이해가 안되시면 괄호안의 링크를 참조하시길 바랍니다. (https://scribblinganything.tistory.com/519) 여기서 프로그램 저장 공간은 프로그램 메모리(Program Memroy, Flash Memory)를 의미 합니다...

[아두이노] String함수: toInt, toFloat, toUpperCase, toLowerCase

목차 이번 포스트는 문자열 (String) 관련 함수들 중에 중요 함수에 대해 알아보도록 하겠습니다. 함수를 코드로 돌리고 확인은 Arduino에서 제공하는 시리얼 모니터로 하겠습니다. 시리얼(Serial) 통신 사용 방법 및 모니터링 방법은 아래 링크를 참조하시면 됩니다. (https://scribblinganything.tistory.com/512) Arduino 문자열 toInt 함수 toInt 함수(Function)는 문자열(String)을 정수(Integer)로 변경해줍니다. 정수로 변경 뒤에 수식(math)으로 처리하기 용이 합니다. 아래 예제 코드를 통해 쉽게 이해할 수 있습니다. 참고로 Integer 정수는 8비트(bits) 보드에서 사이즈는 2바이트로 16비트 입니다. 예제 코드>> vo..

[아두이노] String함수: compareTo, equals, equalsIgnoreCase, length, replace

목차 이번 포스트는 문자열 (String) 관련 함수들 중에 중요 함수에 대해 알아보도록 하겠습니다. 함수를 코드로 돌리고 확인은 Arduino에서 제공하는 시리얼 모니터로 하겠습니다. 시리얼(Serial) 통신 사용 방법 및 모니터링 방법은 아래 링크를 참조하시면 됩니다. (https://scribblinganything.tistory.com/512) Arduino 문자열 compareTo 함수 compareTo 함수는 문자열(String)을 비교해서 동일한 경우 0을 return하고 다른 경우 ASCII 코드 차이 만큼을 return 합니다. 예제 코드>> void setup() { Serial.begin(9600); while (!Serial) { ; } } void loop() { String s..

[C++]변수 종류, 크기, 범위, 예제로 변수 확인(Variable Type, Size, Range)

목차 C++ 언어 변수 종류, 크기, 범위 (Variable Type, Size, Range) 변수는 데이터를 저장하는 공간 입니다. 데이터 사이즈와 타입에 맞춰 효율적으로 변수를 선언해야 합니다. C++에서 사용하는 기본 변수는 아래와 같습니다. 운영체제(Operating System, OS) 32비트 기준입니다. 아래 범위는 signed 기준으로 unsigned 의 범위는 0~2^(바이트크기)로 생각하시면 됩니다. bool true/false 1byte 범위 : true / false int 정수형 4byte 범위 : -2,147,483,648 ~ 2,147,483,647 __int8 정수형 1byte 범위 : -128 ~ 127 __int16 정수형 2byte 범위 : -32,768 ~ 32,767..

HC-06 블루투스 아두이노에 연결해보기 (AT명령어, 안드로이드폰에 연결하기)

하드웨어 연결(Arduino + HC-06) 그림1은 Frizting이라는 툴을 사용해서 회로도를 작성한 것이다. HC-06 블루투스 모듈과 아두이노는 통신라인과 전원라인만 간단히 연결하면 된다. RXD(HC06)은 3번에 TXD(HC06)은 2번에 연결한다. 3번 2번은 아두이노 코드에서 설정한 값이라 다른 포트로 변경도 가능하다. 전원은 5V와 GND에 연결한다. 그림2은 실제 자리에서 연결한 사진이다. 브래드보드 오른편에 연결되어 있는 것이 HC-06 블루투스 모듈이고 왼편에 있는 것은 가속도 센서이다. 이번 실험에서는 단순 블루투스 연결만을 위해 사용하므로 왼쪽에 모듈은 신경안써도 된다. 최종 연결은 가속도 센서에서 읽은 값을 블루투스를 통해 PC에 보내는 동작을 할 것이다. 아두이노 코드 #in..

MPU6050 가속도 센서, 자이로 센서로 측정값 읽어 보기

MPU-6050 센서란? MPU-6050는 그림1과 같다. 모듈로 되어 있는 PCB 인데 내부에는 MEMS 가속도센서(Accelerometer)와 MEMS 자이로센서(gyro)를 포함하고 있다. 그림처럼 SCL, SDA 통신라인을 이용하는 I2C 통신을 사용한다. 내부에 16비트 ADC 장치를 가지고 있어서 정밀한 결과를 출력해준다. 참고로 나는 MPU-6050을 네이버 쇼핑에서 구입했는데 약 3천원 정도 했다. MPU6050에는 1024바이트 FIFO 버퍼가 있는데 만일 센서 값을 읽어서 버퍼에 저장하면 Arduino에 Interrupt 신호를 보내고 아두이노는 이 신호를 통해 버퍼에 데이터가 있음을 알고 읽어 온다. SCL, SDL 라인을 사용하면 MPU6050은 자동으로 I2C에서 Slave 역할을..

serial 통신으로 받은 값 DB에 저장하기

이번 프로젝트는 미리 만들어 놓은 아두이노에서 온도 습도 가스 등등의 값들을 측정해서 serial 통신으로 1초 간격으로 보내주는데 받은 값을 파이썬으로 mongodb에 저장하는 파이썬 프로그램을 만들 것이다. 저장값은 robo 프로그램으로 확인할 것이다. 아래 값은 아두이노에서 보내는 값들이다 이중에 온도와 습도를 의미하는 Tv와 Hv 값을 가져오겠다. As0 Vs10 Es0 Cs400 Ts4000 Hs0 Lv0 Cv1129 Tv6855 Hv1561 Vv0 Ev400 Dv3 파이썬 코드를 통해 이해해보자 코드 >> from pymongo import MongoClient from time import sleep import serial import time class SertoDB_OOP(): def ..

flask, pyserial 동시에 사용하기

이번 주제는 flask로 웹서버를 동작시키면서 동시에 serial 통신으로 아두이노로 부터 값을 계속 받아오고 싶었다. 처음에 사용한것은 thread 모듈이었는데 웹서버와 같이 thread를 돌리는 방법은 시도하다가 잘안되서 포기하였다. 그렇게 찾은 것이 flask의 Response 함수 였다. Reponse는 말그대로 실시간 (on the fly)로 데이터를 처리해주는 것이다. 아래 링크를 통해 공부하였다. https://flask.palletsprojects.com/en/1.1.x/patterns/streaming/ Streaming Contents — Flask Documentation (1.1.x) Streaming Contents Sometimes you want to send an enormo..

반응형