Mündəricat:

Saxta Dinamik Qiymət Etiketi: 6 Adım (Şəkillərlə birlikdə)
Saxta Dinamik Qiymət Etiketi: 6 Adım (Şəkillərlə birlikdə)

Video: Saxta Dinamik Qiymət Etiketi: 6 Adım (Şəkillərlə birlikdə)

Video: Saxta Dinamik Qiymət Etiketi: 6 Adım (Şəkillərlə birlikdə)
Video: Ən çətin məntiq testi.😉 Kim tapsa 1-ci yer. Yalnız 1 nəfər.❗❗ 2024, Iyul
Anonim
Image
Image
Ekranı bağlayın
Ekranı bağlayın

Amazon -un qiymətləri daim dəyişir. Alış -veriş səbətinizdə əşyaları bir neçə saatdan artıq tərk etsəniz, ehtimal ki, dəqiqə dalğalanmaları ilə bağlı xəbərdarlıq alacaqsınız - burada 0.10 dollar, orada 2.04 dollar. Amazon və tacirləri, açıq şəkildə son qəpiyi bazardan sıxışdırmaq üçün bir növ alqoritmik qiymətdən istifadə edirlər.

Hamısı gözləniləndir (gec kapitalizm və bütün bunlar). Bəs işlər pis gedirsə nə olacaq? 2011 -ci ildə rəqabət aparan iki alqoritm arasında qiymət müharibəsi başladı. Nəticə: ev sineklərinin həyat dövrü haqqında bir kitab (çapdan çıxmış, lakin nadir hallarda deyil) 23.6 milyon dollara yüksəldi.

Amazon -un Whole Foods Market -i bu yaxınlarda əldə etməsi bizi təəccübləndirdi: dinamik qiymətlərin pərakəndə satış dünyasına girməsinə nə mane olur? Bir supermarketdəki qiymətlər onlayn qiymətlər qədər elastik olsaydı nə olardı?

Beləliklə, bu Təlimatlandırmada Arduino və kiçik bir LCD ilə dinamik bir qiymət ekranı quracağıq. Bir mağazada maskalanması və quraşdırılması haqqında da qısaca danışacağıq.

(Və əgər maraqlanırsınızsa, bu Chrome plagini sizə Amazon -da son 120 gün ərzində hər hansı bir məhsulun qiymət tarixçəsini göstərə bilər.)

Lazımi material

Bu layihəni hazırlamaq üçün istifadə etdiyimiz budur:

  • Bir Arduino Uno R3
  • Standart 16x2 LCD ekran. Bunu Adafruit -dən istifadə etdik, ancaq LiquidCrystal kitabxanası ilə uyğun olduğu müddətcə yaxşı olmalısan. Arduino'ya bağlamaq üçün bir neçə şeyə ehtiyacınız olacaq:

    • bəzi keçid kabelləri
    • 220 ohm müqavimət
    • 10k ohm potansiyometr (Ekranın kontrastını idarə etmək üçündür. İstədiyiniz bir kontrast taparsanız, potansiyometrini sabit bir rezistorla əvəz edə bilərsiniz.)
  • Qutu üçün bir az akril. Tökmə mat qara akril, lazer kəsilmiş və akril solvent-yapışqan və isti yapışqan ilə yığılmış istifadə etdik.
  • Mağazada qutunu bağlamaq üçün maqnitlər və/və ya raf kancası. Çəngəl marşrutuna girsəniz, birini ölçüb 3d çap edə bilərsiniz, ya da onlayn olaraq (Alibaba, bəlkə də?) Tapmağa cəhd edə bilərsiniz və ya … başqa, daha çirkin bir şəkildə əldə edə bilərsiniz. Ehtiyyatlı ol.

Əvvəlcə ekranı işə salaq!

Addım 1: Ekranı bağlayın

Ekranı bağlayın
Ekranı bağlayın
Ekranı bağlayın
Ekranı bağlayın

Əlbəttə ki, LCD -nin arxasında çoxlu sancaqlar var. Xoşbəxtlikdən, istifadə edəcəyimiz proqram kitabxanasının sənədləri onu bağlamaq üçün yaxşı bir bələdçiyə malikdir. Onu yoxlamaq.

Xülasə olaraq, kabelləriniz belə bitməlidir:

  • Güc:

    • LCD GND (pin 1) → Arduino GND
    • LCD VDD (pin 2) → Arduino +5V
    • LCD RW (pin 5) → Arduino GND
  • Məlumat əşyaları:

    • LCD RS (pin 4) → Arduino rəqəmsal pin 12
    • LCD Aktivləşdir (pin 6) → Arduino rəqəmsal pin 11
    • LCD D4 (pin 11) → rəqəmsal pin 5
    • LCD D5 (pin 12) → rəqəmsal pin 4
    • LCD D6 (pin 13) → rəqəmsal pin 3
    • LCD D7 (pin 14) → rəqəmsal pin 2
  • Ekran kontrastı:

    • Arduino +5V və GND -ə 10k potansiyometr ayaqları bağlayın
    • Potansiometr çıxışı → LCD VO (pin 3).
  • Arxa işıq:

    • LCD BL1 (pin 15) → 220 ohm müqavimət → Arduino +5V
    • LCD BL2 (pin 16) → Arduino GND

Hər şey bitdikdə, Arduino IDE -də LiquidCrystal layihələrindən birini yükləyin və işlədiyinə baxın! Nümunələrdə LCD başlanğıc kodunu iki dəfə yoxlamağı unutmayın-pin nömrələrinin düzgün olması lazımdır, əks halda heç nə görməyəcəksiniz.

Məsələn, "Blink" nümunəsində yuxarıda göstərilən quruluşu nəzərə alaraq düzgün olan bu kod var:

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

İpuçları

  • Özünüzü bir az lehimdən qoruyun və bəzi qıvrım uclarına və başlıq bağlayıcılarına investisiya qoyun. Elektronikanı kiçik bir çantaya yığacağımız belə layihələrdə qısa tullanan kabellər düzəltmək inanılmaz dərəcədə faydalıdır.
  • Eynilə, istilik yığma boruları, hamısı özünə basıldıqda heç bir şeyin qısalmamasını təmin etmək üçün həqiqətən faydalıdır.
  • GND və +5V-ə gedəcək çox şey olduğundan, mümkün qədər yığcam olmaq üçün açıq bir kabel (yuxarıdakı fotoşəkilə bax) etməyi seçdik. Məkan daha az problem olsaydı, çörək taxtası və ya protoshield daha asan bir seçim olardı.
  • Bəzi potensiometrlər qəribə formadadır. Ümumiyyətlə, sol aparat yer kimi, ən sağ ucu güc olaraq, ortası isə çıxış olaraq istifadə olunur. Səninki öndə və arxada iki aparat varsa, arxadakı biri çıxışdır.

Gotchas

  • LCD -də heç bir şey görmürsənsə, potansiyometrini bir istiqamətə, sonra digərinə çevirməyə çalış. Ən aşağı əksinə, LCD -nin məzmunu tamamilə görünməzdir.
  • LCD -də həqiqətən qəribə bir mənasızlıq və ya iki əvəzinə yalnız bir xətt görürsünüzsə, bütün əlaqələrinizin etibarlı olduğundan əmin olun. Torpağa səhv bir əlaqə qurduq və ən qəribə ekran problemlərinə səbəb oldu.
  • LCD başlatma kodu (setup () funksiyasında lcd.init () tərəfindən işlədilənlər) vacibdir və bir az çəkir. Ekranınızda bir şey səhvdirsə və telin nasazlığından şübhələnirsinizsə, birdən -birə işlətmək üçün çırpınan şeylərin işləməsini gözləməyin. Başlanğıc kodunun düzgün işləməsi üçün Arduinonu sıfırlamanız lazım ola bilər.
  • Tellərinizin olduqca qısa olduğuna əmin olun, amma çox qısa deyil. Başlıqdan bir neçə santimetr uzaqda olduğunuz üçün yenidən satmaqdan daha pis bir şey yoxdur.

Əla! İndi gəlin bunu bəzəkli şeylər göstərək.

Addım 2: Kod: Əsaslar

Kod: Əsaslar
Kod: Əsaslar
Kod: əsaslar
Kod: əsaslar

Əvvəlcə ilk şeylər: üst sətirdə "Cari Qiymət:" ekran şousunu, ikincisində isə bəzi aralıqda təsadüfi bir qiymət göstərək. Tez -tez qiymətləri yeniləyək. Bu olduqca sadədir, lakin LiquidCrystal kitabxanasının əsas istifadəsini və bəzi xüsusiyyətlərini vurğulayacaq.

Əvvəlcə kitabxananı götürək və bəzi sabitləri təyin edək:

#daxil edin

const uint8_t lcdWidth = 16;

const uint8_t lcdHeight = 2;

const uzun minPriceInCents = 50;

const long maxPriceInCents = 1999;

const imzasız uzun minMillisBetweenPriceUpdates = 0.25 * 1000;

const imzasız uzun maxMillisBetweenPriceUpdates = 2 * 1000

Əla! Bunlar qiymət aralığının parametrləridir və nə qədər tez -tez yenilənir. İndi kitabxananın təqdim etdiyi LCD sinifindən bir nümunə götürək və onu işə salaq. LCD -də heç bir şey görməsək də işlərin işlədiyinə əmin olmaq üçün serial konsoluna bir şey yazdıracağıq. Bunu Arduino çəkmələrindən sonra bir dəfə işləyən setup () funksiyasında edəcəyik. Qeyd edək ki, lcd dəyişənini setup () xaricində elan etdiyimizə diqqət yetirin, çünki ona proqram boyunca daxil olmaq istəyirik.

LiquidCrystal lcd (12, 11, 5, 4, 3, 2); void setup () {Serial.begin (9600); lcd.begin (lcdWidth, lcdHeight);

Serial.println ("LCD başlanğıc");

lcd.print ("Cari Qiymət:");

}

Və ət üçün, təsadüfi () funksiyasından və String () başlanğıcından istifadə edərək ondalık qiymət quracağıq. random () yalnız tam ədədlər yaradır, buna görə də üzən nöqtə dəyəri əldə etmək üçün nəticəsini 100.0-a böləcəyik. Bunu loop () da edəcəyik, buna görə də bu mümkün qədər tez -tez baş verir, lakin əvvəllər müəyyən etdiyimiz sabitlər arasında təsadüfi bir gecikmə ilə.

boşluq döngəsi ()

{ikiqat qiymət = təsadüfi (minPriceInCents, maxPriceInCents) / 100.0; String prettyPrice = "$" + String (qiymət, 2); lcd.setCursor (0, 1); lcd.print (prettyPrice); gecikmə (təsadüfi (minMillisBetweenPriceUpdates, maxMillisBetweenPriceUpdates)); }

Qeyd etmək lazım olan bir şey lcd.setCursor () zəngidir. LiquidCrystal kitabxanası çapdan sonra mətninizi avtomatik olaraq növbəti sətrə keçirmir, ona görə də (görünməz) kursoru əllə ikinci sətrə daşımalıyıq (burada 1-sıfır əsaslıdır). Bir də "Cari Qiymət:" yazmaq məcburiyyətində olmadığımızı unutmayın; Əl ilə etmədikcə LCD silinmir, buna görə yalnız dinamik mətni yeniləmək məcburiyyətindəyik.

Çalışın və əlaqəli bir problemi tez bir zamanda görərsiniz. Qiymət, "$ 14.99" və sonra "$ 7.22" olsaydı, ekranda "$ 7.229" göstərilir. Unutmayın ki, bunu deməyincə ekran özünü təmizləmir. Eyni sətirdə çap etsəniz də, çap etdiklərinizdən əvvəlki hər hansı bir mətn qalacaq. Bu problemi həll etmək üçün potensial zibilin üzərinə yazmaq üçün sətrimizi boşluqlarla doldurmalıyıq. Bunu etmək üçün ən asan yol, yalnız bir neçə boşluqdan istifadə edərək prettyPrice dəyişənimizdir:

String prettyPrice = "$" + String (qiymət, 2) + "";

Bu dəyişikliklə, konsepsiyaya dair bir sübutumuz var! Gəlin bir az da tərifləyək.

Addım 3: Kod: Xüsusi Xüsusiyyətlər

Kod: Xüsusi simvollar
Kod: Xüsusi simvollar
Kod: Xüsusi simvollar
Kod: Xüsusi simvollar

İstifadə etdiyimiz LCD modulunun ən maraqlı xüsusiyyətlərindən biri 8 -ə qədər xüsusi simvol yaratmaqdır. Bu createChar () üsulu ilə edilir. Bu üsul, verilən xarakter üçün LCD -nin hansı piksellərinin açılacağını təsvir edən 8x5 bitlik bir sıra alır. Bu serialların yaradılmasına kömək edəcək bir neçə vasitə var. Men bunu istifade etdim.

Xüsusilə dizayner kimi hiss etmirsinizsə, görüntünü ağ-ağa çevirmək üçün Photoshop-da Eşik filtrindən istifadə etməyi və bunu simvollara çevirməyi məsləhət görürəm. Maksimum 8 xüsusi simvolunuz və ya 64x5 piksel olduğunuzu unutmayın.

Amazon oxu loqotipi üçün bu simvollardan 6 -nı, daha gözəl bir ticarət nişanı simvolu üçün qalan 2 -ni istifadə etməyi seçdim. API -dən necə istifadə etmək üçün Arduino IDE -də CustomCharacter nümunəsini izləyə bilərsiniz. İşləri belə qruplaşdırmağa qərar verdim:

// Ticarət nişanı simvolları üçün məlumatları təyin edin

const size_t ticarət markasıCharCount = 2; const uint8_t ticarət markasıChars [ticarət markasıCharCount] [8] = {{B00111, B00010, B00010, B00000, B00000, B00000, B00000, B00000}, {B10100, B11100, B10100, B00000, B00000, B00000, B00000 B00000}}; uint8_t firstTrademarkCharByte; // Bu xarakteri çap etmək üçün istifadə olunan bayt; initCustomChars () da təyin edildi

Sonra simvolları yaratmaq üçün setup () adlanan belə bir funksiyadan istifadə etdim:

etibarsız initCustomChars () {

firstTrademarkCharByte = 0; for (size_t i = 0; i <ticarət markasıCharCount; i ++) {lcd.createChar (logoCharCount+i, (uint8_t *) ticarət nişanıChars ); }}

Bundan sonra, xüsusi simvolları çap etmək, lcd.write () istifadə edərək müvafiq baytlarla istifadə etmək qədər sadədir. Bir sıra bayt çap etmək üçün köməkçi funksiya yazdım və bunun üçün printTrademark () təyin etdim:

etibarsız yazmaRawByteRange (uint8_t xətti, uint8_t col, uint8_t startValue, size_t numBytes)

{for (uint8_t i = 0; i <numBytes; i ++) {lcd.setCursor (col+i, xətt); // print () deyil, write () istifadə etməlisiniz - print // tamsayı dəyərini bir sətrə çevirəcək və * lcd.write (startValue + i) yazdıracaq; }} etibarsız printTrademark (uint8_t xətti, uint8_t col) {writeRawByteRange (xətt, col, birinciTrademarkCharByte, ticarət markasıCharCount); }

Amazon oxunun loqotipinə bənzər bir şəkildə baxıldı. Tam məlumat üçün əlavə edilmiş koda baxın.

Addım 4: Kod: Nişanlar

İşimi bir az asanlaşdırmaq üçün koda bir neçə gözəllik əlavə etdim. Bura belə şeylər daxildir: müəyyən bir sətri boşluqlarla yenidən yazaraq təmizləmək üçün bir funksiya və müəyyən bir sətrin bir sətir üzərində mərkəzləşdirilməsi funksiyası.

Ekranın üç fərqli mərhələdən keçməsini də istədim:

  1. Aşağıdakı logo ilə "Dinamik Qiymətləndirmə"
  2. Aşağıdakı logo ilə "Amazon tərəfindən"
  3. təsadüfi qiymət göstəricisi

Bunun üçün müəyyən bir mərhələnin nə qədər aktiv olduğunu izləyən və müəyyən bir müddətdən sonra növbəti mərhələyə keçən sadə bir sistem qurdum.

Bütün gory təfərrüatları üçün əlavə edilmiş koda baxın!

Addım 5: Qutu

Qutu
Qutu

İndi, bomba heyətinin bizi çağırmadığını görək, hər şey üçün gözəl bir qutu hazırlayaq. Bunu lazerlə kəsilmiş akril ilə edəcəyik. Sadə qutular hazırlamaq prosesinə başlamaq üçün bir çox onlayn vasitə var. Makercase.com saytını tövsiyə edirəm, çünki materialın qalınlığının daxili ölçülərini və hesablarını təyin etməyə imkan verir.

Arduino, LCD və 9V batareyasını ölçdük və 4 "x 2.5" x 2 "ölçüsündə bir korpusa sığdıra biləcəyimizi təxmin etdik. Beləliklə, bunları 1/8" qalınlığı ilə böyük ölçüyə bağladıq. akril. Yaranan PDF -ni, LCD üçün yuvarlaq bir pəncərə və bir ekran etiketi üçün altındakı bir yuva əlavə etmək üçün dəyişdirdik (daha sonra bu barədə). Yaranan fayl PDF olaraq əlavə olunur.

Qutunun dörd tərəfini yığmaq üçün akril yapışdırıcıdan (zəhərli metil etil keton növü) istifadə etdik. Sonra LCD panelini isti yapışqan ilə ön tərəfə bağladıq. Hər şeyi işlək və uyğun hala gətirdikdən sonra, qutunun son iki tərəfini isti yapışqanla möhürlədik ki, sonra asanlıqla ayıra bilək. Cihazın çox aşınma ehtimalını gözləmədiyimiz üçün Arduino və batareyanı korpusun alt hissəsində təminatsız qoyduq.

Potensial təkmilləşdirmələr

  • Cihazı açmaq və ya söndürmək üçün hər hansı bir şəkildə qurmağa laqeyd yanaşdıq. Ha. Qutunun altındakı və ya arxasındakı keçid üçün otaq yaxşı bir fikir olardı.
  • Asılı etiket üçün altdakı yuva, görmə qabiliyyətini yaxşılaşdırmaq üçün qutunun ön hissəsinə yaxın ola bilərdi.

Addım 6: Qarışdırın

Qarışdırma
Qarışdırma
Qarışdırma
Qarışdırma

Və indi çətin tərəfi: gizlincə bir mağazaya girmək.

Whole Foods markası

Whole Foods və Amazon markasının tərs mühəndisliyində öyrəndiyimiz bəzi şeylər:

  • Əsas mətn ümumiyyətlə Scala Sans dilindədir
  • Başlıq mətni, ümumi "isti və dostluq" şriftlərindən biri olan Brightona çox bənzəyən bir şeydədir
  • Whole Foods Green #223323 -ə yaxın bir şeydir
  • Təkrarlanan qrafik elementlərin nümunələri üçün yerli mağazanıza diqqət yetirin: taraklı haşiyələri, günəş şüalarını və sadə vektor sənətini sevirlər.

Asılı etiket

Akrilik qutunun altındakı bir yarıq kəsdik ki, qutuya asılan bir etiket yapışdıraq və nələr olduğunu izah edək. Nümunə üçün əlavə edilmiş PDF -ə baxın. Bu kəsilib yuvaya daxil edilmək üçün hazırlanmışdır; heç bir yapışqan olmadan uyğun olmalıdır.

Rəflər

Qutunu bir rafa bağlamağa gəlincə, Whole Foods olduqca standart rəf komponentlərindən istifadə edir. Ölçmələr apardıq və bir hardware mağazasında uyğun bir çəngəl tapdıq. Qutunu isti yapışqan ilə çəngələ yapışdırdıq.

Belə bir çəngəl tapa bilmirsinizsə, maqnitləri sınaya bilərsiniz - bəzilərini qutunun arxasına yapışdırın və sadəcə bir rəfə yapışdırın.

Yerləşdirmək

Yoldan keçənlərin diqqətini çəkmək üçün qutunu göz səviyyəsində qoyun. Tutulmayın! Uğurlar!

Tövsiyə: