1.8인치 TFT LCD 모듈 | 아두이노(Uno/Pro Mini) | 비고 |
---|---|---|
SCK | 13 | |
SDA | 11 | |
A0 | 9 | |
RESET | 8 | |
CS | 10 | |
GND | GND | |
CC | VCC | +5V, +3.3V 모두 가능 |
LED+ | 3 (PWM) | PWM 핀이면 아무나 가능 |
LED- | GND | |
SD MISO | 12 | |
SD SCK | 13 | LCD의 SCK와 동일 |
SD MOSI | 11 | LCD의 SDA와 동일 |
SD CS | 4 |
소스코드의 길이가 길어 링크로 대신함
디버깅 콘솔 소스코드
집에 가스렌지 스위치가 월패드로 원격 닫힘 기능이 가능하지만 ZIGBEE가 지원되지 않아 외출 중에 가스를 잠글 수 없는 구조로 되어있다.
DIY 하기 귀찮아 인터넷에서 검색 해 봤으나 인터넷에서 팔리는 제품의 경우 필자의 집에서는 적용하기 어려운 구조라 이를 직접 만들어 적용해 보기로 한다.
집 밖에서 외출중에 원격으로 가스 밸브를 잠그는 것이 본 프로젝트의 목적이기 때문에, 보안을 위해 웹 페이지가 아닌 Android 프로그램을 통한 Packet 통신으로 구현하도록 한다.
개시 : 2019년 01월 18일
작업 명 | 진행 상황 | 진행 율 |
---|---|---|
1. 프로젝트 구상 | 통신 프로토콜 남음 | |
2. 재료 준비 | 완료 | |
3. 회로도 제작 | 완료 | |
4. HW 제작 | 완료 | |
5. HW 디버깅(유닛 테스트) | 모두 정상 동작 확인 완료 | |
6. 아두이노 프로그램 제작 | 제작 완료 | |
7. 테스트 | 테스트 완료 |
개발 완료 : 2019년 02월 27일
현재 본인의 집에 본 기기가 필요 없게 되 버렸다.
신규 아파트의 경우 월패드에서 동작되는 모든 기능이 스마트 앱을 이용하여 폰에서 동작하도록 되 있다.
그 결과 그 앱으로 밸브를 잠글 수 있게 되었다.
그래도 테스트까지 마무리하여 향후 다른 프로젝트에 사용할 수 있는 기반을 만들었다.
IOT 기기를 만들기 위한 회로도는 아래 그림과 같다.
Fritzing 회로도 다운로드
PC용 아케이드 게임을 2인용으로 할 수 있도록 조이스틱을 제작한다.
프로젝트 개시 : 2018년 10월 02일
프로젝트 완료 : 2019년 03월 10일
부품 구하는데 시간이 오래 걸렸다.
현재 버튼이 뻑뻑해서 모두 교체할 예정이다.
본 라이브러리를 사용하면 라이브러리 자체에서 본 기기를 조이스틱으로 장치를 생성시켜 준다.
조이스틱 모듈의 X와 Y의 아나로그 값하고 버튼의 상태만 라이브러리에 입력하면 조이스틱이 완성된다.
본인이 사용한 라이브러리는 다음 사이트로 이동하여 다운받는다.
Download Joystick Library by Matthew Heironimus
다음과 같은 장치로 인식된다.
조이스틱을 만들기위해 Arduino와 주변 기기들간 연결을 다음과 같이 한다.
아두이노 Pro Micro | 주변 기기 | 비고 |
---|---|---|
A2 | JOYSTICK 모듈 VRx | |
A1 | JOYSTICK 모듈 VRy | |
A0 | 버튼1 | |
D9 | 버튼1 | |
D10 | 버튼1 | |
D11 | 버튼1 | |
TX | 버튼1 | D1 핀 겸용 |
RX | 버튼1 | D0 핀 겸용 |
SDA | 버튼1 | D2 핀 겸용 |
SDL | 버튼1 | D3 핀 겸용 |
#include <Joystick.h> const long pinJoystickAxisX = A2; const long pinJoystickAxisY = A1; const long pinButtonPlayerStart = A0; const long pinButtonCoin = 9; const long pinButtonA = 3; const long pinButtonB = 2; const long pinButtonC = 0; const long pinButtonX = 10; const long pinButtonY = 11; const long pinButtonZ = 1; Joystick_ Joystick; struct { bool analog; int pin; int state; int button; const char * name; } joystick_buttons[] = { { false, pinButtonA, LOW, 0, "buttonA" }, { false, pinButtonB, LOW, 1, "buttonB" }, { false, pinButtonC, LOW, 2, "buttonC" }, { false, pinButtonX, LOW, 4, "buttonX" }, { false, pinButtonY, LOW, 5, "buttonY" }, { false, pinButtonZ, LOW, 6, "buttonZ" }, { true, pinButtonPlayerStart, 0, 8, "buttonPlayerStart" }, { false, pinButtonCoin, LOW, 9, "buttonCoin" }, }; const long NUM_BUTTONS = sizeof(joystick_buttons) / sizeof(joystick_buttons[0]); struct _AXIS_ { int pin; int value; const char * name; } joystik_axis[] = { { pinJoystickAxisX, 0, "AxisX" }, { pinJoystickAxisY, 0, "AxisY" }, }; const long NUM_AXIS = sizeof(joystik_axis) / sizeof(joystik_axis[0]); void setup() { Serial.begin(9600); Serial.println("joystick startup..."); // Initialize Joystick Library Joystick.setXAxisRange(0, 255); Joystick.setYAxisRange(0, 255); Joystick.begin(); } void loop() { // Read pin values for (int index = 0; index < NUM_BUTTONS; index++) { int currentButtonState = LOW; auto & btn = joystick_buttons[index]; if( btn.analog ) { currentButtonState = analogRead(btn.pin); if( currentButtonState > 1000 ) currentButtonState = HIGH; else currentButtonState = LOW; } else { currentButtonState = digitalRead(btn.pin); } if (currentButtonState != btn.state) { btn.state = currentButtonState; Joystick.setButton(btn.button, currentButtonState); if( currentButtonState ) { Serial.println(String(btn.name) + " is pushed"); } else { Serial.println(String(btn.name) + " is released"); } } } for (int index = 0; index < NUM_AXIS; index++) { int cur = 0; auto & axis = joystik_axis[index]; cur = analogRead(axis.pin) / 4; if (cur != axis.value) { axis.value = cur; if( axis.pin == pinJoystickAxisX ) { Joystick.setXAxis(cur); } else if( axis.pin == pinJoystickAxisY ) { Joystick.setYAxis(256-cur); } } } }
본 프로젝트는 사람들이 화분을 키우다가 물을 주지 않아 말라 죽는 상황을 조금이나마 해소하고자 하는 바람에 수분 측정 기기를 만들기로 한다.
본인 역시 화분 키우기에 익숙하지 않아 초기에는 물을 주기적으로 몇번 주다가 금새 까먹고 말려죽인 화분이 한 두개가 아니다.
현재 본인의 아이들 역시 화분에 씨앗을 키우고자 하고 있는데 본인처럼 물을 주지않고 화분의 식물이 목말라 죽는 문제를 미연에 방지하고자 한다.
본 센서는 LED로 화분 토양 속 수분의 양을 표시한다.
CDS 광 센서를 이용해서 집안에 불이 꺼질경우 LED 역시 작동을 중지해서 빛 공해를 어느정도 해소하도록 한다.
인체 감지용 레이더 센서를 이용해서 근처에 있는 사람이 감지 될 경우 소리로 관심을 유도토록 한다.
프로젝트 시작 : 2019년 03월 13일
프로젝트 종료 : —-년 –월 –일
DigisPark | Pro-Mini | 소재 | 설명 |
---|---|---|---|
D5/A0 | D2 | RCWL-0516 | 디지털 사람 인기척 감지 센서 |
D4/A2 | A1 | CDS | 아날로그 광조도 센서 (불꺼지면 동작 중지 : 빛공해 방지) |
D3/A3 | D8 | 스피커 | 소리 출력/알림 (PWM) |
D2/A1 | A0 | 습도센서 | 흙 습도 측정 센서 |
D1 | D9 | LED | 물 부족 알림 |
D0 |
이번 프로젝트는 DVD Writer에서 떼어낸 리니어 모터와 레이저를 이용하여 각인기를 만들도록 한다.
CNC 각인기는 CNC 공작기계와 마찬가지로 가공하고자 하는 명령을 G-CODE로 입력하면 알아서 가공을 한다.
DVD Writer 2대에서 리니어 모터 2개와 레이저 2개를 빼내도록 한다.