반응형

파이썬 모듈인 pySerial을 이용해 간단히 아두이노와 시리얼 통신을 할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
char state;
 
void setup() {
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);
  Serial.println("Arduino ready.");
}
 
void loop() {
  // put your main code here, to run repeatedly:
  if (Serial.available())
  {
    state = Serial.read();
    while (Serial.available())
    {
      Serial.read();  // 첫 번째 문자만 입력받고 나머지는 버린다.
    }
    
    if (state == '0')
    {
      digitalWrite(LED_BUILTIN, LOW);
      Serial.println("LED OFF");
    } else
    {
      digitalWrite(LED_BUILTIN, HIGH);
      Serial.println("LED ON");
    }
  }
 
  delay(100);
}


위 소스를 컴파일 하고 아두이노에 업로드 한다. 시리얼 모니터를 통해서도 Builtin LED를 제어할 수 있다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import serial
import time
import sys
 
try:
    ser = serial.Serial('COM5'9600, timeout = 1)
    time.sleep(1)
except:
    print("Device can not be found or can not be configured.")
    sys.exit(0)
 
if (ser.readable()):
    print(ser.readline().decode(), end =''# 아두이노 준비 상태 확인.
    # 아두이노에서 Serial.println("Arduino ready"); 명령으로 데이터를 보내기 때문에
    # Serial 통신으로 읽어온 데이터에는 줄바꿈 문자(\r\n)가 이미 포함되어 있다.
    # Serial.print("Arduino ready");으로 바꾸면 end = ''가 필요 없다. 
 
while (True):
    print("\n0: Off, 1: On, q(Q): Quit\nChoose: ", end = '')    
    state = input()
 
    if state == 'q' or state == 'Q':
        break
    elif state == '0':
        ser.write(b'0')
        print(ser.readline().decode(), end = '')
    else:
        ser.write(b'1')
        print(ser.readline().decode(), end = '')
 
    time.sleep(0.1)
 
ser.close()


Windows에서 위 소스를 실행하면 연결된 아두이노의 Builtin LED를 제어할 수 있다.

※ 참고: https://pythonhosted.org/pyserial/




이 프로그램과 Arduino IDE의 시리얼 모니터를 동시에 실행시킬 수는 없다.


반응형
Posted by J-sean
:
반응형

아두이노 프로 마이크로를 이용해 간단한 USB키보드를 만들 수 있다.


2019/10/27 - [C, C++] - Sending a keyboard input 키 입력 보내기


Arduino Pro Micro Pin Map


Tactile Switch를 연결한다.

D4 - Tactile Switch - GND


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <Keyboard.h>
 
const char PIN_RETURN = 4;
 
void setup() {
  // put your setup code here, to run once:
  pinMode(PIN_RETURN, INPUT_PULLUP);
  Keyboard.begin();
}
 
void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead(PIN_RETURN)== LOW)
  {
    Keyboard.press(KEY_RETURN);
    delay(100);
    Keyboard.release(KEY_RETURN); // Keyboard.releaseAll();
    delay(100);
  }
 
  delay(100);
}
 
// https://www.arduino.cc/reference/en/language/functions/usb/keyboard/


스위치를 누르면 Enter키가 입력되는 소스.

※ 참고: https://www.arduino.cc/reference/en/language/functions/usb/keyboard/


Arduino Leonardo 보드를 선택하고 컴파일후 업로드 한다.



장치 관리자를 확인하면 'HID 키보드 장치'로 인식된다. 스위치를 누르면 Enter키가 입력된다.


반응형
Posted by J-sean
:
반응형

nRF24L01 모듈은 Serial Peripheral Interface(SPI) 프로토콜을 사용하여 2.4GHz 무선 통신이 가능하다.


중국에서 구매한 nRF24L01 모듈 2개.


8개의 핀이 있다.


nRF24L01의 핀맵.


아두이노의 핀맵. nRF24L01과 연결할 핀을 확인 한다.



이렇게 연결 한다.


[nRF24L01 - Arduino]

VCC - 3.3V

GND - GND

CSN - 8

CE - 7

MOSI - 11

SCK - 13

IRQ - N/A

MISO - 12


통신을 해야 하므로 2개 모두 연결해 준다.


수신 프로그램을 컴파일 하고 아두이노에 업로드 한다.


송신 프로그램을 컴파일 하고 다른 아두이노에 업로드 한다.



수신 프로그램이 업로드된 아두이노의 시리얼 모니터를 확인해 보자.

통신이 잘 안된다면 10μF 커패시터를 연결 하고 3.3V 외부 전원을 사용 하자.


GND is the Ground Pin. It is usually marked by encasing the pin in a square so it can be used as a reference for identifying the other pins.


VCC supplies power for the module. This can be anywhere from 1.9 to 3.9 volts. You can connect it to 3.3V output from your Arduino. Remember connecting it to 5V pin will likely destroy your nRF24L01+ module!


CE (Chip Enable) is an active-HIGH pin. When selected the nRF24L01 will either transmit or receive, depending upon which mode it is currently in.


CSN (Chip Select Not) is an active-LOW pin and is normally kept HIGH. When this pin goes low, the nRF24L01 begins listening on its SPI port for data and processes it accordingly.


SCK (Serial Clock) accepts clock pulses provided by the SPI bus Master.


MOSI (Master Out Slave In) is SPI input to the nRF24L01.


MISO (Master In Slave Out) is SPI output from the nRF24L01.


IRQ is an interrupt pin that can alert the master when new data is available to process.


반응형
Posted by J-sean
:
반응형

I2C 프로토콜과 SSD1306 드라이버를 사용하는 0.96인치 OLED를 아두이노나 NodeMCU에서 간단하게 사용 할 수 있다.


중국에서 구매한 0.96인치 I2C OLED. SSD1306 드라이버를 사용하고 파란색 화면이 나온다.

(케이스에는 SSD1315라고 표기 되어 있다)


디스플레이 보호 스티커가 붙어 있다.


떼자.


뒷면



아래와 같이 연결한다.

[OLED - 아두이노]

VCC - 5V

GND - GND

SCL - A5

SDA - A4


실제 OLED와는 약간 다르다.


Library Manager에서 adafruit gfx를 검색하고 설치 한다.


Dependencies도 모두 설치 한다.



adafruit ssd1306도 검색해서 설치 한다.


ssd1306_128X64_i2c 예제를 로드한다.


OLED의 주소를 0x3C로 바꾼다.


컴파일하고 아두이노에 업로드 하면 여러가지 예제 화면이 출력 된다.



0.91인치 OLED.


핀맵은 0.96인치 OLED와 동일 하다.


0.96인치 해상도: 128 X 64

0.91인치 해상도: 128 X 32


0.91인치 OLED는 SCREEN_HEIGHT를 32로 바꿔서 테스트 한다.


Adafruit 라이브러리는 용량이 굉장히 크다. 필요 하다면 좀 더 작고 가벼운 U8g2 라이브러리를 사용하자.


그림 출력을 위한 1비트 픽셀 BMP(Black and White) 변환이 필요 하다면 이 링크나 아래 프로그램을 사용하자.

ezBMP.exe



반응형
Posted by J-sean
:
반응형

예전 영화에서 종종 볼 수 있던 레이저 침입 감지 시스템은 간단한 작동 원리에도 불구하고 레이저를 이용 한 방식이 뭔가 있어 보이는지 아직까지도 영화나 드라마에서 심심치 않게 볼 수 있다. 작동 원리가 간단한 만큼 저렴한 부품으로도 비슷하게 만들어 볼 수 있다.


침입 감지 시스템을 회피하기 위한 Catherine Zeta-Jones의 피나는 노력 (영화 Entrapment)


The Big Bang Theory


약 $0.4 짜리 레이저 모듈. 5V로 작동하고 출력 5mW, 파장 650nm의 붉은색 레이저를 발생 시킨다.


Red 

625 - 740nm

Orange

590 - 625nm

Yellow

565 - 590nm

Green

520 - 565nm

Cyan

500 - 520nm

Blue

435 - 500nm

Violet

380 - 435nm


약 $0.7 짜리 레이저 수신 모듈. 5V로 작동하고, 레이저가 수신 될때는 HIGH 시그널을, 수신 되지 않을때는 LOW 시그널을 출력 한다. 수신하려는 레이저 외, 태양이나 다른 강한 빛이 없는 실내용.



레이저 리시버 센서는 방향에 주의 한다. 반대로 연결하면 뜨거울 정도로 열이 발생 한다.


위 다이어그램과 같이 구성 한다.


레이저 모듈에서 레이저가 발생되고 수신 모듈에서 이 레이저를 감지하면 HIGH 시그널을 출력 한다.


중간에 장애물이 생겨 레이저를 수신하지 못하게 되면 수신 모듈에서 LOW 시그널을 출력하고 아두이노는 디지털 4번 핀으로 HIGH를 출력해 Buzzer를 작동 시킨다.



실제 부품의 연결 방식은 다이어그램과 다르지만 기본 구성은 동일 하다. 


소스를 컴파일하고 아두이노에 업로드 한다.


제작 과정 및 테스트


Serial Monitor에도 적의 침입 기록이 남는다.


반응형
Posted by J-sean
:
반응형

USBASP로 ATtiny13을 프로그래밍 할 수 있다. Arduino를 이용한 프로그래밍과 기본적인 설정 방법은 아래 링크를 참고 한다.

 

2020/04/02 - [Raspberry Pi & Arduino] - Programming ATtiny13 with Arduino Uno - 아두이노로 ATtiny13 프로그래밍 하기

 

AliExpress에서 구매한 USBASP.

 

Adaptor와 함께 구매 했다.

 

컴퓨터에 연결 한다.

 

드라이버가 설치되지 않았다면 제대로 인식하지 못한다.

 

 

 

https://zadig.akeo.ie/

위 링크에서 Zadig를 다운 받는다.

zadig-2.5.exe
4.92MB

 

드라이버를 설치 한다.

 

장치가 제대로 인식 된다.

 

ATtiny13에 기본적인 Blink 예제를 프로그래밍 할 수 있도록 케이블을 연결 한다.

USBASP RESET - ATtiny pin 1

USBASP MOSI - ATtiny pin 5

USBASP MISO - ATtiny pin 6

USBASP SCK - ATtiny pin 7

USBASP 5V - ATtiny pin 8

USBASP GND - ATtiny pin 4

 

Optional:

ATtiny pin4(GND) - Negative side of the LED

ATTiny pin 3 - Resistor (330 Ohm) - Positive side of the LED

 

 

 

프로그램을 컴파일 하고 업로드 해도 warning이 발생하고 제대로 작동 하지 않는다. USBASP의 Firmware를 업데이트 해야 한다.

 

https://sourceforge.net/projects/ardude/

위 링크에서 Arduino AVR Dude Programmer를 다운 받고 설치한다. (설치하지 않고 cab 파일의 압축만 풀어도 상관 없다)

Arduino AVR Dude Programmer.zip
1.99MB

 

https://www.fischl.de/usbasp/

위 링크에서 usbasp.2011-05-28.tar.gz를 다운 받고 압축을 풀어서 usbasp.atmega8.2011-05-28.hex파일을 Arduino AVR Dude Programmer가 있는 폴더에 복사 한다. (USBASP의 칩셋이 ATMEGA8인지 확인 한다)

usbasp.2011-05-28.tar.gz
0.51MB

 

컴퓨터에 Arduino만 연결한 상태에서 File - Examples - 11. ArduinoISP - ArduinoISP를 컴파일 하고 업로드 한다.

 

 

 

 

USBASP의 Firmware를 업데이트 할 수 있도록 케이블을 연결 한다.

USBASP RESET - Arduino pin 10

USBASP MOSI - Arduino pin 11

USBASP MISO - Arduino pin 12

USBASP SCK - Arduino pin 13

USBASP 5V - Arduino 5V

USBASP GND - Arduino GND

 

Arduino RESET - (+) 10㎌ Capacitor (-) - Arduino GND (Capacitor를 연결하지 않으면 Firmware 업데이트가 제대로 되지 않는다)

USBASP JP1(JP2로 표시된 제품도 있다) 연결

 

avrdude가 있는 폴더(Arduino AVR Dude Programmer를 설치한 폴더)로 이동 해서 아래 명령어를 실행 한다.

avrdude -C avrdude.conf -c avrisp -P COM3 -b 19200 -p m8 -v

(COM 포트는 실제 포트를 적어준다.)

 

이상이 없다면 AVR device initialized and ready to accept instructions라는 메세지가 나온다.

 

아래 명령어를 실행 한다.

avrdude -C avrdude.conf -c avrisp -P COM3 -b 19200 -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex

Verify까지 완료되면 USBASP의 Firmware 업데이트가 끝난다.

 

USBASP로 Blink 예제를 프로그래밍 할 수 있도록 케이블을 다시 연결 한다.

USBASP RESET - ATtiny pin 1

USBASP MOSI - ATtiny pin 5

USBASP MISO - ATtiny pin 6

USBASP SCK - ATtiny pin 7

USBASP 5V - ATtiny pin 8

USBASP GND - ATtiny pin 4

 

Optional:

ATtiny pin 4(GND) - Negative side of the LED

ATTiny pin 3 - Resistor (330 Ohm) - Positive side of the LED

 

 

 

Programmer: "USBasp (slow)"로 설정 한다. USBasp로 설정 하면 에러가 발생 한다.

 

컴파일 하고 업로드 한다.

 

ATtiny13에 프로그램이 업로드 되고 정상 작동 한다.

 

반응형
Posted by J-sean
:
반응형

기본적인 ATtiny 프로그래밍 방법은 아래 링크에서 확인 할 수 있다.

 

2020.04.02 - [Raspberry Pi & Arduino] - Programming ATtiny13/85 with Arduino Uno - 아두이노로 ATtiny13/85 프로그래밍 하기

 

 

링크의 소스를 사용해 위 그림과 같이 저항과 LED만 연결한 간단한 회로도 LED on시 9.25mA, LED off시 0.98mA의 전류를 소비한다. delay()로 MCU가 아무것도 안하는 상황에서 0.98mA의 전류를 소비하는 것이다. 전원이 계속 공급되는 상황이라면 문제될게 없겠지만 배터리를 사용한다면 전류 사용량을 최소화해서 배터리가 오래 가도록 하는게 좋다.

 

아두이노로 ATtiny를 프로그래밍 할 수 있도록 준비 한다.

 

 

 

 

dealy()가 아닌 sleep_cpu()를 사용해 MCU가 Sleep Mode로 들어 갈 수 있도록 소스를 작성 한다. 64마이크로초 동안 켜졌다 2초 동안 꺼지는 소스이다. 멀티미터로 전류 사용량을 확인해 보면 LED on시 8.34mA, LED off시 0.00mA로 표시 된다. LED off시에는 0.01mA의 전류도 사용하지 않는 것이다. 아주 짧은 시간 동안만 LED가 켜지고 대부분의 시간은 0.01mA 이하의 전류만 사용 하므로 배터리 사용 시간이 훨씬 더 길어지게 된다.

 

반응형
Posted by J-sean
:
반응형

아두이노를 이용해 ATtiny13/85를 프로그래밍 할 수 있다. USBASP를 이용한 프로그래밍은 아래 링크를 참고 한다.

 

2020/05/07 - [Raspberry Pi & Arduino] - Programming ATtiny13 with USBASP - USBASP로 ATtiny13 프로그래밍 하기

 

 

 

 

Arduino를 실행 한다.

 

File - Examples - 11.ArduinoISP - ArduinoISP를 선택 한다.

 

Arduino Uno를 연결하고 Upload한다.

 

 

 

 

Upload가 완료 되면 새로운 sketch에서 File - Preferences를 선택 한다.

 

Additional Boards Manager URLs:에 아래 링크를 입력하고 OK를 클릭 한다.

 

https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json

 

Tools - Board - Boards Manager...를 선택 한다.

 

Attiny를 검색하고 ATtiny13 board를 설치 한다.

 

 

 

 

Tools에서 아래와 같이 설정을 변경 한다.

 

Board: ATtiny13

BOD: BOD 4.3v

Clock: 1.2 MHz internal osc.

Port: (Your Arduino port)

Programmer: Arduino as ISP

 

위 사진과 같이 연결 한다.

 

Attiny13 Pin Configuration

 

Ardunio pin 10 - ATtiny pin 1

Arduino pin 11 - ATtiny pin 5

Arduino pin 12 - ATtiny pin 6

Arduino pin 13 - ATtiny pin 7

Arduino 5V - ATtiny pin 8

Arduino GND - ATtiny pin 4

 

Optional:

ATtiny pin 4(GND) - Negative side of the LED

ATTiny pin 3 - Resistor (330 Ohm) - Positive side of the LED

 

그리고 Tools - Burn Bootloader를 클릭해 부트 로더를 굽는다.

 

 

 

이제 모든 준비가 끝났다. 원하는 코드를 입력하고 업로드 하면 ATtiny에 프로그램이 업로드 된다.

위와 같이 LED가 1초 주기로 깜빡이는 소스를 입력 하고 Upload 해 보자. Upload가 끝나면 LED가 1초 주기로 깜빡인다.

Arduino IDE 2.X를 사용한다면 그냥 Upload 버튼으로 업로드 할 수 없다. 아래 내용을 참고한다.

 

케이블을 모두 제거 하고 3.0V 배터리만 연결해도 최대 10MHz의 속도로 작동 한다.

 

 

ATTiny85도 특별히 다른 부분은 없다. 같은 방법으로 구성하고 세팅만 위와 같이 바꿔준다.

 

Arduino IDE 2.0 부터는 프로그래머를 이용한 업로드 방법이 바뀌었다. Arduino 1.X처럼 그냥 Upload 하면 A programmer is required to upload. 라는 에러 메세지가 나온다.

위와 같이 Sketch - Upload Using Programmer를 선택해 업로드 해야 한다.

 

반응형
Posted by J-sean
: