สารบัญ:

เครื่องจำหน่ายสินค้าอัตโนมัติที่ใช้ Arduino มูลค่า 1 เหรียญ: 8 ขั้นตอน
เครื่องจำหน่ายสินค้าอัตโนมัติที่ใช้ Arduino มูลค่า 1 เหรียญ: 8 ขั้นตอน

วีดีโอ: เครื่องจำหน่ายสินค้าอัตโนมัติที่ใช้ Arduino มูลค่า 1 เหรียญ: 8 ขั้นตอน

วีดีโอ: เครื่องจำหน่ายสินค้าอัตโนมัติที่ใช้ Arduino มูลค่า 1 เหรียญ: 8 ขั้นตอน
วีดีโอ: D.I.Y ทำเครื่องหยอดเหรียญล้างรถ ดูยอดรายได้ผ่านมือถือ เครื่องหยอดเหรียญมาแล้ว 2024, พฤศจิกายน
Anonim
Image
Image
ปลอก
ปลอก

เราได้รับแนวคิดจากอาจารย์ด้านวิศวกรรมของเรา เราทุกคนต่างก็คิดว่าควรมีตู้จำหน่ายสินค้าอัตโนมัติสำหรับชั้นเรียนของเรา และเขากล่าวว่า "เจ๋งมาก สร้างขึ้นมาเลย" ปรากฎว่าตู้จำหน่ายสินค้าอัตโนมัติจะเป็นโครงการอาวุโสที่ยอดเยี่ยม และเมื่อเสร็จสมบูรณ์ก็จะทำหน้าที่เป็นกองทุนสำหรับโครงการวิศวกรรมของเรา

มันถูกเรียกว่าเครื่องขายแสตมป์อัตโนมัติมูลค่า 1 เหรียญ ไม่ใช่เพราะต้นทุนการผลิต 1 เหรียญ แต่เพียงเพราะเครื่องรับใบเรียกเก็บเงินเป็นเครื่องรุ่นเก่าที่ใช้ธนบัตรเพียง 1 เหรียญเท่านั้น:)

ขั้นตอนที่ 1: เกณฑ์

เราต้องการตู้จำหน่ายสินค้าอัตโนมัติที่วางบนโต๊ะและไม่สูงเกินไป เราใช้ขนาดความกว้างของโต๊ะเพื่อให้แน่ใจว่าไม่มีตู้ขายของอัตโนมัติห้อยลงมาจากโต๊ะ

ขั้นตอนที่ 2: ปลอก

ปลอก
ปลอก
ปลอก
ปลอก
ปลอก
ปลอก

เราทำกล่องกว้าง 19 นิ้ว ยาว 17 นิ้ว สูง 25 นิ้ว เราใช้เครื่อง CNC ตัดไม้ เราใช้ Solidworks เพื่อออกแบบใบหน้าแล้วแปลงเป็นประเภทไฟล์รูปวาดสำหรับซอฟต์แวร์ CNC ของเรา เราขัดขอบแล้วขันด้วย 1 ¼” เราติดแผงด้านหน้าด้วยบานพับและใช้สกรู ¼ “เพื่อไม่ให้สกรูทะลุไปอีกด้าน เรายังใช้กระจกอะครีลิคซึ่งเราตัดสำหรับชั้นวางและแผงด้านหน้า

ขั้นตอนที่ 3: อุปกรณ์อิเล็กทรอนิกส์

อิเล็กทรอนิกส์
อิเล็กทรอนิกส์
อิเล็กทรอนิกส์
อิเล็กทรอนิกส์
อิเล็กทรอนิกส์
อิเล็กทรอนิกส์
อิเล็กทรอนิกส์
อิเล็กทรอนิกส์

Arduino

เราใช้บอร์ด Arduino Mega 2560 นอกจากนี้เรายังใช้บอร์ด Adafruit Motor เพื่อให้สามารถใช้สเต็ปเปอร์มอเตอร์ได้ เราได้เพิ่มหมุดไปที่ adafruit's เพื่อให้เชื่อมต่อกันได้ ถูกสอดเข้าทับกัน แต่ละตัวสามารถวิ่งได้ 2 มอเตอร์ นอกจากนี้ โปรดทราบว่าต้องเชื่อมต่อจัมเปอร์

เดสก์ท็อปพาวเวอร์ซัพพลาย

แหล่งจ่ายไฟ Bestek ATX โดยใช้อะแดปเตอร์เพื่อให้แหล่งจ่ายไฟเปิดอยู่ อะแดปเตอร์นี้มาจาก sparkfun.com และให้แรงดันไฟฟ้าที่หลากหลาย

คอยล์เป็นมอเตอร์

เราทำโมเดล Solidworks เพื่อยึดมอเตอร์ จับคอยล์ และนำคอยล์ไปตามชั้นวาง เราได้บรรลุขดลวดของเราจากอีเบย์และตัดให้เป็นมิติ เราต้องโค้งงอ 3 อันด้วยเนื่องจากเราไม่ได้ 6 ด้วยปลายตรงเพื่อเชื่อมต่อกับคอยล์ จากนั้นเราพิมพ์ 3D แล้วติดเข้ากับคอยล์และมอเตอร์ เราใส่สเต็ปเปอร์มอเตอร์ที่เรามี มันจะจับมอเตอร์และนำคอยล์ไปตามทางตรง

LCD และปุ่มกด

เราใช้ปุ่มกด Arduino และหน้าจอ LCD ที่เชื่อมต่อกับตะกั่ว 5V บนอะแดปเตอร์จ่ายไฟสำหรับจ่ายไฟ จากนั้นจึงเสียบเข้ากับบอร์ด Arduino เดียวกัน

การเดินสายไฟ

เราแนะนำให้ใช้สายวัด 18 เส้น กรณีของเราต้องประนีประนอมโดยใช้เกจต่างๆ เพราะเราหมดไป 18 เกจ

แถบ LED

เราใช้แถบ LED เพื่อทำให้เครื่องสว่างขึ้น เราเชื่อมต่อกับสายไฟ 12V บนอะแดปเตอร์จ่ายไฟ โชคดีที่เราเคยใช้แถบ LED ที่มีเครื่องหมาย + และ - ซึ่งทำให้กระบวนการเชื่อมต่อง่ายขึ้น

ขั้นตอนที่ 4: ผู้รับบิล

ผู้รับบิล
ผู้รับบิล
ผู้รับบิล
ผู้รับบิล
ผู้รับบิล
ผู้รับบิล
ผู้รับบิล
ผู้รับบิล

เราใช้ Coinco BA30B เป็นตัวรับบิลของเรา ต้องเชื่อมต่อโดยตรงกับผนังเป็นแหล่งพลังงาน เรารวมเข้ากับอะแดปเตอร์ 24 พินจากแหล่งจ่ายไฟ atx เพื่อเสียบปลั๊กและช่วยให้เดินสายได้ง่ายขึ้น pinouts ที่เราติดตามอยู่ในลิงค์ต่อไปนี้:

techvalleyprojects.blogspot.com/2011/07/ard…

ในกรณีของเรา เราต้องสร้างที่ยึดเพื่อยกตัวรับบิล เพราะไม่เช่นนั้น มันจะต่ำเกินไปสำหรับเคสของเรา

ขั้นตอนที่ 5: การทดสอบ

ทดสอบอุปกรณ์อิเล็กทรอนิกส์ภายนอกเคสก่อนเพื่อให้แน่ใจว่าส่วนประกอบทำงาน ปัญหาที่เกิดขึ้นควรได้รับการแก้ไขก่อนวางลงในเคส

ขั้นตอนที่ 6: อุปกรณ์อิเล็กทรอนิกส์สู่ปลอก

เมื่อคุณได้ทดสอบอุปกรณ์อิเล็กทรอนิกส์และพอใจกับผลลัพธ์แล้ว ให้เริ่มใส่ลงในเคสของคุณ ปรับความยาวของลวดเพื่อให้พอดีกับภายใน

ขั้นตอนที่ 7: การทดสอบขั้นสุดท้าย

เมื่อใส่ลงในเคสแล้ว ให้ทดสอบทุกอย่างอีกครั้ง หากทุกอย่างเป็นไปตามที่คุณคาดหวัง ยินดีด้วย! คุณทำเครื่องขายแสตมป์อัตโนมัติ

ขั้นตอนที่ 8: รหัส Arduino + ลิงค์

ดาวน์โหลด:

รหัส Arduino

drive.google.com/drive/folders/1oC4MhOcMFy…

โฟลเดอร์ SolidWorks พร้อมไฟล์ชิ้นส่วนและการประกอบ

drive.google.com/drive/folders/1amZoypiWcZ…

ในกรณีที่มีบางอย่างเกิดขึ้นกับลิงก์ นี่คือรหัส Arduino ที่แสดงอย่างสมบูรณ์ รหัส Arduino <<

#include #include #include "Arduino.h" #include #include #include "utility/Adafruit_MS_PWMServoDriver.h" #include

const int stepsPerRevolution = 200; ไบต์ const ROWS = 4; //สี่แถว const ไบต์ COLS = 3; // คีย์อักขระสามคอลัมน์ [ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; ไบต์ rowPins[ROWS] = {5, 6, 7, 8}; //เชื่อมต่อกับ pinouts แถวของแป้นพิมพ์ไบต์ colPins[COLS] = {2, 3, 4}; // เชื่อมต่อกับ pinouts ของคอลัมน์ของปุ่มกด ปุ่มกด = ปุ่มกด (makeKeymap (คีย์), rowPins, colPins, ROWS, COLS); Adafruit_MotorShield AFMS1 = Adafruit_MotorShield (); Adafruit_StepperMotor *myMotor1 = AFMS1.getStepper(-200, 1); Adafruit_StepperMotor *myMotor2 = AFMS1.getStepper(-200, 2); Adafruit_MotorShield AFMS2 = Adafruit_MotorShield(0x61); Adafruit_StepperMotor *myMotor3 = AFMS2.getStepper(-200, 1); Adafruit_StepperMotor *myMotor4 = AFMS2.getStepper(-200, 2); Adafruit_MotorShield AFMS3 = Adafruit_MotorShield(0x62); Adafruit_StepperMotor *myMotor5 = AFMS3.getStepper(-200, 1); Adafruit_StepperMotor *myMotor6 = AFMS3.getStepper(-200, 2); Adafruit_MotorShield AFMS4 = Adafruit_MotorShield(0x63); Adafruit_StepperMotor *myMotor7 = AFMS4.getStepper(-200, 1); Adafruit_StepperMotor *myMotor8 = AFMS4.getStepper(-200, 2); LiquidCrystal LCD (1, 11, 9, 10, 12, 13); // หมุดดิจิตอลที่จอแอลซีดีเชื่อมต่อกับ // ค่าคงที่ // // พินสำหรับเครดิตของผู้ตรวจสอบการเรียกเก็บเงิน (-) บรรทัด const int billValidator = 22;

// ตัวแปร /

/ บันทึกระยะเวลาของชีพจร (มิลลิวินาที) ระยะเวลานานที่ไม่ได้ลงนาม;

// ถือเงินดอลลาร์ทั้งหมดที่บันทึกไว้ int dollarCounter = 0; การตั้งค่าเป็นโมฆะ () { lcd.begin (16, 1); //ตั้งค่าพิกัดข้อความ LCD lcd.print("ใส่ $1 เท่านั้น"); //ตั้งค่าข้อความ Serial.begin(9600); // เริ่มต้นพอร์ตอนุกรมสำหรับการสื่อสาร Serial.println("การทดสอบ Stepper!"); //พิมพ์ Stepper Test ในมอนิเตอร์แบบอนุกรมเพื่อให้เราทราบว่ามีการกดสเต็ปเปอร์มอเตอร์ตัวใด AFMS1.begin(); AFMS2.begin(); AFMS3.begin(); AFMS4.begin(); myMotor1->setSpeed(100); //ตั้งค่าความเร็วมอเตอร์ที่พวกเขาจะเรียกใช้ myMotor2->setSpeed(100); myMotor3->setSpeed(100); myMotor4->setSpeed(100); myMotor5->setSpeed(100); myMotor6->setSpeed(100); myMotor7->setSpeed(100); myMotor8->setSpeed(100); // การตั้งค่าพินสำหรับตัวตรวจสอบการเรียกเก็บเงินและปุ่ม pinMode (billValidator, INPUT); //ตั้งค่าตัวเรียกเก็บเงิน

// เริ่มต้นพอร์ตอนุกรมสำหรับการสื่อสาร Serial.begin(9600); Serial.println("กำลังรอเงินดอลลาร์…"); } วงเป็นโมฆะ () { { ระยะเวลา = pulseIn (bilValidator, สูง); //เริ่มค้นหาความยาวพัลส์ที่ได้รับจากตัวรับบิลหาก (duration > 12000) //ค่าที่ต้องเกินเพื่อตรวจสอบว่าเป็นดอลลาร์ที่ประมวลผลและแท้จริงแล้ว { // Count dollar dollarCounter++; // กำลังตรวจสอบความเข้าใจ Serial.print("Dollar found.\n Total: "); // แสดงการนับดอลลาร์ใหม่ Serial.println(dollarCounter); //วนซ้ำเพื่อรอจนกว่าจะกดปุ่มในขณะที่ (duration > 12000){ char key = keypad.getKey(); // เชื่อมต่อคีย์เวิร์ดและเริ่มดูว่ามีการกดแป้นใด (คีย์ != NO_KEY) { //จะมองหาคีย์ที่กด Serial.println (คีย์); // แจ้งให้เราทราบว่าอันไหนถูกกดในมอนิเตอร์แบบอนุกรม } { if (key == '1') { // หากกดคีย์ 1 ให้ทำดังนี้: int keyPressed = key - '1'; myMotor8->ขั้นตอน (580, ไปข้างหน้า, สองเท่า); //สตาร์ทมอเตอร์และหมุนไป 350 องศาในทิศทางไปข้างหน้า myMotor8->ปล่อย(); //ปล่อยมอเตอร์ออกจากสถานะยึดตัวเองเข้าที่ กลับ; //กลับไปที่จุดเริ่มต้นของโค้ดวนซ้ำ }

if (key == '2') { //หากกด Key 2 ให้ทำดังต่อไปนี้: int keyPressed = key - '2'; myMotor7->ขั้นตอน (400, ไปข้างหน้า, สองเท่า); //สตาร์ทมอเตอร์และหมุนไป 350 องศาในทิศทางไปข้างหน้า myMotor7->ปล่อย(); //ปล่อยมอเตอร์ออกจากสถานะยึดตัวเองเข้าที่ กลับ; // กลับไปที่จุดเริ่มต้นของโค้ดวนซ้ำ } if (key == '3') { //หากกดคีย์ 3 ให้ทำดังนี้: int keyPressed = key - '3'; myMotor6->ขั้นตอน (400, ไปข้างหน้า, สองเท่า); //สตาร์ทมอเตอร์และหมุนไป 350 องศาในทิศทางไปข้างหน้า myMotor6->ปล่อย(); //ปล่อยมอเตอร์ออกจากสถานะยึดตัวเองเข้าที่ กลับ; // กลับไปที่จุดเริ่มต้นของโค้ดวนซ้ำ } if (key == '4') { //หากกดคีย์ 4 ให้ทำดังนี้: int keyPressed = key - '4'; myMotor5->ขั้นตอน (180, ไปข้างหน้า, สองเท่า); //สตาร์ทมอเตอร์และหมุนไป 350 องศาในทิศทางไปข้างหน้า myMotor5->ปล่อย(); //ปล่อยมอเตอร์ออกจากสถานะยึดตัวเองเข้าที่ กลับ; // กลับไปที่จุดเริ่มต้นของโค้ดวนซ้ำ } if (key == '5') { //หากกดคีย์ 5 ให้ทำดังนี้: int keyPressed = key - '5'; myMotor4->ขั้นตอน (6900, ไปข้างหน้า, สองเท่า); //สตาร์ทมอเตอร์และหมุนไป 350 องศาในทิศทางไปข้างหน้า myMotor4->ปล่อย(); //ปล่อยมอเตอร์ออกจากสถานะยึดตัวเองเข้าที่ กลับ; // กลับไปที่จุดเริ่มต้นของโค้ดวนซ้ำ } if (key == '6') { //หากกดคีย์ 6 ให้ทำดังนี้: int keyPressed = key - '6'; myMotor3->ขั้นตอน (400, ไปข้างหน้า, สองเท่า); //สตาร์ทมอเตอร์และหมุนไป 350 องศาในทิศทางไปข้างหน้า myMotor3->ปล่อย (); //ปล่อยมอเตอร์ออกจากสถานะยึดตัวเองเข้าที่ กลับ; // กลับไปที่จุดเริ่มต้นของโค้ดวนซ้ำ } if (key == '7') { //หากกดคีย์ 7 ให้ทำดังนี้: int keyPressed = key - '7'; myMotor7->ขั้นตอน (400, ไปข้างหน้า, สองเท่า); //สตาร์ทมอเตอร์และหมุนไป 350 องศาในทิศทางไปข้างหน้า myMotor7->ปล่อย(); //ปล่อยมอเตอร์ออกจากสถานะยึดตัวเองเข้าที่ กลับ; // กลับไปที่จุดเริ่มต้นของโค้ดวนซ้ำ } if (key == '8') { //หากกดคีย์ 8 ให้ทำดังนี้: int keyPressed = key - '8'; myMotor8->ขั้นตอน (400, ไปข้างหน้า, สองเท่า); //สตาร์ทมอเตอร์และหมุนไป 350 องศาในทิศทางไปข้างหน้า myMotor8->ปล่อย(); //ปล่อยมอเตอร์ออกจากสถานะยึดตัวเองเข้าที่ กลับ; //กลับไปที่จุดเริ่มต้นของโค้ดวนซ้ำ } } } } } } >>

แนะนำ: