스마트 저금통 만들기: 아두이노 나노로 동전 인식기 제어하기
부품 및 소모품
| 부품 |
수량 |
| Arduino Nano R3 |
1 |
| 동전 인식기 (Coin Acceptor) |
1 |
| 4자리 TM1637 LED 디스플레이 |
1 |
앱 및 온라인 서비스
프로젝트 소개
이 프로젝트의 목적은 아두이노로 동전 인식기를 제어하는 코드를 작성해 다른 프로젝트에서도 활용할 수 있게 하는 것입니다. 특히 딸을 위한 잔액 표시 기능이 있는 스마트 저금통을 만드는 것이 목표였습니다.
코드
아두이노로 동전 인식기 제어하기
// Mario's Ideas
// 아두이노로 동전 인식기 제어
#include <Arduino.h>
#include <TM1637Display.h>
#include <EEPROM.h>
// 모듈 연결 핀 (디지털 핀)
#define CLK 3
#define DIO 4
TM1637Display display(CLK, DIO);
// 임펄스 간격 측정용 변수
int i = 0;
// 감지된 임펄스 수
int impulsCount = 0;
// 투입된 모든 동전 합계
float total_amount = 0;
void setup() {
Serial.begin(9600);
display.setBrightness(0x0f);
// 핀 D2(인터럽트 0)에 연결, HIGH→LOW 낙하 에지에서 incomingImpuls 실행
attachInterrupt(0, incomingImpuls, FALLING);
EEPROM.get(0, total_amount);
display.clear();
}
void incomingImpuls() {
impulsCount++;
i = 0;
}
void loop() {
i++;
Serial.print("i="); Serial.print(i);
Serial.print(" Impulses:"); Serial.print(impulsCount);
Serial.print(" Total:"); Serial.println(total_amount);
// 30카운트(약 0.3초) 동안 추가 임펄스 없으면 동전 1개로 판정
if (i >= 30 && impulsCount == 1) { total_amount += 2; impulsCount = 0; EEPROM.put(0, total_amount); }
if (i >= 30 && impulsCount == 2) { total_amount += 1; impulsCount = 0; EEPROM.put(0, total_amount); }
if (i >= 30 && impulsCount == 3) { total_amount += 0.5; impulsCount = 0; EEPROM.put(0, total_amount); }
if (i >= 30 && impulsCount == 4) { total_amount += 0.2; impulsCount = 0; EEPROM.put(0, total_amount); }
if (i >= 30 && impulsCount == 5) { total_amount += 0.1; impulsCount = 0; EEPROM.put(0, total_amount); }
// 디스플레이 출력 (소수점 처리)
if (total_amount < 10)
display.showNumberDecEx(total_amount * 10, 0b10000000, true, 2, 2);
else
display.showNumberDecEx(total_amount * 10, 0b00100000, false, 4, 0);
}
회로도
동전 인식기, TM1637 디스플레이, 아두이노 나노 간 연결 회로도가 제공됩니다.