Arduino Nano
Elegoo PIR Motion Sensor Module
Elegoo Keypad
Elegoo Piezo Module
Elegoo RGB LED Module
Elegoo Relay Module
MG995 Servo
Transformer
Florescent Ballast
Neoprene Gasket Sheet
- // Arduino Coin Jar
- // pkvi
- #include <Keypad.h>
- #include <Password.h>
- #include <VarSpeedServo.h>
- VarSpeedServo jar;
- // Pins
- int piezo = A2;
- int red = A3;
- int green = A4;
- int blue = A5;
- int relay = 2;
- int jar_pin = 3;
- int pir = 4;
- // Keypad
- const byte ROWS = 4;
- const byte COLS = 4;
- char keys[ROWS][COLS] = {
- {'1', '2', '3', 'A'},
- {'4', '5', '6', 'B'},
- {'7', '8', '9', 'C'},
- {'*', '0', '#', 'D'}
- };
- byte rowPins[ROWS] = {5, 6, 7, 8};
- byte colPins[COLS] = {9, 10, 11, 12};
- Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
- // Set Passcode
- Password passcode = Password( "947" );
- // States
- int closed = 88;
- int opened = 30;
- int open_state = 0;
- int pir_state = 0;
- int motion;
- void setup() {
- Serial.begin(9600);
- // Pin Placements
- jar.attach(jar_pin);
- pinMode(piezo, OUTPUT);
- pinMode(red, OUTPUT);
- pinMode(green, OUTPUT);
- pinMode(blue, OUTPUT);
- pinMode(relay, OUTPUT);
- pinMode(pir, INPUT);
- // Keypad Listener
- keypad.addEventListener(keypadEvent);
- // Close Jar
- jar.write(closed, 200, true);
- // No Buzz
- noTone(piezo);
- // No Zap
- digitalWrite(relay, LOW);
- // Activate
- // Form of Coin Jar
- while (millis() < 2000)
- {
- digitalWrite(blue, HIGH);
- delay(50);
- digitalWrite(blue, LOW);
- delay(50);
- }
- digitalWrite(green, LOW);
- digitalWrite(red, HIGH);
- pir_state = 1;
- }
- void loop() {
- keypad.getKey();
- motion_sensor();
- }
- void keypadEvent(KeypadEvent eKey) {
- switch (keypad.getState()) {
- case PRESSED:
- Serial.println(eKey);
- button();
- switch (eKey) {
- case '#': check_passcode(); break;
- case '*': passcode.reset(); break;
- default: passcode.append(eKey);
- }
- }
- }
- void check_passcode() {
- if (passcode.evaluate()) {
- if (open_state == 0) {
- open_coin_jar();
- passcode.reset();
- } else if (open_state == 1) {
- close_coin_jar();
- passcode.reset();
- }
- } else {
- digitalWrite(blue, LOW);
- digitalWrite(green, LOW);
- while (millis() < 2000) {
- digitalWrite(red, HIGH);
- delay(50);
- digitalWrite(red, LOW);
- delay(50);
- }
- }
- }
- void open_coin_jar() {
- pir_state = 0;
- digitalWrite(green, HIGH);
- digitalWrite(red, LOW);
- digitalWrite(relay, LOW);
- jar.write(opened, 200, true);
- open_state = 1;
- }
- void close_coin_jar() {
- jar.write(closed, 200, true);
- open_state = 0;
- pir_state = 1;
- }
- void motion_sensor() {
- if (pir_state == 1) {
- digitalWrite(red, HIGH);
- digitalWrite(green, LOW);
- motion = digitalRead(pir);
- if (motion == HIGH) {
- digitalWrite(relay, HIGH);
- delay(1000);
- digitalWrite(relay, LOW);
- }
- } else if (pir_state == 0) {
- digitalWrite(red, LOW);
- digitalWrite(green, HIGH);
- digitalWrite(relay, LOW);
- }
- }
- void button() {
- digitalWrite(red, LOW);
- digitalWrite(green, LOW);
- digitalWrite(blue, HIGH);
- tone(piezo, 1000);
- delay(250);
- digitalWrite(blue, LOW);
- noTone(piezo);
- }