جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-23 12:54
تتغير أسعار أمازون باستمرار. إذا تركت عناصر في عربة التسوق الخاصة بك لمدة تزيد عن بضع ساعات ، فمن المحتمل أن يتم تنبيهك بشأن التقلبات الدقيقة - 0.10 دولار هنا ، و 2.04 دولار هناك. من الواضح أن أمازون وتجارها يستخدمون شكلاً من أشكال التسعير الحسابي لإخراج آخر بنس من السوق.
هذا كل ما هو متوقع (الرأسمالية المتأخرة وكل ذلك). ولكن ماذا يحدث إذا ساءت الأمور؟ في عام 2011 ، اندلعت حرب أسعار بين خوارزميتين متنافستين. النتيجة: كتاب عن دورة حياة الذباب المنزلي (نفدت طبعته ، ولكن ليس نادرًا) ارتفع سعره إلى 23.6 مليون دولار.
جعلنا استحواذ Amazon مؤخرًا على Whole Foods Market نتساءل: ما الذي يمنع التسعير الديناميكي من الدخول إلى عالم البيع بالتجزئة المادي؟ ماذا لو كانت الأسعار في السوبر ماركت مرنة مثل تلك الموجودة على الإنترنت؟
لذلك ، في Instructable ، سنقوم ببناء عرض سعر ديناميكي باستخدام Arduino وشاشة LCD صغيرة. سنتحدث أيضًا باختصار عن إخفاءه وتثبيته في متجر.
(وإذا كنت مهتمًا ، فيمكن أن يعرض لك المكون الإضافي لـ Chrome سجل التسعير لأي عنصر على Amazon خلال آخر 120 يومًا.)
المواد المطلوبة
إليك ما استخدمناه لبناء هذا المشروع:
- اردوينو أونو R3
-
شاشة LCD قياسية مقاس 16 × 2. استخدمنا هذا من Adafruit ، ولكن طالما أنه متوافق مع مكتبة LiquidCrystal ، يجب أن تكون جيدًا. ستحتاج إلى بعض الأشياء لتوصيلها بـ Arduino:
- بعض الكابلات الطائر
- مقاوم 220 أوم
- مقياس جهد 10 كيلو أوم (هذا للتحكم في تباين الشاشة. إذا وجدت تباينًا يعجبك ، يمكنك استبدال مقياس الجهد بمقاوم ثابت.)
- بعض الأكريليك للصندوق. استخدمنا أكريليك أسود غير لامع ، مقطوع بالليزر ومجمع بمادة لاصقة مذيبة من الأكريليك وغراء ساخن.
- مغناطيس و / أو خطاف رفوف لتوصيل الصندوق بالمتجر. إذا ذهبت في مسار الخطاف ، فيمكنك قياس وطباعة ثلاثية الأبعاد ، أو محاولة العثور على واحدة عبر الإنترنت (ربما علي بابا؟) ، أو … الحصول عليها بطريقة أخرى أكثر شناعة. كن آمنا.
أولاً ، دعنا نبدأ العرض!
الخطوة 1: قم بربط الشاشة
من المؤكد أن هناك الكثير من المسامير على الجزء الخلفي من شاشة LCD. لحسن الحظ ، تحتوي وثائق مكتبة البرامج التي سنستخدمها على دليل جيد لتوصيلها. تحقق من ذلك.
باختصار ، يجب أن ينتهي الأسلاك الخاصة بك على النحو التالي:
-
قوة:
- LCD GND (دبوس 1) → Arduino GND
- LCD VDD (دبوس 2) → Arduino + 5V
- LCD RW (دبوس 5) → Arduino GND
-
عناصر البيانات:
- LCD RS (دبوس 4) → Arduino digital pin 12
- تمكين LCD (دبوس 6) → Arduino digital pin 11
- LCD D4 (دبوس 11) → دبوس رقمي 5
- LCD D5 (دبوس 12) → دبوس رقمي 4
- LCD D6 (دبوس 13) → دبوس رقمي 3
- LCD D7 (دبوس 14) → دبوس رقمي 2
-
عرض التباين:
- قم بتوصيل أرجل مقياس جهد 10 كيلو إلى Arduino's + 5V و GND
- خرج مقياس الجهد → LCD VO (دبوس 3).
-
الإضاءة الخلفية:
- LCD BL1 (دبوس 15) → 220 أوم المقاوم → Arduino + 5V
- LCD BL2 (دبوس 16) → Arduino GND
عندما يكون كل شيء جاهزًا ، قم بتحميل أحد أمثلة مشاريع LiquidCrystal في Arduino IDE ومعرفة ما إذا كان يعمل! تذكر أن تتحقق جيدًا من رمز تهيئة LCD في العينات - يجب أن تكون أرقام التعريف الشخصية صحيحة وإلا فلن ترى أي شيء.
على سبيل المثال ، يحتوي مثال "Blink" على هذا الرمز ، وهو صحيح وفقًا للإعداد أعلاه:
const int rs = 12 ، en = 11 ، d4 = 5 ، d5 = 4 ، d6 = 3 ، d7 = 2 ؛ LiquidCrystal lcd (rs ، en ، d4 ، d5 ، d6 ، d7) ؛
نصائح
- وفر لنفسك بعض اللحام واستثمر في بعض نهايات التجعيد وموصلات الرأس. في مشاريع مثل هذه حيث سنقوم بحشر الإلكترونيات في علبة صغيرة ، فإن القدرة على صنع كبلات توصيل قصيرة مفيدة للغاية.
- وبالمثل ، فإن أنابيب الانكماش الحراري مفيدة حقًا للتأكد من عدم تقصير أي شيء عند الضغط عليه بالكامل.
- نظرًا لوجود العديد من الأشياء التي تذهب إلى GND و + 5V ، فقد اخترنا صنع كبل صريح (انظر الصورة أعلاه) ليكون مضغوطًا قدر الإمكان. إذا كانت المساحة أقل مشكلة ، فسيكون اللوح أو الدرع الأولي خيارًا أسهل.
- تتشكل بعض مقاييس الجهد بشكل غريب. بشكل عام ، يتم استخدام الرصاص الأيسر كأرضي ، بينما يتم استخدام الرصاص الموجود في أقصى اليمين كقوة ، والوسطى كإخراج. إذا كان لديك اثنين من العملاء المتوقعين في المقدمة والآخر في الخلف ، فإن الطرف الموجود في الخلف هو الإخراج.
مسكتك
- إذا كنت لا ترى أي شيء على شاشة LCD ، فحاول تدوير مقياس الجهد بالكامل في اتجاه واحد ، ثم الاتجاه الآخر. عند أدنى تباين ، يكون محتوى شاشة LCD غير مرئي تمامًا.
- إذا رأيت هراءًا غريبًا حقًا على شاشة LCD ، أو سطرًا واحدًا فقط بدلاً من خطين ، فتأكد من أن جميع اتصالاتك آمنة. كان لدينا اتصال خاطئ بالأرض وكان يتسبب في أغرب مشكلات العرض.
- رمز تهيئة LCD (ما يتم تشغيله بواسطة lcd.init () في وظيفة الإعداد ()) مهم ويستغرق بعض الوقت. إذا كان هناك خطأ ما في شاشتك وكنت تشك في وجود سلك به خلل ، فلا تتوقع أن تعمل الأشياء المتذبذبة فجأة. قد تحتاج إلى إعادة ضبط Arduino بحيث يكون رمز التهيئة لديه فرصة للعمل بشكل صحيح.
- تأكد من أن الأسلاك الخاصة بك قصيرة جدًا ، لكنها ليست قصيرة جدًا. لا شيء أسوأ من الاضطرار إلى إعادة التشكيل لأنك على بعد بضعة سنتيمترات من الرأس.
رائعة! الآن دعنا نجعلها تظهر بعض الأشياء الفاخرة.
الخطوة 2: الكود: الأساسيات
أول الأشياء أولاً: لنجعل الشاشة تعرض "السعر الحالي:" في السطر العلوي ، وسعر عشوائي في نطاق ما في الثانية. بين الحين والآخر ، دعونا نجعل السعر يتم تحديثه. هذا بسيط جدًا ، ولكنه سيبرز الاستخدام الأساسي لمكتبة LiquidCrystal وبعض المراوغات الخاصة بها.
أولاً ، دعنا نسحب المكتبة ونحدد بعض الثوابت:
#يشمل
كونست uint8_t lcdWidth = 16 ؛
const uint8_t lcdHeight = 2 ؛
ثابت طويل minPriceInCents = 50 ؛
كونست لونغ maxPriceInCents = 1999 ؛
const غير موقعة طويلة minMillisBetweenPriceUpdates = 0.25 * 1000 ؛
const غير موقعة طويلة maxMillisBetweenPriceUpdates = 2 * 1000
رائعة! هذه هي معايير النطاق السعري وعدد مرات تحديثه. لنقم الآن بعمل مثيل لفئة LCD التي توفرها المكتبة ونقوم بتهيئتها. سنطبع شيئًا ما عبر وحدة التحكم التسلسلية ، فقط للحصول على بعض الطمأنينة بأن الأشياء تعمل ، حتى لو لم نشاهد أي شيء على شاشة LCD. سنفعل ذلك في وظيفة الإعداد () ، والتي تعمل مرة واحدة بعد تمهيد Arduino. لاحظ ، مع ذلك ، أننا نعلن عن متغير lcd خارج الإعداد () ، لأننا نريد الوصول إليه خلال البرنامج.
LiquidCrystal LCD (12 ، 11 ، 5 ، 4 ، 3 ، 2) ؛ إعداد باطل () {Serial.begin (9600) ؛ lcd.begin (lcdWidth ، lcdHeight) ؛
Serial.println ("LCD مهيأ") ؛
lcd.print ("السعر الحالي:") ؛
}
وبالنسبة للحوم ، سنستخدم الدالة العشوائية المضمنة () والمبدئ String () لإنشاء سعر عشري. عشوائي () يولد الأعداد الصحيحة فقط ، لذلك سنقسم نتيجته على 100.0 للحصول على قيمة النقطة العائمة. سنفعل هذا في حلقة () ، لذلك يحدث ذلك كثيرًا قدر الإمكان ، ولكن مع تأخير عشوائي بين الثوابت التي حددناها سابقًا.
حلقة فارغة()
{مزدوج السعر = عشوائي (minPriceInCents ، maxPriceInCents) / 100.0 ؛ String prettyPrice = "$" + String (السعر ، 2) ؛ lcd.setCursor (0 ، 1) ؛ lcd.print (سعر جميل) ؛ التأخير (عشوائي (minMillisBetweenPriceUpdates ، maxMillisBetweenPriceUpdates)) ؛ }
شيء واحد يجب ملاحظته هو استدعاء lcd.setCursor (). لا تقدم مكتبة LiquidCrystal النص تلقائيًا إلى السطر التالي بعد الطباعة ، لذلك نحتاج إلى تحريك المؤشر (غير المرئي) يدويًا إلى السطر الثاني (هنا 1 - يعتمد على الصفر). لاحظ أيضًا أنه لم يكن علينا طباعة "السعر الحالي:" مرة أخرى ؛ لا يتم مسح شاشة LCD إلا إذا قمت بذلك يدويًا ، لذلك يتعين علينا فقط تحديث النص الديناميكي.
قم بتشغيله وسترى بسرعة مشكلة ذات صلة. إذا كان السعر ، على سبيل المثال ، "14.99 دولارًا أمريكيًا" ثم "7.22 دولارًا أمريكيًا" ، فستعرض الشاشة "7.229 دولارًا أمريكيًا". تذكر أن الشاشة لا تمسح نفسها ما لم تخبرها بذلك. حتى إذا قمت بالطباعة على نفس السطر ، فسيظل أي نص يتجاوز ما تطبعه. لإصلاح هذه المشكلة ، يتعين علينا أن نملأ خيطنا بمسافات لاستبدال أي قمامة محتملة. أسهل طريقة للقيام بذلك هي مجرد استخدام بعض المساحات لمتغير السعر الجميل:
String prettyPrice = "$" + String (السعر، 2) + ""؛
مع هذا التغيير في المكان ، لدينا دليل على المفهوم! دعونا نلطفها قليلاً.
الخطوة 3: الرمز: أحرف مخصصة
واحدة من أروع ميزات وحدة LCD التي نستخدمها هي القدرة على إنشاء ما يصل إلى 8 أحرف مخصصة. يتم ذلك من خلال طريقة createChar (). تأخذ هذه الطريقة صفيفًا من 8 × 5 بتات تصف وحدات البكسل في شاشة LCD التي سيتم تشغيلها للحرف المحدد. هناك عدد قليل من الأدوات على الإنترنت للمساعدة في إنشاء هذه المصفوفات. لقد استخدمت هذا.
إذا كنت لا تشعر بأنك مصمم بشكل خاص ، فإنني أوصي باستخدام مرشح Threshold في Photoshop لتحويل صورة إلى أبيض وأسود ، وتحويلها إلى أحرف. تذكر أن لديك 8 أحرف مخصصة كحد أقصى ، أو 64 × 5 بكسل.
اخترت استخدام 6 من هذه الأحرف لشعار سهم Amazon ، والرقمان المتبقيان لرمز علامة تجارية أجمل. يمكنك اتباع مثال CustomCharacter في Arduino IDE لمعرفة كيفية استخدام API. هذه هي الطريقة التي قررت بها تجميع الأشياء:
// تحديد البيانات الخاصة بأحرف العلامة التجارية
const size_t علامة تجاريةCharCount = 2؛ const uint8_t علامة تجارية B00000}} ؛ uint8_t firstTrademarkCharByte ؛ // البايت المستخدم لطباعة هذا الحرف ؛ معين في initCustomChars ()
ثم استخدمت وظيفة مثل هذه ، تسمى من الإعداد () ، لإنشاء الأحرف:
initCustomChars باطلة () {
firstTrademarkCharByte = 0 ، لـ (size_t i = 0؛ i }}
بعد ذلك ، تكون طباعة الأحرف المخصصة بسيطة مثل استخدام lcd.write () بالبايت المناسب. لقد كتبت دالة مساعدة لطباعة نطاق من البايتات ، وقمت بتعريف printTrademark () من حيث ذلك:
حقل writeRawByteRange باطل (uint8_t line، uint8_t col، uint8_t startValue، size_t numBytes)
{for (uint8_t i = 0؛ i <numBytes؛ i ++) {lcd.setCursor (col + i، line) ؛ // بحاجة إلى استخدام write () ، وليس print () - ستحول الطباعة العدد الصحيح // القيمة إلى سلسلة وتطبع * that * lcd.write (startValue + i) ؛ }} void printTrademark (uint8_t line، uint8_t col) {writeRawByteRange (line، col، firstTrademarkCharByte، TradarkCharCount) ؛ }
تم التعامل مع شعار سهم أمازون بطريقة مماثلة. انظر إلى الكود المرفق للحصول على التفاصيل الكاملة.
الخطوة 4: الكود: Niceties
لتسهيل الأمور على نفسي ، أضفت بعض التفاصيل الدقيقة إلى الكود. يتضمن هذا أشياء مثل: وظيفة لمسح سطر معين عن طريق الكتابة فوقه بمسافات ، ووظيفة لتوسيط سلسلة معينة على سطر.
أردت أيضًا أن يتنقل العرض عبر ثلاث مراحل متميزة:
- "التسعير الديناميكي" مع الشعار أدناه
- "بواسطة Amazon" مع الشعار أدناه
- عرض سعر عشوائي
لذلك ، قمت ببناء نظام بسيط يتتبع مدة نشاط مرحلة معينة ، وبعد فترة معينة ، ينتقل إلى المرحلة التالية.
انظر الى الكود المرفق لجميع التفاصيل دموية!
الخطوة 5: الصندوق
الآن ، حتى لا يتم استدعاء فريق المتفجرات علينا ، فلنصنع صندوقًا لطيفًا لكل شيء. سنفعل ذلك باستخدام أكريليك مقطوع بالليزر. هناك الكثير من الأدوات عبر الإنترنت لبدء عملية إنشاء مربعات بسيطة. أوصي بـ makercase.com ، لأنه يتيح لك تحديد الأبعاد الداخلية وحسابات سمك المادة.
قمنا بقياس بطارية Arduino و LCD و 9 فولت ، وقدرنا أننا سنكون قادرين على وضعها في علبة بحجم 4 × 2.5 بوصة × 2. أكريليك. قمنا بتعديل ملف PDF الناتج لإضافة نافذة مستديرة لشاشة LCD وفتحة بطول الجزء السفلي لعلامة عرض (المزيد حول ذلك لاحقًا). يتم إرفاق الملف الناتج كملف PDF.
استخدمنا لاصق الأكريليك (نوع ميثيل إيثيل كيتون السام) لتجميع الجوانب الأربعة للصندوق. ثم قمنا بتوصيل لوحة LCD بالأمام بغراء ساخن. بمجرد الانتهاء من عمل كل شيء وتركيبه ، قمنا بإغلاق الجانبين الأخيرين من الصندوق بالغراء الساخن ، حتى نتمكن من تفكيكه بسهولة لاحقًا. نظرًا لأننا لم نتوقع أن يتلقى الجهاز الكثير من البلى ، فقد تركنا Arduino والبطارية غير آمنة في الجزء السفلي من العلبة.
التحسينات المحتملة
- لقد أهملنا البناء بأي طريقة لتشغيل الجهاز أو إيقاف تشغيله. ها. مساحة لمفتاح في الجزء السفلي أو الخلفي من الصندوق ستكون فكرة جيدة.
- قد تكون الفتحة الموجودة على طول الجزء السفلي للعلامة المعلقة أقرب إلى مقدمة الصندوق ، لتحسين الرؤية.
الخطوة 6: المزج
والآن ، الجزء الصعب: التسلل إلى المتجر.
العلامة التجارية الكاملة للأغذية
بعض الأشياء التي تعلمناها في الهندسة العكسية لشركة Whole Foods وعلامة Amazon التجارية:
- النص الأساسي بشكل عام في Scala Sans
- يوجد نص العنوان في شيء يشبه إلى حد كبير برايتون - أحد تلك الخطوط العامة "الدافئة والودية"
- يعتبر Whole Foods Green شيئًا قريبًا من # 223323
- احصل على متجرك المحلي للحصول على أمثلة للعناصر الرسومية التي تتكرر: إنهم مغرمون بالحدود الصدفيّة ، وأشعة الشمس ، والفن المتجه البسيط.
العلامة المعلقة
لقد قطعنا شقًا في الجزء السفلي من علبة الأكريليك حتى نتمكن من إرفاق علامة معلقة بالصندوق ، لشرح ما يحدث. انظر ملف PDF المرفق للحصول على مثال. تم تصميم هذا ليتم قصه وإدخاله في الفتحة ؛ يجب أن يتم تركيبه وتثبيته بدون أي مادة لاصقة.
رفوف
بالنسبة لربط الصندوق فعليًا برف ، تستخدم Whole Foods مكونات رفوف قياسية جدًا. أخذنا قياسات ووجدنا خطافًا متوافقًا في متجر لاجهزة الكمبيوتر. قمنا بتثبيت الصندوق على الخطاف بالغراء الساخن.
إذا لم تتمكن من العثور على مثل هذا الخطاف ، فيمكنك تجربة المغناطيس - قم بلصق بعضها في الجزء الخلفي من الصندوق ، ثم قم بتثبيته على الرف.
نشر
ضع الصندوق على مستوى العين لجذب انتباه المارة. لا ننشغل! حظا سعيدا!
موصى به:
احصل على سعر البيتكوين المباشر TTGO ESP32: 10 خطوات
احصل على سعر مباشر للبيتكوين TTGO ESP32: في هذا البرنامج التعليمي سوف نتعلم كيفية الحصول على سعر البيتكوين الحالي بالدولار الأمريكي واليورو باستخدام TTGO ESP32 و Visuino. شاهد الفيديو (ملف محدث جديد للتنزيل أدناه!)
VISUINO Display سعر العملات الأجنبية المباشر من الإنترنت: 9 خطوات
VISUINO Display Live Forex Currency Price من الإنترنت: في هذا البرنامج التعليمي سوف نستخدم NodeMCU Mini و OLED Lcd و Visuino لعرض سعر العملة الحية EUR / USD كل بضع ثوانٍ من الإنترنت على شاشة LCD. شاهد فيديو توضيحي
وحدة تحكم إضاءة LED ديناميكية للفن: 16 خطوة (بالصور)
وحدة تحكم إضاءة LED الديناميكية للفن: مقدمة: تعد الإضاءة جانبًا مهمًا من جوانب الفن المرئي. وإذا كانت الإضاءة يمكن أن تتغير بمرور الوقت ، فيمكن أن تصبح بُعدًا مهمًا للفن. بدأ هذا المشروع بحضور عرض ضوئي وتجربة كيف يمكن للإضاءة تمامًا
إنشاء أشكال ديناميكية في Excel ذات المحتوى المتغير: 4 خطوات
إنشاء أشكال ديناميكية في Excel بمحتوى متغير: يمكننا استخدام أشكال ورسومات excel بطريقة ديناميكية لجعل أوراق العمل أكثر احترافية وتفاعلية وجاذبية ، ويمكن ربط محتويات الأشكال (النص المكتوب في شكل) بـ محتوى الخلية ، ومن ثم شكل بنص متغير
علامة ليزر اردوينو - علامة Duino: 11 خطوة (بالصور)
بطاقة Arduino Laser Tag - Duino Tag: Duino tagger- مقدمة عامة Duino tag هي عبارة عن نظام علامة ليزر يعتمد على اردوينو. أخيرًا ، نظام علامة ليزر يمكن تعديله واختراقه حتى يكون لديك نظام علامة ليزر مثالي للذخائر المكتبية وحروب الغابات والضواحي