กลับไปหน้ารวมไฟล์
kitty-bank-9eb522.md

ผมมีงานวิทยาศาสตร์ที่กำลังจะมาถึงในไม่ช้า และผมต้องการอะไรที่เจ๋งๆ! ตอนนั้นเองที่ไอเดียนี้แวบเข้ามาในหัว เมื่อผมเห็นโมดูล RC522 ที่ไม่ได้ใช้ของผมวางอยู่โดดเดี่ยวในความมืดและมีฝุ่นจับ

พูดสั้นๆ ง่ายๆ คือ "Kitty bank" นี้ทำงานโดยเริ่มต้นจากการปลดล็อกด้วย RFID card จากนั้น เมื่อคุณวางเหรียญบนช่องเปิด มันจะทำให้วงจรสมบูรณ์ ซึ่งจะกระตุ้น servo motor ให้เปิดช่องเปิด ทันทีที่ช่องเปิดเปิดออก เหรียญก็จะตกลงไปในกล่อง และวงจรก็จะไม่สมบูรณ์อีกต่อไป ช่องเปิดก็จะปิดลงอีกครั้ง

Codeexplanation:

#include 
#include
#include

การนำเข้าไลบรารี Servo, MFRC22 และ SPI

int SS_PIN = 10;
int RST_PIN = 9;
int green = 7;
int red = 6;
bool permission = false;
int reading_pin = A0;
int button_pin = 2;
int button_state = 0;

ตัวแปร Global รวมถึงขา Pin ต่างๆ

MFRC522 mfrc522 (SS_PIN, RST_PIN);
Servo servo;

ตัวแปรไลบรารีภายนอก

void setup() {
pinMode(green, OUTPUT);
pinMode(red, OUTPUT);
pinMode(reading_pin, INPUT);
pinMode(button_pin, INPUT);
Serial.begin(9600); // Initiate serial monitor
mfrc522.PCD_Init(); // Initiate MFRC522
SPI.begin(); // Initiate SPI bus
servo.attach(8); //servo pin
servo.write(0); //servo start position
}

ฟังก์ชัน setup() สำหรับ Arduino ซึ่งรวมถึงโหมดของขา Pin ทั้งหมด ตำแหน่งเริ่มต้นของ servo motor, serial monitor และอื่นๆ

void loop() {

ฟังก์ชัน loop() เริ่มต้นที่นี่!

if (permission == true) {
if (analogRead(reading_pin) >= 1000) {
servo.write(180);
delay(1000);
servo.write(0);
}
}

ส่วนนี้จะเปิดช่องเปิด หากตรวจพบว่าวงจรสมบูรณ์ (หมายเหตุ: ตัวแปร permission เป็น boolean ที่บอกโปรแกรมว่า Kitty bank ถูกปลดล็อกอยู่)

button_state = digitalRead(button_pin);
if (button_state == HIGH) {
permission = false;
digitalWrite(red, HIGH);
delay(1000);
digitalWrite(red, LOW);
}

ส่วนนี้เข้าใจได้เอง โดยพื้นฐานแล้ว เมื่อปุ่มถูกกด มันจะส่งสัญญาณแรงดันไฟฟ้าไปยังบอร์ด Arduino Uno ซึ่งจะตอบสนองด้วยการล็อก Kitty bank โดยเปลี่ยนตัวแปร permission เป็น false.

// Check if new card is present
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}

โค้ดเริ่มต้นการทำงานปกติสำหรับโมดูล RC522

//Show UID on serial monitor
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}

ดึงค่า UID tag ของการ์ดที่ถูกสแกนโดยโมดูล RC22

Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) == "THE CORRECT CARD'S UID") {
Serial.println("Authorized access");
Serial.println();
digitalWrite(green, HIGH);
delay(1000);
digitalWrite(green, LOW);
permission = true;
delay(500);
}

โค้ดส่วนนี้จะตรวจสอบว่า UID tag ตรงกับอันที่ถูกต้องหรือไม่ หากตรงกัน มันจะเปิดไฟสีเขียวเป็นเวลา 1 วินาที ตามด้วยการเปลี่ยนตัวแปร permission เป็น true.

else if (content.substring(1) != "THE CORRECT CARD'S UID") {
Serial.println(" Access denied");
permission = false;
digitalWrite(red, HIGH);
delay(1000);
digitalWrite(red, LOW);
delay(500);
}

ในทำนองเดียวกัน หากเป็นการ์ดที่ไม่ถูกต้อง มันจะเปิด LED สีแดงเป็นเวลา 1 วินาที และเปลี่ยนตัวแปร permission เป็น false.

EXPANDED TECHNICAL DETAILS

Kinetic Prop Interaction

Kitty Bank เป็นกระปุกออมสินกลไกที่ทำงานด้วยเหรียญที่น่ารัก ซึ่งใช้การตรวจจับอินฟราเรดและแอนิเมชันที่ขับเคลื่อนด้วย servo

  • Optical Coin Trigger: phototransistor หรือ IR proximity sensor ถูกวางไว้ในถาดใส่เหรียญ เมื่อวางเหรียญบนถาด เซ็นเซอร์จะกระตุ้น "Animation State" ใน Arduino
  • Synchronized Servo Choreography: จัดการ SG90 servos สองตัว; ตัวหนึ่งค่อยๆ ยก "หัวของคิตตี้" ขึ้นจากกล่อง และอีกตัวหนึ่งกวาด "อุ้งเท้า" เพื่อดึงเหรียญเข้าไปข้างใน

Sound Integration

  • Acoustic Reward: พร้อมกันกับแอนิเมชัน Arduino จะกระตุ้น piezo speaker หรือ MP3 module เพื่อเล่นเสียง "เหมียว" หรือเสียง "ขอบคุณ" ซึ่งมอบประสบการณ์การโต้ตอบแบบหลายประสาทสัมผัสที่สมบูรณ์

ข้อมูล Frontmatter ดั้งเดิม

title: "Kitty bank"
description: "A safe bank for all your coins!"
author: "analoger"
category: ""
tags:
  - "rfid"
  - "security"
  - "robots"
views: 316
likes: 1
price: 2450
difficulty: "Intermediate"
components:
  - "1x Resistor 10k ohm"
  - "1x Soldering iron (generic)"
  - "1x SG90 Micro-servo motor"
  - "1x Push button (Generic)"
  - "1x RFID-RC522 module"
  - "1x RGB Diffused Common Cathode"
  - "1x Arduino UNO"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/6ad36c39-b59f-4a79-a06e-6594a82d4dc9.ino"
  - "https://projects.arduinocontent.cc/6ad36c39-b59f-4a79-a06e-6594a82d4dc9.ino"
documentationLinks: []
passwordHash: "491f9bf8120dcf140bc7d299ab52c94bec8aedf655f38a562a3981af92b8c6b0"
encryptedPayload: "U2FsdGVkX1/mI0OU1crVSm4UEvbzj6367Vno7UMa/zQWl5RFrF8CnmZK7wzHJJ6G5or0mFTnCkCHe8oRlJw/fFs9b3VhRxM+kH3251S8B28="
seoDescription: "Build a DIY Kitty bank using Arduino and Servo to securely store your coins in this fun electronics project."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/kitty-bank-9eb522_cover.jpg"
lang: "th"