جدول المحتويات:

آلة بيع قائمة على اردوينو 1 دولار: 8 خطوات
آلة بيع قائمة على اردوينو 1 دولار: 8 خطوات

فيديو: آلة بيع قائمة على اردوينو 1 دولار: 8 خطوات

فيديو: آلة بيع قائمة على اردوينو 1 دولار: 8 خطوات
فيديو: لازم تغير تفكيرك! عشان تبقى مشاكلك زي دي!👌 2024, يوليو
Anonim
Image
Image
غلاف
غلاف

لقد حصلنا على فكرتنا من مدرس الهندسة لدينا - اعتقدنا جميعًا أنه سيكون من الجيد أن يكون لديك آلة بيع لفصلنا وقال - "رائع ، اصنع واحدة". اتضح أن آلة البيع ستكون مشروعًا كبيرًا جدًا وعندما تكتمل ستعمل كجامعة تبرعات لبرنامجنا الهندسي.

يطلق عليها آلة بيع 1 دولار ليس لأنها تكلف دولارًا واحدًا لصنعها ، ولكن ببساطة لأن متقبل الفاتورة هو نموذج قديم لا يأخذ سوى فواتير دولار واحد:)

الخطوة 1: المعايير

أردنا آلة بيع يمكن وضعها على سطح مكتب وليست طويلة جدًا. أخذنا أبعاد عرض الطاولة للتأكد من عدم وجود آلة بيع معلقة على الطاولة.

الخطوة 2: الغلاف

غلاف
غلاف
غلاف
غلاف
غلاف
غلاف

لقد جعلنا صندوقنا بعرض 19 بوصة وطوله 17 بوصة وطوله 25 بوصة ، واستخدمنا ماكينة CNC لقطع الخشب. استخدمنا Solidworks لتصميم الوجوه ثم قمنا بتحويلها إلى أنواع ملفات الرسم لبرنامج CNC الخاص بنا. صنفنا الحواف بالرمل ثم شدناها بـ 1”. قمنا بتوصيل اللوحة الأمامية بمفصلة واستخدمنا مسامير ¼ ، بحيث لا تمر المسامير عبر الجانب الآخر. استخدمنا أيضًا زجاج أكريليك الذي قمنا بقصه للأرفف واللوحة الأمامية.

الخطوة الثالثة: الإلكترونيات

إلكترونيات
إلكترونيات
إلكترونيات
إلكترونيات
إلكترونيات
إلكترونيات
إلكترونيات
إلكترونيات

اردوينو

استخدمنا لوحة Arduino Mega 2560. استخدمنا أيضًا لوحات Adafruit للمحركات حتى يتمكنوا من تشغيل محركات السائر. أضفنا دبابيس إلى adafruit حتى يتصلوا ببعضهم البعض. تم إدخالهم فوق بعضهم البعض. يمكن لكل واحد تشغيل محركين. أيضًا ، يرجى ملاحظة أن العبور يحتاج إلى التوصيل.

مصدر طاقة سطح المكتب

Bestek ATX Power Supply باستخدام محول للحفاظ على مصدر الطاقة. المحول من sparkfun.com ويوفر جهدًا مختلفًا.

لفائف في المحركات

لقد صنعنا نماذج سوليد ووركس لتثبيت المحرك ، والاستيلاء على الملف ، وتوجيه الملف على طول الرف. لقد حصلنا على ملفاتنا من موقع ئي باي وقطعناها إلى أبعاد. كان علينا أيضًا ثني 3 منهم لأننا لم نحصل على 6 بنهايات مستقيمة للاتصال بحامل الملف. ثم قمنا بطباعتها ثلاثية الأبعاد وربطها بالملف والمحرك. وضعنا المحركات السائر في جبل. سوف يحمل المحرك ويوجه الملف على طول مسار مستقيم.

LCD ولوحة المفاتيح

استخدمنا لوحة مفاتيح Arduino وشاشة LCD متصلة بمحول 5 فولت في محول مزود الطاقة للطاقة ثم في نفس لوحة Arduino

الأسلاك

نوصي باستخدام أسلاك قياس 18. في حالتنا ، كان علينا تقديم تنازلات باستخدام مقاييس مختلفة لأننا نفدنا من 18 مقياسًا

شريط LED

استخدمنا شريط LED لإضاءة الجهاز. قمنا بتوصيله بمحول 12 فولت في محول مزود الطاقة. كان لشريط LED الذي استخدمناه لحسن الحظ علامة + و- عليه مما جعل عملية توصيله أسهل.

الخطوة 4: متقبل الفاتورة

متقبل الفاتورة
متقبل الفاتورة
متقبل الفاتورة
متقبل الفاتورة
متقبل الفاتورة
متقبل الفاتورة
متقبل الفاتورة
متقبل الفاتورة

استخدمنا Coinco BA30B كمقبول فاتورة لدينا. يجب أن يتم توصيله مباشرة بالحائط كمصدر للطاقة. قمنا بدمجه مع محول 24 سنًا من مصدر طاقة ATX للتوصيل والسماح بتوصيل أسهل. تم العثور على pinouts الذي اتبعناه في الرابط التالي:

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

في حالتنا ، كان علينا إنشاء أداة رفع لرفع مستلم الفاتورة لأنه بخلاف ذلك سيكون منخفضًا جدًا بالنسبة للغلاف الخاص بنا.

الخطوة 5: الاختبار

اختبر الإلكترونيات خارج الغلاف أولاً للتأكد من عمل المكونات. يجب إصلاح أي مشاكل تنشأ قبل وضعها داخل الغلاف.

الخطوة 6: الإلكترونيات للغلاف

بمجرد اختبار الأجهزة الإلكترونية والرضا عن نتائجها ، ابدأ في وضعها في غلافك. اضبط أطوال الأسلاك لتناسب الداخل بشكل مريح.

الخطوة 7: الاختبار النهائي

بمجرد وضعها في الغلاف ، اختبر كل شيء مرة أخرى. إذا كان كل شيء يعمل كما توقعت ، فتهانينا! لقد صنعت آلة بيع.

الخطوة 8: كود اردوينو + الروابط

التحميلات:

كود اردوينو

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

SolidWorks Folder مع ملفات الجزء والتجميع

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

فقط في حالة حدوث شيء ما للرابط ، إليك كود اردوينو معروضًا بالكامل. كود اردوينو <<

# تضمين # تضمين # تضمين "Arduino.h" # تضمين # تضمين # تضمين "الأداة المساعدة / 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} ؛ // الاتصال بدبابيس الصف الخاصة بـ colPins بايت لوحة المفاتيح [COLS] = {2 ، 3 ، 4} ؛ // الاتصال بأعمدة pinouts الخاصة بلوحة المفاتيح Keypad keypad = لوحة المفاتيح (makeKeymap (keys) ، 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) ؛ // Digital Pins يتم توصيل شاشة LCD بـ // ثوابت // // دبوس لائتمان مدقق الفاتورة (-) line const int billValidator = 22 ؛

// المتغيرات /

/ تسجيل مدة النبضة (مللي ثانية) مدة طويلة بدون توقيع ؛

// عقد إجمالي الدولارات المسجلة int dollarCounter = 0 ؛ إعداد باطل () {lcd.begin (16، 1) ؛ // تعيين إحداثيات شاشة lcd lcd.print ("أدخل 1 دولار فقط") ؛ // تعيين النص Serial.begin (9600) ؛ // تهيئة المنافذ التسلسلية للاتصال. Serial.println ("اختبار السائر!") ؛ // اكتب اختبار السائر في الشاشة التسلسلية حتى نعرف أي محرك متدرج مضغوط. 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) ؛ // يعين Billaccepter

// تهيئة المنافذ التسلسلية للاتصال. Serial.begin (9600) ؛ Serial.println ("في انتظار الدولار …") ؛ } حلقة فارغة () {{duration = pulseIn (billValidator، HIGH)؛ // يبدأ في البحث عن طول النبضة المستلمة من متقبل الفاتورة إذا كانت (المدة> 12000) // القيمة التي يجب أن تتجاوزها من أجل التحقق من صحتها كدولار معالج وأصيل {// Count dollar dollarCounter ++ ؛ // التحقق من فهم Serial.print ("تم الكشف عن الدولار. / n الإجمالي:")؛ // عرض عدد الدولار الجديد Serial.println (dollarCounter) ؛ // حلقة من أجل الانتظار حتى يتم الضغط على زر أثناء (المدة> 12000) {char key = keypad.getKey () ؛ // يحصل على اتصال حمل المفاتيح ويبدأ في معرفة أي واحد يتم الضغط عليه إذا (key! = NO_KEY) {// سيبحث عن مفتاح مضغوط Serial.println (مفتاح) ؛ // يتيح لنا معرفة أي واحد تم الضغط عليه في الشاشة التسلسلية} {if (key == '1') {// إذا تم الضغط على المفتاح 1 ، فقم بما يلي: int keyPressed = key - '1'؛ myMotor8-> خطوة (580 ، إلى الأمام ، مزدوج) ؛ // يبدأ المحرك ويدور لـ 350 درجة في الاتجاه الأمامي. myMotor8-> إطلاق () ؛ // يحرر المحرك من حالة ثبات نفسه في مكانه. إرجاع؛ // يعود إلى بداية رمز الحلقة}

إذا (المفتاح == '2') {// إذا تم الضغط على المفتاح 2 ، فقم بما يلي: int keyPressed = key - '2'؛ myMotor7-> خطوة (400 ، إلى الأمام ، مزدوجة) ؛ // يبدأ المحرك ويدور لمدة 350 درجة في الاتجاه الأمامي. myMotor7-> إطلاق () ؛ // يحرر المحرك من حالة ثبات نفسه في مكانه. إرجاع؛ // يعود إلى بداية رمز الحلقة} إذا (key == '3') {// إذا تم الضغط على المفتاح 3 ، فقم بما يلي: int keyPressed = key - '3'؛ myMotor6-> خطوة (400 ، إلى الأمام ، مزدوجة) ؛ // يبدأ المحرك ويدور لـ 350 درجة في الاتجاه الأمامي. myMotor6-> إطلاق () ؛ // يحرر المحرك من حالة ثبات نفسه في مكانه. إرجاع؛ // يعود إلى بداية رمز الحلقة} إذا (المفتاح == '4') {// إذا تم الضغط على المفتاح 4 ، فقم بما يلي: int keyPressed = key - '4'؛ myMotor5-> خطوة (180 ، إلى الأمام ، مزدوجة) ؛ // يبدأ المحرك ويدور لـ 350 درجة في الاتجاه الأمامي. myMotor5-> release () ؛ // يحرر المحرك من حالة ثبات نفسه في مكانه. إرجاع؛ // يعود إلى بداية رمز الحلقة} إذا (المفتاح == '5') {// إذا تم الضغط على المفتاح 5 ، فقم بما يلي: int keyPressed = key - '5'؛ myMotor4-> خطوة (6900 ، إلى الأمام ، مزدوج) ؛ // يبدأ المحرك ويدور لمدة 350 درجة في الاتجاه الأمامي. myMotor4-> release () ؛ // يحرر المحرك من حالة ثبات نفسه في مكانه. إرجاع؛ // يعود إلى بداية رمز الحلقة} إذا (المفتاح == '6') {// إذا تم الضغط على المفتاح 6 ، فقم بما يلي: int keyPressed = key - '6'؛ myMotor3-> خطوة (400 ، إلى الأمام ، مزدوجة) ؛ // يبدأ المحرك ويدور لـ 350 درجة في الاتجاه الأمامي. myMotor3-> إطلاق () ؛ // يحرر المحرك من حالة ثبات نفسه في مكانه. إرجاع؛ // يعود إلى بداية رمز الحلقة} إذا (المفتاح == '7') {// إذا تم الضغط على المفتاح 7 ، فقم بما يلي: int keyPressed = key - '7'؛ myMotor7-> خطوة (400 ، إلى الأمام ، مزدوجة) ؛ // يبدأ المحرك ويدور لـ 350 درجة في الاتجاه الأمامي. myMotor7-> إطلاق () ؛ // يحرر المحرك من حالة ثبات نفسه في مكانه. إرجاع؛ // يعود إلى بداية رمز الحلقة} إذا (key == '8') {// إذا تم الضغط على المفتاح 8 ، فقم بما يلي: int keyPressed = key - '8'؛ myMotor8-> خطوة (400 ، إلى الأمام ، مزدوجة) ؛ // يبدأ المحرك ويدور لـ 350 درجة في الاتجاه الأمامي. myMotor8-> إطلاق () ؛ // يحرر المحرك من حالة ثبات نفسه في مكانه. إرجاع؛ // يعود إلى بداية رمز الحلقة}}}}} >>

موصى به: