เป้าหมายของโปรเจคนี้คือเขียนโค้ดควบคุมเครื่องรับเหรียญ (Coin Acceptor) ด้วย Arduino เพื่อเอาไปใช้ในงานอื่นๆ ต่อได้ จริงๆ พี่คิดไว้จะทำกระปุกออมสินอัจฉริยะที่รู้ยอดให้ลูกสาวน่ะ แต่น้องเอาไปประยุกต์ได้เต็มที่เลย
Vending Telemetry: ต่อวงจรเครื่องรับเหรียญระดับโรงงาน
การแปลงเงินเหรียญโลหะเป็นเครดิตดิจิทัลต้องอาศัยความแม่นยำระดับนาโนวินาที! โปรเจคนี้จะต่อเครื่องรับเหรียญระดับตู้เกม/ตู้กดน้ำ (แบบ CH-926) เข้ากับ Arduino โดยตรง! ฟังพี่ให้ดี ห้ามใช้ digitalRead() ใน loop() ธรรมดามาตรวจสอบเด็ดขาด! เพราะเครื่องรับเหรียญมันยิงสัญญาณเป็นพัลส์เร็วปรี๊ดแค่ 20 มิลลิวินาที ถ้า Arduino กำลังยุ่งวาดภาพ LCD อยู่ สัญญาณหาย! ตู้จะกลายเป็นขโมยเงินลูกค้าไปซะงั้น!
กฎเหล็กของ Hardware Interrupt (attachInterrupt)
เพื่อความแม่นยำ 100% ไร้ข้อผิดพลาด ระบบต้องใช้ Interrupt จากซิลิคอนโดยตรง!
- สายสัญญาณจากเครื่องรับเหรียญ ต้องต่อตรงเข้า Arduino ขา 2 หรือ ขา 3 (บน Uno มีแค่สองขานี้แหละที่รองรับ Hardware Interrupt!)
- Interrupt Service Routine (ISR) จะหยุดการทำงานทุกอย่างในตัวประมวลผลหลักทันทีที่เหรียญตก!
volatile int totalCredits = 0; // ต้องใส่ volatile! เพราะค่าจะถูกเปลี่ยนจากที่อื่นโดยไม่รู้ตัว!
void setup() {
// ถ้าสัญญาณจากเครื่องรับเหรียญเปลี่ยนจาก 5V ลงมา 0V:
attachInterrupt(digitalPinToInterrupt(2), coinInsertedISR, FALLING);
}
// ฟังก์ชันนี้จะทำงานทันทีแบบแบ็กกราวนด์ ไม่สน delay() ใน loop()!
void coinInsertedISR() {
totalCredits++; // จับตังค์ให้มั่น!
}
อันตรายจากสัญญาณ 12V ลง 5V (Level Shifting)
เครื่องรับเหรียญระดับโรงงาน ใช้ไฟเลี้ยงหลัก 12 โวลต์ เพื่อขับโซลินอยด์ป้องกันเหรียญติดและระบบตรวจสอบภายใน
- สายสัญญาณมันจะส่งพัลส์ออกมาแรง 12V!
- อันตรายสูง: ถ้าน้องต่อสายสัญญาณ 12V เข้า Arduino ขา 2 โดยตรง ชิป
ATmega328Pจะไหม้เป็นจุณทันที! - น้องต้องสร้าง วงจรแบ่งแรงดัน (Voltage Divider) (ใช้ตัวต้านทาน 10K กับ 4.7K) หรือใช้ Logic Level Converter เพื่อลดสัญญาณจาก 12V ให้เหลือ 5V ที่ปลอดภัย ก่อน เข้าขา Interrupt!
อุปกรณ์ที่ต้องมี (จัดเต็ม)
- Arduino Uno/Nano (สำหรับความสามารถ Hardware Interrupt)
- เครื่องรับเหรียญหลายชนิด (CH-926 / JY-926) (โปรแกรมไว้แล้วให้จับค่า น้ำเหรียญ/เส้นผ่านศูนย์กลาง/คุณสมบัติโลหะ ได้เอง)
- ชิ้นส่วนวงจรแบ่งแรงดัน (ตัวต้านทาน 10K / 4.7K โอห์ม)
- Adaptor ไฟเลี้ยง 12V ตัวเบิ้ม (ใช้เลี้ยงเครื่องรับเหรียญโดยเฉพาะ ห้ามเอาไฟจาก Arduino 5V ไปเลี้ยงเด็ดขาด!)
- รีเลย์โมดูล (สำหรับสั่งจ่ายสินค้าหรือเปิดเกมเมื่อตัวแปร
totalCreditsครบตามที่ตั้งไว้! สู้งานนะน้อง!)