Talaan ng mga Nilalaman:

Pekeng Dynamic na Tag ng Presyo: 6 Mga Hakbang (na may Mga Larawan)
Pekeng Dynamic na Tag ng Presyo: 6 Mga Hakbang (na may Mga Larawan)

Video: Pekeng Dynamic na Tag ng Presyo: 6 Mga Hakbang (na may Mga Larawan)

Video: Pekeng Dynamic na Tag ng Presyo: 6 Mga Hakbang (na may Mga Larawan)
Video: ANG GANDA NG MISIS NI RIGOR!๐Ÿ˜#johnestrada #prescillameirelles 2024, Nobyembre
Anonim
Image
Image
Wire Up ang Display
Wire Up ang Display

Patuloy na nagbabago ang mga presyo ng Amazon. Kung iniiwan mo ang mga item sa iyong shopping cart nang mas mahaba kaysa sa ilang oras, malamang na maalerto ka tungkol sa mga pagbabagu-bago ng minuto - $ 0.10 dito, $ 2.04 doon. Ang Amazon at ang mga mangangalakal ay malinaw na gumagamit ng ilang uri ng pagpepresyo ng algorithmic upang pisilin ang huling sentimo sa merkado.

Iyon lang ang aasahan (huli na kapitalismo at lahat ng iyon). Ngunit ano ang mangyayari kung magkamali ang mga bagay? Noong 2011, sumiklab ang isang giyera sa pagpepresyo sa pagitan ng dalawang magkakalaban na algorithm. Ang resulta: isang libro tungkol sa lifecycle ng mga homeflies (wala sa naka-print, ngunit hindi partikular na bihira) ay tumaas sa presyong $ 23.6 milyon.

Ang kamakailang pagkuha ng Amazon ng Whole Foods Market ay nagtaka sa amin: ano ang humihinto sa dinamikong pagpepresyo mula sa paglalakad sa pisikal na mundo ng tingi? Paano kung ang mga presyo sa isang supermarket ay kasing kakayahang umangkop tulad ng mga online?

Kaya, sa Instructable na ito, gagawa kami ng isang display ng pabagu-bagong presyo na may isang Arduino at isang maliit na LCD. Maikli din naming pag-uusapan ang tungkol sa pagtatakip at pag-install nito sa isang tindahan.

(At, kung interesado ka, maaaring ipakita sa iyo ng plugin ng Chrome na ito ang kasaysayan ng pagpepresyo ng anumang item sa Amazon sa huling 120 araw.)

Kailangan ng Materyal

Narito kung ano ang ginamit namin upang itayo ang proyektong ito:

  • Isang Arduino Uno R3
  • Isang karaniwang 16x2 LCD display. Ginamit namin ang isang ito mula sa Adafruit, ngunit hangga't tugma ito sa library ng LiquidCrystal, dapat kang maging mahusay. Kakailanganin mo ang ilang mga bagay upang mai-wire ito sa Arduino:

    • ilang mga jumper cables
    • isang resistor na 220 ohm
    • isang 10k ohm potentiometer (Ito ay para sa pagkontrol ng kaibahan ng display. Kung makakita ka ng isang kaibahan na gusto mo, maaari mong palitan ang potentiometer ng isang nakapirming risistor.)
  • Ang ilang mga acrylic para sa kahon. Gumamit kami ng isang cast matte na itim na acrylic, pinutol ng laser at binuo kasama ang acrylic solvent-adhesive at mainit na pandikit.
  • Mga magnet at / o isang shelving hook upang ikabit ang kahon sa tindahan. Kung pupunta ka sa ruta ng hook, maaari mong sukatin at i-print ang isa sa isa, o subukang makahanap ng isang online (Alibaba, marahil?), O โ€ฆ makuha ito sa iba pang, mas masamang pamamaraan. Manatiling ligtas.

Una, gawin natin ang pagpapakita ng display!

Hakbang 1: Wire Up ang Display

Wire Up ang Display
Wire Up ang Display
Wire Up ang Display
Wire Up ang Display

Maraming sigurado na maraming mga pin sa likod ng LCD na iyon. Sa kabutihang palad, ang dokumentasyon para sa library ng software na gagamitin namin ay may magandang gabay sa pag-wire nito. Tingnan ito

Sa buod, ang iyong mga kable ay dapat magtapos tulad nito:

  • Lakas:

    • LCD GND (pin 1) โ†’ Arduino GND
    • LCD VDD (pin 2) โ†’ Arduino + 5V
    • LCD RW (pin 5) โ†’ Arduino GND
  • Mga bagay sa data:

    • LCD RS (pin 4) โ†’ Arduino digital pin 12
    • Paganahin ang LCD (pin 6) โ†’ Arduino digital pin 11
    • LCD D4 (pin 11) โ†’ digital pin 5
    • LCD D5 (pin 12) โ†’ digital pin 4
    • LCD D6 (pin 13) โ†’ digital pin 3
    • LCD D7 (pin 14) โ†’ digital pin 2
  • Ipakita ang kaibahan:

    • Wire ang isang 10k potentiometer's na mga binti sa Arduino's + 5V at GND
    • Output ng potensyal โ†’ LCD VO (pin 3).
  • Backlight:

    • LCD BL1 (pin 15) โ†’ 220 ohm risistor โ†’ Arduino + 5V
    • LCD BL2 (pin 16) โ†’ Arduino GND

Kapag naayos na ang lahat, i-load ang isa sa mga halimbawa ng mga proyekto sa LiquidCrystal sa Arduino IDE at tingnan kung gumagana ito! Tandaan na i-double check ang LCD initialization code sa mga sample - ang mga numero ng pin ay dapat na tama o wala kang makitang kahit ano.

Halimbawa, ang halimbawang "Blink" ay mayroong code na ito, na wastong ibinigay sa itaas na pag-setup:

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

Mga Tip

  • I-save ang iyong sarili ng ilang paghihinang at mamuhunan sa ilang mga crimp end at header konektor. Sa mga proyektong tulad nito kung saan isisiksik namin ang electronics sa isang maliit na kaso, ang kakayahang gumawa ng mga maikling jumper cable ay hindi kapani-paniwalang kapaki-pakinabang.
  • Katulad nito, ang heatshrink tubing ay talagang kapaki-pakinabang upang matiyak na walang maiikling shorts kapag ang lahat ay pinindot laban sa sarili nito.
  • Dahil maraming mga bagay na pupunta sa GND at + 5V, pinili namin na gumawa ng isang franken-cable (tingnan ang larawan sa itaas) upang maging compact hangga't maaari. Kung ang puwang ay hindi gaanong isyu, ang isang breadboard o protoshield ay mas madaling pagpipilian.
  • Ang ilang potentiometers ay may kakaibang hugis. Pangkalahatan, ang kaliwang tingga ay ginagamit bilang lupa, ang pinaka kanang lead bilang lakas, at ang gitnang bilang output. Kung ang sa iyo ay may dalawang lead sa harap at isa sa likod, ang isa sa likuran ay ang output.

Gotchas

  • Kung wala kang nakitang anumang bagay sa iyong LCD, subukang i-on ang potensyomiter sa lahat ng paraan sa isang direksyon, pagkatapos ay sa iba pa. Sa pinakamababang pagkakaiba nito, ang nilalaman ng LCD ay ganap na hindi nakikita.
  • Kung nakikita mo talaga ang kakaibang kalokohan sa LCD, o isang linya lamang sa halip na dalawa, siguraduhin na ang lahat ng iyong mga koneksyon ay ligtas. Nagkaroon kami ng isang maling koneksyon sa lupa at ito ay sanhi ng mga kakatwang isyu sa pagpapakita.
  • Ang LCD initialization code (kung ano ang pinapatakbo ng lcd.init () sa pag-andar ng setup () ay mahalaga at magtatagal. Kung may isang bagay na mali sa iyong display at pinaghihinalaan mong may sira na kawad, huwag asahan ang biglang paggalaw ng mga bagay na biglang gumana. Maaaring kailanganin mong i-reset ang Arduino kaya't ang initialization code ay may pagkakataong tumakbo nang maayos.
  • Tiyaking ang iyong mga wire ay medyo maikli, ngunit hindi masyadong maikli. Walang mas masahol pa kaysa sa kinakailangang resolder dahil malayo ka ng ilang sentimetro mula sa isang header.

Malaki! Ngayon ay ipakita natin ito sa ilang mga magagarang bagay.

Hakbang 2: Code: Mga Pangunahing Kaalaman

Code: Mga Pangunahing Kaalaman
Code: Mga Pangunahing Kaalaman
Code: Mga Pangunahing Kaalaman
Code: Mga Pangunahing Kaalaman

Una muna ang mga bagay: ipakita natin ang pagpapakita ng "Kasalukuyang Presyo:" sa nangungunang linya, at isang random na presyo sa ilang saklaw sa pangalawa. Tuwing madalas, i-refresh ang presyo. Ito ay medyo simple, ngunit i-highlight ang pangunahing paggamit ng LiquidCrystal library at ilan sa mga quirks nito.

Una, hilahin natin ang library at tukuyin ang ilang mga pare-pareho:

# isama

const uint8_t lcdWidth = 16;

const uint8_t lcdHeight = 2;

Const long minPriceInCents = 50;

const haba ng maxPriceInCents = 1999;

const unsigned long minMillisBet AntaraPriceUpdates = 0.25 * 1000;

const unsigned long maxMillisBet AntaraPriceUpdates = 2 * 1000

Malaki! Iyon ang mga parameter para sa saklaw ng presyo at kung gaano ito kadalas magre-refresh. Ngayon ay gumawa tayo ng isang halimbawa ng LCD class na ibinigay ng library at ipasimula ito. Magpi-print kami ng isang bagay sa serial console, upang magkaroon lamang ng katiyakan na gumagana ang mga bagay, kahit na wala kaming makita sa LCD. Gagawin namin iyon sa pag-andar ng setup (), na tumatakbo nang isang beses pagkatapos ng Arduino boots. Gayunpaman, tandaan na idineklara namin ang variable ng lcd sa labas ng pag-setup (), dahil nais namin ang pag-access dito sa buong programa.

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

Serial.println ("LCD initialized");

lcd.print ("Kasalukuyang Presyo:");

}

At para sa karne, gagamitin namin ang built-in na random () na pag-andar at ang string ng (initializer ng String () upang bumuo ng isang desimal na presyo. ang random () ay bumubuo lamang ng mga integer, kaya't hahatiin namin ang resulta nito sa 100.0 upang makakuha ng isang lumulutang-point na halaga. Gagawin namin ito sa loop (), kaya't nangyayari ito nang madalas hangga't maaari, ngunit may isang random na pagkaantala sa pagitan ng mga pare-pareho na tinukoy namin nang mas maaga.

walang bisa loop ()

{doble na presyo = random (minPriceInCents, maxPriceInCents) / 100.0; String prettyPrice = "$" + String (presyo, 2); lcd.setCursor (0, 1); lcd.print (prettyPrice); pagkaantala (random (minMillisBet AntaraPriceUpdates, maxMillisBet AntaraPriceUpdates)); }

Ang isang bagay na dapat tandaan ay ang tawag sa lcd.setCursor (). Ang library ng LiquidCrystal ay hindi awtomatikong isulong ang iyong teksto sa susunod na linya pagkatapos ng isang pag-print, kaya kailangan naming manu-manong ilipat ang (hindi nakikita) na cursor sa pangalawang linya (narito 1 - ito ay batay sa zero). Tandaan din na hindi namin kailangang i-print muli ang "Kasalukuyang Presyo:"; ang LCD ay hindi na-clear maliban kung gagawin mo ito nang manu-mano, kaya kailangan lang namin i-update ang pabagu-bagong teksto.

Patakbuhin ito at mabilis mong makita ang isang kaugnay na problema. Kung ang presyo ay, sabihin, "$ 14.99" at pagkatapos ay "$ 7.22", ipapakita ang display na "$ 7.229". Tandaan, ang display ay hindi malilinaw ang sarili maliban kung sabihin mo ito sa. Kahit na mag-print ka sa parehong linya, mananatiling anumang teksto na lumampas sa na-print mo. Upang ayusin ang problemang ito, kailangan naming pad ang aming string ng mga puwang upang mai-overlap ang anumang mga potensyal na basura. Ang pinakamadaling paraan upang gawin ito ay upang mai-tack sa ilang mga puwang sa aming variable na medyoPrice:

String prettyPrice = "$" + String (presyo, 2) + "";

Sa pagbabago sa lugar, mayroon kaming isang patunay ng konsepto! Guluhin natin ito nang kaunti.

Hakbang 3: Code: Mga Pasadyang Character

Code: Mga Pasadyang Character
Code: Mga Pasadyang Character
Code: Mga Pasadyang Character
Code: Mga Pasadyang Character

Ang isa sa mga pinaka-cool na tampok ng module na LCD na ginagamit namin ay ang kakayahang lumikha ng hanggang sa 8 pasadyang mga character. Ginagawa ito sa pamamagitan ng pamamaraang createChar (). Ang pamamaraang ito ay tumatagal ng isang array ng 8x5 bits na naglalarawan kung aling mga pixel ng LCD ang i-on para sa naibigay na character. Mayroong ilang mga tool sa online upang matulungan ang pagbuo ng mga arrays na ito. Ginamit ko ang isang ito.

Kung hindi ka partikular na nagdidisenyo, inirerekumenda kong gamitin ang filter ng Threshold sa Photoshop upang gawing itim-at-puti ang isang imahe, at i-convert iyon sa mga character. Tandaan na mayroon kang maximum na 8 pasadyang mga character, o 64x5 na mga pixel.

Pinili ko ang paggamit ng 6 sa mga character na iyon para sa logo ng Amazon arrow, at ang natitirang 2 para sa isang mas mahusay na simbolo ng trademark. Maaari mong sundin ang halimbawa ng CustomCharacter sa Arduino IDE para sa kung paano gamitin ang API. Ito ang paraan kung paano ako nagpasyang i-grupo ang mga bagay:

// Tukuyin ang data para sa mga character na Trademark

const size_t trademarkCharCount = 2; const uint8_t trademarkChars [trademarkCharCount] [8] = {{B00111, B00010, B00010, B00000, B00000, B00000, B00000, B00000}, {B10100, B11100, B10100, B00000, B00000, B00000 B00000}}; uint8_t munaTrademarkCharByte; // Ang byte na ginamit upang i-print ang character na ito; itinalaga sa initCustomChars ()

Pagkatapos ay ginamit ko ang isang pagpapaandar na tulad nito, na tinawag mula sa pag-setup (), upang likhain ang mga character:

walang bisa initCustomChars () {

firstTrademarkCharByte = 0; para sa (size_t i = 0; i <trademarkCharCount; i ++) {lcd.createChar (logoCharCount + i, (uint8_t *) trademarkChars ); }}

Pagkatapos nito, ang pag-print ng mga pasadyang character ay kasing simple ng paggamit ng lcd.write () na may naaangkop na mga byte. Sumulat ako ng isang function ng helper upang mai-print ang isang saklaw ng mga byte, at tinukoy na printTrademark () sa mga tuntunin nito:

walang bisa ang writeRawByteRange (uint8_t line, uint8_t col, uint8_t startValue, size_t numBytes)

{para sa (uint8_t i = 0; i <numBytes; i ++) {lcd.setCursor (col + i, line); // kailangang gumamit ng magsulat (), hindi mai-print () - i-print ang magpapasara sa integer // na halaga sa isang string at i-print * na * lcd.write (startValue + i); }} void printTrademark (uint8_t line, uint8_t col) {writeRawByteRange (line, col, firstTrademarkCharByte, trademarkCharCount); }

Ang Amazon arrow logo ay ginagamot sa katulad na paraan. Tingnan ang nakalakip na code para sa buong mga detalye.

Hakbang 4: Code: Nicenes

Upang gawing mas madali ang mga bagay sa aking sarili, nagdagdag ako ng ilang mga kagandahan sa code. Kasama dito ang mga bagay tulad ng: isang pagpapaandar para sa pag-clear ng isang tukoy na linya sa pamamagitan ng pag-o-overtake nito sa mga puwang, at isang pagpapaandar para sa pagsentro ng isang naibigay na string sa isang linya.

Nais ko rin na ipakita ang cycle sa pamamagitan ng tatlong magkakaibang mga phase:

  1. "Dynamic Pricing" na may logo sa ibaba
  2. "ni Amazon" na may logo sa ibaba
  3. random na display ng presyo

Para doon, bumuo ako ng isang simpleng sistema na sinusubaybayan kung gaano katagal ang isang naibigay na yugto ay naging aktibo, at pagkatapos ng isang tiyak na panahon, lumipat sa susunod.

Tingnan ang nakalakip na code para sa lahat ng mga detalye ng gory!

Hakbang 5: Ang Kahon

Ang kahon
Ang kahon

Ngayon, upang hindi namin matawagan ang bomb squad sa amin, gumawa tayo ng isang magandang kahon para sa buong bagay. Gagawin namin ito sa laser-cut acrylic. Mayroong maraming mga tool sa online para sa paglulunsad ng proseso ng paggawa ng mga simpleng kahon. Inirerekumenda ko ang makercase.com, dahil hinahayaan ka nitong tukuyin ang mga panloob na sukat at account para sa kapal ng materyal.

Sinukat namin ang Arduino, LCD at 9V na baterya, at tinantya na maakma namin ito sa isang kaso na 4 "x 2.5" x 2 ". Kaya, isinaksak namin ang mga iyon sa makercase, na may 1/8" makapal acrylic Binago namin ang nagresultang PDF upang magdagdag ng isang bilugan na window para sa LCD, at isang puwang kasama sa ibaba para sa isang display tag (higit pa sa paglaon). Ang nagresultang file ay naka-attach bilang isang PDF.

Gumamit kami ng acrylic adhesive (ang nakakalason na methyl ethyl ketone na uri) upang tipunin ang apat na gilid ng kahon. Pagkatapos ay ikinabit namin ang LCD panel sa harap na may mainit na pandikit. Kapag nagkaroon na kami ng lahat ng bagay na gumagana at umaangkop, tinatakan namin ang huling dalawang panig ng kahon na may mainit na pandikit, upang madali naming maibukod ito sa paglaon. Dahil hindi namin inaasahan ang aparato na makakatanggap ng maraming pagkasira, iniwan namin ang Arduino at baterya na walang seguridad sa ilalim ng kaso.

Mga Potensyal na Pagpapabuti

  • Napabayaan naming bumuo ng anumang paraan upang i-on o i-off ang aparato. Ha. Ang silid para sa isang paglipat sa ilalim o likod ng kahon ay isang magandang ideya.
  • Ang puwang sa ilalim ng ibaba para sa nakabitin na tag ay maaaring mas malapit sa harap ng kahon, para sa pinahusay na kakayahang makita.

Hakbang 6: Paghahalo sa

Pakikisalamuha
Pakikisalamuha
Pakikisalamuha
Pakikisalamuha

At ngayon, ang mahirap na bahagi: paglalagay nito sa isang tindahan.

Pag-tatak ng Buong Pagkain

Ang ilang mga bagay na natutunan namin sa reverse-engineering Whole Foods at Amazon branding:

  • Ang teksto ng katawan ay karaniwang nasa Scala Sans
  • Ang teksto ng header ay nasa isang bagay na kamukha ni Brighton - isa sa mga pangkalahatang mga font na "mainit at magiliw"
  • Ang Whole Foods Green ay isang bagay na malapit sa # 223323
  • Alamin ang iyong lokal na tindahan para sa mga halimbawa ng mga elemento ng graphic na umuulit: mahilig sila sa mga scalloped border, sunbursts, at simpleng vector art.

Ang hang tag

Pinutol namin ang isang slit sa ilalim ng kaso ng acrylic upang mailakip namin ang isang nakabitin na tag sa kahon, na nagpapaliwanag kung ano ang nangyayari. Tingnan ang kalakip na PDF para sa isang halimbawa. Ito ay dinisenyo upang i-cut at ipinasok sa puwang; dapat itong magkasya at hawakan nang walang anumang malagkit.

Paglalagom

Tulad ng para sa tunay na paglakip ng kahon sa isang istante, ang Whole Foods ay gumagamit ng medyo karaniwang mga sangkap ng paglalagay ng shelving. Sumukat kami at nakakita ng katugmang hook sa isang tindahan ng hardware. Inilagay namin ang kahon sa kawit na may mainit na pandikit.

Kung hindi mo makita ang ganoong kawit, maaari mong subukan ang mga magnet - idikit ang ilan sa likod ng kahon, at i-snap lamang ito sa isang istante.

I-deploy

Ilagay ang kahon sa antas ng mata upang maakit ang pansin ng mga dumadaan. Huwag mahuli! Pinakamahusay ng swerte!

Inirerekumendang: