فهرست مطالب:

برچسب قیمت پویا جعلی: 6 مرحله (همراه با تصاویر)
برچسب قیمت پویا جعلی: 6 مرحله (همراه با تصاویر)

تصویری: برچسب قیمت پویا جعلی: 6 مرحله (همراه با تصاویر)

تصویری: برچسب قیمت پویا جعلی: 6 مرحله (همراه با تصاویر)
تصویری: آیا س*کس از پشت را دوست دارید ؟😱😂😂😱(زیرنویس فارسی) 2024, نوامبر
Anonim
Image
Image
صفحه را سیم کشی کنید
صفحه را سیم کشی کنید

قیمت های آمازون به طور مداوم تغییر می کند. اگر اقلام را بیش از چند ساعت در سبد خرید خود بگذارید ، احتمالاً در مورد نوسانات دقیقه ای به شما هشدار داده می شود - 0.10 دلار در اینجا ، 2.04 دلار در آنجا. آمازون و تجار آن به وضوح از نوعی قیمت الگوریتمی استفاده می کنند تا آخرین سکه را از بازار خارج کنند.

این چیزی است که می توان انتظار داشت (سرمایه داری متاخر و همه چیز). اما اگر اوضاع به هم ریخت چه اتفاقی می افتد؟ در سال 2011 ، جنگ قیمت بین دو الگوریتم رقیب آغاز شد. نتیجه: کتابی در مورد چرخه زندگی مگس های خانگی (چاپ نشده ، اما بسیار نادر نیست) به قیمت 23.6 میلیون دلار افزایش یافت.

خرید اخیر آمازون از Whole Foods Market باعث شد تا از خود بپرسیم: چه چیزی مانع از آن می شود که قیمت های پویا وارد دنیای فیزیکی خرده فروشی نشوند؟ اگر قیمت سوپر مارکت ها به همان اندازه انعطاف پذیر بود چه می شد؟

بنابراین ، در این دستورالعمل ، ما یک صفحه نمایش قیمت پویا با یک آردوینو و یک LCD کوچک خواهیم ساخت. ما همچنین به طور مختصر در مورد مبدل سازی و نصب آن در یک فروشگاه صحبت خواهیم کرد.

(و اگر علاقه دارید ، این افزونه Chrome می تواند تاریخ قیمت گذاری هر موردی را در آمازون در 120 روز گذشته به شما نشان دهد.)

مواد مورد نیاز

در اینجا آنچه ما برای ساخت این پروژه استفاده کردیم:

  • Arduino Uno R3
  • صفحه نمایش LCD استاندارد 16x2. ما از این یکی از Adafruit استفاده کردیم ، اما تا زمانی که با کتابخانه LiquidCrystal سازگار باشد ، باید خوب باشید. برای اتصال به آردوینو به چند مورد نیاز دارید:

    • برخی از کابل های جهنده
    • یک مقاومت 220 اهم
    • پتانسیومتر 10 کیلو اهم (این برای کنترل کنتراست صفحه نمایش است. اگر کنتراست مورد نظر خود را پیدا کردید ، می توانید پتانسیومتر را با یک مقاومت ثابت جایگزین کنید.)
  • مقداری اکریلیک برای جعبه ما از یک اکریلیک سیاه مات ریخته گری ، برش لیزری و مونتاژ با حلال چسب اکریلیک و چسب داغ استفاده کردیم.
  • آهن ربا و/یا قلاب قفسه بندی برای اتصال جعبه در فروشگاه. اگر راه را ادامه می دهید ، می توانید یکی را اندازه گیری کرده و به صورت سه بعدی چاپ کنید ، یا سعی کنید آن را به صورت آنلاین (علی بابا ، شاید؟) پیدا کنید ، یا … آن را به شیوه ای بدتر دیگر بدست آورید. مراقب باش.

اول ، اجازه دهید صفحه نمایش را روشن کنیم!

مرحله 1: صفحه را سیم کشی کنید

صفحه را سیم کشی کنید
صفحه را سیم کشی کنید
صفحه را سیم کشی کنید
صفحه را سیم کشی کنید

مطمئناً تعداد زیادی پین در پشت آن LCD وجود دارد. خوشبختانه ، اسناد کتابخانه نرم افزاری که قرار است از آن استفاده کنیم ، راهنمای خوبی برای سیم کشی آن است. آن را بررسی کنید.

به طور خلاصه ، سیم کشی شما باید به این شکل باشد:

  • قدرت:

    • LCD GND (پین 1) → Arduino GND
    • LCD VDD (پین 2) → Arduino +5V
    • LCD RW (پین 5) → Arduino GND
  • موارد داده:

    • LCD RS (پین 4) pin پین دیجیتال آردوینو 12
    • LCD را فعال کنید (پین 6) pin پین دیجیتال Arduino 11
    • LCD D4 (پین 11) pin پین دیجیتال 5
    • LCD D5 (پین 12) pin پین دیجیتال 4
    • LCD D6 (پین 13) pin پین دیجیتال 3
    • LCD D7 (پین 14) pin پین دیجیتال 2
  • کنتراست صفحه نمایش:

    • پاهای پتانسیومتر 10k را به آردوینو +5V و GND وصل کنید
    • خروجی پتانسیومتر → LCD VO (پین 3).
  • نور پس زمینه:

    • LCD BL1 (پین 15) → 220 اهم مقاومت → آردوینو +5 ولت
    • LCD BL2 (پین 16) → Arduino GND

وقتی همه چیز آماده شد ، یکی از نمونه پروژه های LiquidCrystal را در Arduino IDE بارگذاری کنید و ببینید آیا کار می کند یا خیر! به یاد داشته باشید که کد اولیه LCD را در نمونه ها دوبار بررسی کنید-شماره پین ها باید صحیح باشند در غیر اینصورت چیزی را مشاهده نخواهید کرد.

به عنوان مثال ، مثال "چشمک زدن" دارای این کد است که با توجه به تنظیمات بالا صحیح است:

const int rs = 12 ، en = 11 ، d4 = 5 ، d5 = 4 ، d6 = 3 ، d7 = 2 ؛ LiquidCrystal LCD (rs ، en ، d4 ، d5 ، d6 ، d7) ؛

نکات

  • برای مقداری لحیم کاری صرفه جویی کنید و روی برخی از انتهای تنگ و اتصالات هدر سرمایه گذاری کنید. در پروژه هایی مانند این که ما قصد داریم وسایل الکترونیکی را در یک قاب کوچک جمع کنیم ، توانایی ساختن کابل های بلوز کوتاه بسیار مفید است.
  • به طور مشابه ، لوله های گرمکن واقعاً مفید هستند تا مطمئن شویم وقتی همه چیز به خود فشار می آورد ، هیچ چیز کوتاه نمی شود.
  • از آنجا که موارد زیادی برای GND و +5V وجود دارد ، ما تصمیم گرفتیم که یک کابل بازکن (به عکس بالا نگاه کنید) تا حد امکان جمع و جور باشد. اگر مسئله فضا کمتر بود ، یک تخته نان یا پروتوشیلد گزینه ساده تری بود.
  • برخی از پتانسیومترها شکل عجیبی دارند. به طور کلی ، سرب سمت چپ به عنوان زمین ، سر راست به عنوان نیرو و سر میانی به عنوان خروجی استفاده می شود. اگر سیم شما دو سر در جلو و یکی در پشت دارد ، یکی در پشت خروجی است.

Gotchas

  • اگر چیزی روی LCD خود نمی بینید ، سعی کنید پتانسیومتر را تا انتها در یک جهت و سپس جهت دیگر را بچرخانید. در کمترین کنتراست ، محتوای LCD کاملاً نامرئی است.
  • اگر در صفحه LCD واقعاً حیرت انگیز یا فقط یک خط به جای دو خط مشاهده می کنید ، مطمئن شوید که همه اتصالات شما ایمن هستند. ما یک اتصال معیوب به زمین داشتیم و باعث ایجاد عجیب ترین مشکلات نمایش می شد.
  • کد راه اندازی LCD (آنچه در تابع setup () توسط lcd.init () اجرا می شود) مهم است و مدتی طول می کشد. اگر مشکلی در صفحه نمایش شما وجود دارد و به سیم معیوب مشکوک هستید ، انتظار نداشته باشید که چیزهای تکان دهنده ناگهان کار کند. ممکن است لازم باشد که آردوینو را ریست کنید تا کد مقدار دهی اولیه به درستی اجرا شود.
  • اطمینان حاصل کنید که سیم های شما بسیار کوتاه هستند ، اما خیلی کوتاه نیستند. هیچ چیز بدتر از این نیست که مجبور به فروش مجدد شوید زیرا چند سانتی متر با هدر فاصله دارید.

عالی! حالا اجازه دهید چیزهای فانتزی را نشان دهد.

مرحله 2: کد: اصول اولیه

کد: مبانی
کد: مبانی
کد: مبانی
کد: مبانی

اولین چیزها: اجازه دهید صفحه نمایش "قیمت فعلی:" را در بالای خط و قیمت تصادفی در برخی محدوده در قسمت دوم داشته باشیم. هر چند وقت یکبار ، اجازه دهید قیمت را به روز کنیم. این بسیار ساده است ، اما استفاده اصلی از کتابخانه LiquidCrystal و برخی از ویژگی های آن را برجسته می کند.

ابتدا بیایید کتابخانه را بکشیم و چند ثابت را تعریف کنیم:

#عبارتند از

const uint8_t lcd عرض = 16؛

const uint8_t lcdHeight = 2؛

const long minPriceInCents = 50؛

const long maxPriceInCents = 1999؛

const unsigned long minMillisBetweenPriceUpdates = 0.25 * 1000 ؛

const unsigned long maxMillisBetweenPriceUpdates = 2 * 1000

عالی! اینها پارامترهایی برای محدوده قیمت و تعداد دفعات تجدید آن است. حالا بیایید یک نمونه از کلاس LCD ارائه شده توسط کتابخانه بسازیم و آن را مقداردهی اولیه کنیم. ما چیزی را روی کنسول سریال چاپ می کنیم ، فقط برای اطمینان خاطر از اینکه همه چیز در حال کار است ، حتی اگر چیزی روی LCD نبینیم. ما این کار را در تابع setup () انجام می دهیم که یک بار پس از بوت های Arduino اجرا می شود. با این حال ، توجه داشته باشید که ما متغیر lcd را خارج از setup () اعلام می کنیم ، زیرا می خواهیم در طول برنامه به آن دسترسی داشته باشیم.

LCD مایع LiquidCrystal (12 ، 11 ، 5 ، 4 ، 3 ، 2) ؛ void setup () {Serial.begin (9600)؛ lcd.begin (lcdWidth ، lcdHeight) ؛

Serial.println ("LCD اولیه شده")؛

lcd.print ("قیمت فعلی:") ؛

}

و برای گوشت ، ما از تابع random () ساخته شده و مقداردهنده String () برای ایجاد یک قیمت اعشاری استفاده می کنیم. random () فقط اعداد صحیح تولید می کند ، بنابراین ما نتیجه آن را بر 100.0 تقسیم می کنیم تا یک مقدار نقطه شناور به دست آید. ما این کار را در حلقه () انجام می دهیم ، بنابراین تا آنجا که ممکن است اتفاق می افتد ، اما با تأخیر تصادفی بین ثابت هایی که قبلاً تعریف کردیم.

حلقه خالی ()

{double price = random (minPriceInCents ، maxPriceInCents) / 100.0 ؛ String prettyPrice = "$" + رشته (قیمت ، 2) ؛ lcd.setCursor (0 ، 1) ؛ lcd.print (prettyPrice) ؛ تأخیر (تصادفی (minMillisBetweenPriceUpdates ، maxMillisBetweenPriceUpdates)) ؛ }

نکته ای که باید به آن توجه کنید تماس با lcd.setCursor () است. کتابخانه LiquidCrystal به طور خودکار متن شما را پس از چاپ به خط بعدی منتقل نمی کند ، بنابراین ما باید مکان نما (نامرئی) را به صورت دستی به خط دوم منتقل کنیم (در اینجا 1-صفر است). همچنین توجه داشته باشید که مجبور نبودیم "قیمت فعلی:" را دوباره چاپ کنیم. LCD پاک نمی شود مگر اینکه این کار را به صورت دستی انجام دهید ، بنابراین ما فقط باید متن پویا را به روز کنیم.

آن را اجرا کنید و به سرعت یک مشکل مرتبط را خواهید دید. اگر قیمت ، مثلاً "14.99 دلار" و سپس "7.22 دلار" بود ، صفحه نمایش "7.229 دلار" نشان می دهد. به یاد داشته باشید ، صفحه نمایش به خودی خود پاک نمی شود مگر اینکه به آن بگویید. حتی اگر در یک خط چاپ کنید ، هر متنی که از آن چه چاپ می کنید ، باقی می ماند. برای رفع این مشکل ، ما باید رشته خود را با فاصله قرار دهیم تا هرگونه زباله احتمالی را بازنویسی کنیم. ساده ترین راه برای انجام این کار این است که فقط چند متغیر را روی متغیر prettyPrice خود بچسبانید:

String prettyPrice = "$" + رشته (قیمت ، 2) + ""؛

با این تغییر در محل ، ما یک اثبات مفهوم داریم! بیایید کمی بحث را به هم بزنیم

مرحله 3: کد: شخصیت های سفارشی

کد: شخصیت های سفارشی
کد: شخصیت های سفارشی
کد: شخصیت های سفارشی
کد: شخصیت های سفارشی

یکی از جالبترین ویژگی های ماژول LCD مورد استفاده ما ، توانایی ایجاد حداکثر 8 کاراکتر سفارشی است. این کار از طریق متد createChar () انجام می شود. این روش یک آرایه از بیت های 8x5 را در بر می گیرد که توصیف می کند کدام پیکسل های LCD برای کاراکتر مشخص روشن شود. چند ابزار آنلاین برای کمک به تولید این آرایه ها وجود دارد. من از این یکی استفاده کردم.

اگر از نظر طراحی خاصی احساس نمی کنید ، توصیه می کنم از فیلتر Threshold در Photoshop برای تبدیل تصویر به سیاه و سفید استفاده کنید و آن را به کاراکتر تبدیل کنید. به یاد داشته باشید که حداکثر 8 کاراکتر سفارشی یا 64x5 پیکسل دارید.

من 6 مورد را برای نشان فلش آمازون و 2 تای دیگر را برای نماد علامت تجاری بهتر انتخاب کردم. برای استفاده از API می توانید از مثال CustomCharacter در Arduino IDE پیروی کنید. به این ترتیب تصمیم گرفتم موارد را گروه بندی کنم:

// داده های کاراکترهای علامت تجاری را تعریف کنید

const size_t trademarkCharCount = 2؛ const uint8_t علائم تجاریChars [trademarkCharCount] [8] = {{B00111، B00010، B00010، B00000، B00000، B00000، B00000، B00000}، {B10100، B11100، B10100، B0000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B000000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000، B00000 B00000}} ؛ uint8_t firstTrademarkCharByte؛ // بایت مورد استفاده برای چاپ این کاراکتر ؛ اختصاص داده شده در initCustomChars ()

سپس برای ایجاد کاراکترها از تابعی مانند این استفاده می کنم که از setup () نامیده می شود:

void initCustomChars () {

firstTrademarkCharByte = 0؛ برای (size_t i = 0؛ i <trademarkCharCount؛ i ++) {lcd.createChar (logoCharCount+i، (uint8_t *) علامت تجاریChars ) ؛ }}

پس از آن ، چاپ کاراکترهای سفارشی به سادگی استفاده از lcd.write () با بایت های مناسب است. من یک تابع کمکی برای چاپ طیف وسیعی از بایت ها نوشتم و () printTrademark را بر اساس آن تعریف کردم:

void writeRawByteRange (خط uint8_t ، uint8_t col ، uint8_t startValue ، size_t numBytes)

{for (uint8_t i = 0؛ i <numBytes؛ i ++) {lcd.setCursor (col+i، line)؛ // نیاز به استفاده از write () ، نه print () - print عدد صحیح // را به رشته تبدیل می کند و * * * lcd.write (startValue + i) را چاپ می کند. }} void printTrademark (uint8_t line، uint8_t col) {writeRawByteRange (line، col، firstTrademarkCharByte، trademarkCharCount)؛ }

با لوگوی پیکان آمازون به شیوه ای مشابه رفتار شد. برای جزئیات کامل کد پیوست را مشاهده کنید.

مرحله 4: کد: حساسیت ها

برای سهولت کار بر روی خودم ، چند نکته زیبا به کد اضافه کردم. این شامل مواردی مانند: یک تابع برای پاک کردن یک خط خاص با بازنویسی آن با فاصله ، و یک تابع برای متمرکز کردن یک رشته مشخص بر روی یک خط.

من همچنین می خواستم صفحه نمایش از سه مرحله مجزا عبور کند:

  1. "قیمت پویا" با لوگوی زیر
  2. "توسط آمازون" با نشان زیر
  3. نمایش قیمت تصادفی

برای این منظور ، من یک سیستم ساده ایجاد کردم که میزان فعالیت یک فاز مشخص را پیگیری می کرد و پس از یک دوره مشخص ، به مرحله بعدی منتقل می شد.

برای پیوستن به تمام جزئیات کد پیوست را مشاهده کنید!

مرحله 5: جعبه

جعبه
جعبه

در حال حاضر ، بنابراین ما از تیم بمب دعوت نمی شویم ، بیایید یک جعبه زیبا برای کل کار بسازیم. ما این کار را با اکریلیک برش لیزری انجام می دهیم. بسیاری از ابزارهای آنلاین برای شروع سریع فرآیند ساخت جعبه های ساده وجود دارد. من makercase.com را توصیه می کنم ، زیرا به شما امکان می دهد ابعاد داخلی را مشخص کرده و ضخامت مواد را در نظر بگیرید.

ما باتری آردوینو ، ال سی دی و 9 ولت را اندازه گیری کردیم و تخمین زدیم که می توانیم آن را در قاب 4 "x 2.5" x 2 "قرار دهیم. بنابراین ، آنها را با ضخامت 1/8 اینچ در جعبه بزرگ وصل کردیم. اکریلیک ما PDF حاصل را تغییر دادیم تا یک پنجره گرد برای LCD و یک شکاف در قسمت پایین برای یک برچسب نمایش (در ادامه بعداً) اضافه کنیم. فایل حاصله به صورت PDF پیوست شده است.

ما از چسب اکریلیک (نوع متیل اتیل کتون سمی) برای جمع آوری چهار طرف جعبه استفاده کردیم. سپس پنل LCD را با چسب حرارتی به جلو وصل کردیم. هنگامی که همه چیز کار می کرد و مناسب بود ، دو طرف آخر جعبه را با چسب حرارتی مهر می کردیم ، تا بعداً بتوانیم آن را به راحتی جدا کنیم. از آنجایی که ما انتظار نداشتیم دستگاه دچار فرسودگی زیادی شود ، آردوینو و باتری را در قسمت زیر کیس بدون ایمنی رها کردیم.

پیشرفت های احتمالی

  • ما به هیچ وجه برای روشن یا خاموش کردن دستگاه از ساختن غافل شدیم. ها فضای مناسب برای تعویض در پایین یا پشت جعبه ایده خوبی بود.
  • شکاف در پایین برای برچسب آویزان می تواند به جلوی جعبه نزدیکتر باشد ، برای بهتر دیده شدن.

مرحله 6: ترکیب کردن

ترکیب در
ترکیب در
ترکیب در
ترکیب در

و اکنون ، قسمت سخت: پنهان کردن آن به یک فروشگاه.

نام تجاری Whole Foods

برخی از چیزهایی که در مهندسی معکوس Whole Foods و مارک آمازون آموختیم:

  • متن اصلی به طور کلی در Scala Sans است
  • متن هدر چیزی است که بسیار شبیه به برایتون است - یکی از آن فونت های عمومی "گرم و دوستانه"
  • Whole Foods Green چیزی نزدیک به شماره 223323 است
  • برای نمونه عناصر گرافیکی که تکرار می شوند ، فروشگاه محلی خود را انتخاب کنید: آنها عاشق حاشیه های بریده ، خورشید و هنرهای ساده بردار هستند.

برچسب آویزان

ما شکافی را در قسمت زیرین قاب اکریلیک برش دادیم تا بتوانیم یک برچسب آویزان به جعبه وصل کنیم و توضیح دهیم که چه اتفاقی می افتد. برای نمونه PDF پیوست را مشاهده کنید. این طراحی شده است تا برش داده شود و در شکاف قرار گیرد. باید بدون هیچگونه چسب مناسب باشد و نگه داشته شود.

قفسه بندی

در مورد چسباندن جعبه به قفسه ، Whole Foods از اجزای قفسه بندی بسیار استاندارد استفاده می کند. اندازه گیری ها را انجام دادیم و یک قلاب سازگار در یک فروشگاه سخت افزار پیدا کردیم. جعبه را با چسب حرارتی به قلاب چسبانده ایم.

اگر چنین قلابی پیدا نکردید ، می توانید آهن ربا را امتحان کنید - مقداری را به پشت جعبه بچسبانید و فقط آن را روی قفسه بچسبانید.

استقرار

جعبه را در سطح چشم قرار دهید تا توجه رهگذران را به خود جلب کند. گرفتار نشو! بهترین شانس!

توصیه شده: