본문 바로가기

개발자/Arduino

아두이노 짧은 시간 Delay 사용 하지 않는 코드 Dela(1000분의 1초 숫자) 함수를 사용하는 것은 우리의 유능한 아두이노의 마이크로 프로세서를 익사시키는 일과 같다. 제어 코드를 실행하는 과정에 Delay( ) 함수를 만나면 아무일도 못하고(예외가 있는데 외부 입역 인터럽트나 타이머 인터럽트는 실행된다.) 기다린다. 한없이 기다린다. 아무일도 하지 않고 그저 기다린다. 이것은 어마어마한 낭비다. 그래서 여기서는 Fade in, out 즉 점점 LED 밝기가 점점 환해지거나 흐려지는 동작을 delay 함수를 쓰지 않고 사용하는 방법을 살펴 본다. 이와 같은 방법은 자주 사용하므로 정확히 알아두는게 개발자로 사는데에 도움이 된다. 믿어라. 아두이노 예제 코드에서 페이딩 예제를 한 번 살펴보면 int led = 9; // the PWM pin the ..
nano 33 iot 1초 타이머 작동 - delay 사용 금지 타이머를 작동하여 1초 마다 작동하는 코드 빠진 건 없겠지 간단하게 설명하면 1. 맨 위 변수 sampling rate를 준다. 단위는 milisecond, 이 시간으로 인터럽트를 발생한다. 여기서는 1000ms, 즉 1초마다 인터럽트가 발생하도록 설정하였다. 2. 타이머 인터럽트에서 사용할 변수를 선언한다. 여기서는 1초마다 증가하는 타임 틱 변수와 300초(5분)를 확인할 수 있는 변수를 주었다. 이 변수는 타이머 인터럽트 함수에서 함께 증가시켜준다. 3. delay 쓰지 않고 메인에서 시간 체크만 하면서 정해진 시간마다 일정한 동작을 실행한다. 4. TC5_Handler 이하 타이머 관련 함수들이다. 설명은 시간상 생략한다. 그대로 가져다 쓰면 잘 동작한다. #include //define time..
가변저항 두 개로 시간을 보여주는 코드 가변 저항 두 개를 A0(시간 설정), A1(분을 설정)연결하여 시간과 분을 설정하면 SSD1306 OLED에 표시한다. 코드가 좀 지저분 하지만 사용자 값을 설정할 때 얼마든지 활용 가능한 아이디어로 올려둔다. 회로도 참고 /* server address: http://api.sleep-doc.com/sleepq2/578f38a45732416d3ceb7899/2023/09/05 https://fishpoint.tistory.com/5156 */ #include #include #include "arduino_secrets.h" #include #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN..
nano 33 IoT 보드 ADC 12bit 설정 ADC 비트 수, 분해능, 레졸루션을 변경하는 방법 Arduino Nano 33 BLE에는 아날로그 읽기 해상도를 변경하여 analogRead() 함수가 반환하는 값의 비트 수를 늘릴 수 있는 기능이 있습니다. 기본 해상도 값은 10비트(0~1023 사이의 값 반환)이며 최대 12비트 ADC(0~4095 사이의 값 반환)까지 지원할 수 있습니다. 이를 위해 analogRead()가 반환하는 값의 크기(비트)를 설정하는 analogReadResolution()이라는 또 다른 함수가 있습니다. 바로 이 함수에서 ADC 분해능(해상도, 비트 수)를 변경할 수 있습니다. analogReadResolution() analogReadResolution()은 제로, 듀, MKR 제품군, 나노 33(BLE 및 IoT)..
0부터 1023 까지 숫자를 12시간중 어떤 구간인지 알아내는 코드 생각하기가 싫어 ChatGPT 에게 물었더니 낼름 코드를 짜준다. 몇 번 질문을 수정했다. 질문이 잘못됐는지 엉뚱한 코드가 몇 번 나왔다. 프롬프트를 몇 번 수정해서 제대로 질문했더니 아름다운 코드가 나왔다. 마지막 구간을 헷갈리는 오류가 나고, +1이나 -1 코드를 사용하는 부분을 눈여겨 보면 누적되어 나중에 구간이 맞지 않는 경우가 생긴다. 참고하시길. 코드는 시간을 포텐셜미터 - 가변저항을 통해서 받은 아날로그 데이터(0~1023) 값을 시간과 분으로 표시하는 방법을 구현하는 중이다. 이렇게 하면 일단 시간 값은 얻을 수 있다. 일단 지피티가 짠 코드를 보자. 꽤 잘 돌아간다. 그러니까 0~1023까지의 숫자를 12시간이나 24시간으로 나눠서 배열에 시작하는 숫자와 마지막 숫자를 저장한다. 아날로그..
PIR 센서를 이용한 보안 경보 시스템 아두이노를 이용해 PIR 센서 기반의 보안 경보 시스템을 설계하고 구현해 보겠습니다. 이 회로는 아두이노를 중앙 마이크로컨트롤러로 사용하고 PIR 센서 자체를 사용하여 설계했습니다. 경찰 사이렌 효과를 내기 위해 사이렌 발생기 IC인 UM3561 IC를 사용하여 부저를 통해 경보음을 발생시켰습니다. 일반적으로 주택, 상점, 사무실 등에서 특수하게 사용되는 보안 시스템은 정확성과 신뢰성을 위해 기본적으로 적외선 또는 레이저 시스템을 사용합니다. 하지만 이러한 방식은 많은 금전적 투자와 인프라 지원이 필요합니다. 이 작은 프로젝트에서는 비용 효율적인 보안 경보 시스템을 위한 간단한 솔루션을 구현하여 PIR 기반 보안 경보 시스템에 대해 자세히 설명합니다. 이 방법은 전력 소비를 최소화하고 저렴한 비용으로 구..
아두이노 ADC 모듈 ADS1115 ADS1015 i2c 통신을 이용하여 조도센서, 가변저항 등의 아날로그 신호를 입력받을 수 있는 외장 adc 모듈입니다. i2c 통신이 가능한 MCU에 연결하면 4채널의 아날로그 입력 핀을 사용할 수 있습니다. 이 제품의 특징은 ADDR 핀에 VCC, GND, SCL, SDA 핀 중 어떤 핀을 연결하는지에 따라서 i2c 주소를 변경하여 사용할 수 있기 때문에 하나의 MCU에 최대 4개의 모듈을 장착할 수 있는 점과, 게인(Gain)을 조정하여 큰 신호부터 작은 신호까지(최대 범위 : 6.144V, 최소 범위 : 0.256V)를 입력받을 수 있는 점입니다. ads1115와 ads1015는 거의 대부분이 동일하게 제작되어 있지만, ads1115는 해상도가 더 높고, ads1015는 초당 샘플링이 더 높은 것으로 구분이 됩..
전류 전압 컨버터 4~20mA 전류 측정 전류 - 전압 컨버터 (Gravity: Analog Current to Voltage Converter(for 4~20mA Application)) 이 전류-전압 모듈은 0-25mA 전류 신호를 0-3V 전압 신호로 선형적으로 변환합니다. 산업용 센서 또는 디바이스의 전류 신호 출력은 일반적으로 4~20mA입니다. 이 전류-전압 모듈을 사용하면 메인 제어 보드에서 산업용 센서 또는 장치에서 출력되는 전류 신호를 쉽게 읽을 수 있습니다. * 정밀도를 높이려면 12bit 이상의 ADC를 사용하는 것을 권장합니다. 일반적으로 4mA 미만의 전류 신호는 고장 진단에 사용할 수 있고, 20mA 이상의 전류 신호는 오버런 감지에 사용할 수 있습니다. 따라서 이 모듈은 고장 감지, 오버런 감지 애플리케이션과 호환되는..