İçindekiler:

Sahte Dinamik Fiyat Etiketi: 6 Adım (Resimlerle)
Sahte Dinamik Fiyat Etiketi: 6 Adım (Resimlerle)

Video: Sahte Dinamik Fiyat Etiketi: 6 Adım (Resimlerle)

Video: Sahte Dinamik Fiyat Etiketi: 6 Adım (Resimlerle)
Video: ASKERDE DÖVME NASIL YAPILIR? 2024, Kasım
Anonim
Image
Image
Ekranı Kablolayın
Ekranı Kablolayın

Amazon'un fiyatları sürekli değişiyor. Öğeleri alışveriş sepetinizde birkaç saatten uzun süre bırakırsanız, dakika dalgalanmaları konusunda büyük olasılıkla uyarı alırsınız - burada 0,10 ABD doları, burada 2,04 ABD doları. Amazon ve tüccarları, piyasadan son kuruşunu çıkarmak için belli ki bir tür algoritmik fiyatlandırma kullanıyor.

Beklenecek olan bu (geç kapitalizm ve tüm bunlar). Ama işler ters giderse ne olur? 2011 yılında iki rakip algoritma arasında bir fiyatlandırma savaşı patlak verdi. Sonuç: Karasineklerin yaşam döngüsü üzerine bir kitap (baskısı tükenmiş, ancak özellikle nadir değil) 23,6 milyon dolara fırladı.

Amazon'un yakın zamanda Whole Foods Market'i satın alması bizi meraklandırdı: Dinamik fiyatlandırmanın perakendenin fiziksel dünyasına adım atmasını engelleyen nedir? Ya bir süpermarketteki fiyatlar internetteki fiyatlar kadar esnek olsaydı?

Bu nedenle, bu Eğitilebilir Tabloda, bir Arduino ve küçük bir LCD ile dinamik bir fiyat ekranı oluşturacağız. Ayrıca, kılık değiştirme ve bir mağazaya kurma hakkında da kısaca konuşacağız.

(Ayrıca ilgileniyorsanız, bu Chrome eklentisi size Amazon'daki herhangi bir ürünün son 120 gün içindeki fiyat geçmişini gösterebilir.)

Gerekli Malzeme

İşte bu projeyi oluşturmak için kullandığımız şey:

  • Arduino Uno R3
  • Standart 16x2 LCD ekran. Bunu Adafruit'ten kullandık, ancak LiquidCrystal kitaplığı ile uyumlu olduğu sürece iyi olmalısınız. Arduino'ya bağlamak için birkaç şeye ihtiyacınız olacak:

    • bazı atlama kabloları
    • 220 ohm'luk bir direnç
    • 10k ohm'luk bir potansiyometre (Bu, ekranın kontrastını kontrol etmek içindir. Hoşunuza giden bir kontrast bulursanız, potansiyometreyi sabit bir dirençle değiştirebilirsiniz.)
  • Kutu için biraz akrilik. Dökme mat siyah akrilik kullandık, lazerle kestik ve akrilik solvent-yapıştırıcı ve sıcak tutkalla birleştirdik.
  • Kutuyu mağazaya takmak için mıknatıslar ve/veya bir raf kancası. Kanca yoluna giderseniz, bir tanesini ölçebilir ve 3 boyutlu yazdırabilir veya çevrimiçi bir tane bulmaya çalışabilirsiniz (Belki Alibaba?), veya … onu başka, daha kötü bir şekilde elde edebilirsiniz. Dikkatli ol.

İlk önce, ekranı çalıştıralım!

1. Adım: Ekranı Bağlayın

Ekranı Kablolayın
Ekranı Kablolayın
Ekranı Kablolayın
Ekranı Kablolayın

LCD'nin arkasında kesinlikle bir sürü pin var. Neyse ki, kullanacağımız yazılım kitaplığının belgelerinde, onu kablolamak için iyi bir kılavuz var. Bunu kontrol et.

Özetle, kablolamanız şöyle bitmelidir:

  • Güç:

    • LCD GND (pin 1) → Arduino GND
    • LCD VDD (pin 2) → Arduino +5V
    • LCD RW (pim 5) → Arduino GND
  • Veri öğeleri:

    • LCD RS (pin 4) → Arduino dijital pin 12
    • LCD Etkin (pin 6) → Arduino dijital pin 11
    • LCD D4 (pim 11) → dijital pin 5
    • LCD D5 (pin 12) → dijital pin 4
    • LCD D6 (pin 13) → dijital pin 3
    • LCD D7 (pim 14) → dijital pim 2
  • Ekran kontrastı:

    • 10k potansiyometrenin bacaklarını Arduino'nun +5V ve GND'sine bağlayın
    • Potansiyometre çıkışı → LCD VO (pin 3).
  • Arka ışık:

    • LCD BL1 (pin 15) → 220 ohm direnç → Arduino +5V
    • LCD BL2 (pin 16) → Arduino GND

Her şey hazır olduğunda, Arduino IDE'deki örnek LiquidCrystal projelerinden birini yükleyin ve çalışıp çalışmadığını görün! Örneklerdeki LCD başlatma kodunu iki kez kontrol etmeyi unutmayın – pin numaralarının doğru olması gerekir yoksa hiçbir şey görmezsiniz.

Örneğin, "Blink" örneğinde, yukarıdaki kurulum göz önüne alındığında doğru olan bu kod bulunur:

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

İpuçları

  • Kendinize biraz lehimden tasarruf edin ve bazı kıvrım uçlarına ve başlık konektörlerine yatırım yapın. Elektroniği küçük bir kasaya sığdıracağımız bunun gibi projelerde, kısa atlama kabloları yapabilmek inanılmaz derecede yardımcı oluyor.
  • Benzer şekilde, ısıyla daralan makaron, kendisine bastırıldığında hiçbir şeyin kısa devre yapmamasını sağlamak için gerçekten yararlıdır.
  • GND ve +5V'a giden çok fazla şey olduğundan, mümkün olduğunca kompakt olması için bir franken kablosu (yukarıdaki fotoğrafa bakın) yapmayı seçtik. Alan daha az sorun olsaydı, bir devre tahtası veya protoshield daha kolay bir seçenek olurdu.
  • Bazı potansiyometreler garip şekillidir. Genel olarak, sol uç toprak, en sağdaki uç güç ve orta uç çıkış olarak kullanılır. Sizinkinin önde ve arkada iki ucu varsa, arkadaki çıkıştır.

yakalandım

  • LCD'nizde hiçbir şey görmüyorsanız, potansiyometreyi bir yöne, ardından diğer yöne çevirmeyi deneyin. En düşük kontrastta, LCD'nin içeriği tamamen görünmezdir.
  • LCD'de gerçekten tuhaf anlamsız sözler veya iki yerine yalnızca bir satır görüyorsanız, tüm bağlantılarınızın güvenli olduğundan emin olun. Toprakla bağlantımız hatalıydı ve en garip görüntü sorunlarına neden oluyordu.
  • LCD başlatma kodu (setup() işlevinde lcd.init() tarafından çalıştırılan şey) önemlidir ve biraz zaman alır. Ekranınızda bir sorun varsa ve arızalı bir kablodan şüpheleniyorsanız, titreyen şeylerin aniden çalışmasını beklemeyin. Başlatma kodunun düzgün çalışma şansı olması için Arduino'yu sıfırlamanız gerekebilir.
  • Kablolarınızın oldukça kısa olduğundan, ancak çok kısa olmadığından emin olun. Bir başlıktan birkaç santimetre uzakta olduğunuz için yeniden lehimlemek zorunda kalmaktan daha kötü bir şey yoktur.

Harika! Şimdi biraz süslü şeyler göstermesini sağlayalım.

2. Adım: Kod: Temel Bilgiler

Kod: Temel Bilgiler
Kod: Temel Bilgiler
Kod: Temel Bilgiler
Kod: Temel Bilgiler

İlk önce ilk şeyler: en üst satırda ekranın "Cari Fiyat:" ve ikinci satırda bir aralıkta rastgele bir fiyat göstermesini sağlayalım. Sık sık, fiyatı yenileyelim. Bu oldukça basittir, ancak LiquidCrystal kitaplığının temel kullanımını ve bazı tuhaflıklarını vurgulayacaktır.

İlk olarak, kütüphaneyi çekelim ve bazı sabitleri tanımlayalım:

#Dahil etmek

const uint8_t lcdWidth = 16;

const uint8_t lcdYükseklik = 2;

const uzun minPriceInCents = 50;

const uzun maxPriceInCents = 1999;

const imzasız uzun minMillisBetweenPriceUpdates = 0.25 * 1000;

const unsigned long maxMillisBetweenPriceUpdates = 2 * 1000

Harika! Bunlar, fiyat aralığına ve ne sıklıkta yenileneceğine ilişkin parametrelerdir. Şimdi kütüphane tarafından sağlanan LCD sınıfının bir örneğini yapalım ve onu başlatalım. LCD'de hiçbir şey görmesek bile, işlerin yolunda gittiğine dair biraz güvence vermek için seri konsol üzerinden bir şeyler yazdıracağız. Bunu, Arduino önyüklemesinden sonra bir kez çalışan setup() işlevinde yapacağız. Yine de, program boyunca buna erişmek istediğimiz için lcd değişkenini setup() dışında bildirdiğimizi unutmayın.

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); geçersiz kurulum() { Serial.begin(9600); lcd.begin(lcdWidth, lcdHeight);

Serial.println("LCD başlatıldı");

lcd.print("Mevcut Fiyat:");

}

Ve et için, ondalık bir fiyat oluşturmak için yerleşik random() işlevini ve String() başlatıcısını kullanacağız. random() yalnızca tamsayılar üretir, bu nedenle bir kayan nokta değeri elde etmek için sonucunu 100.0'a böleceğiz. Bunu loop() içinde yapacağız, bu yüzden mümkün olduğunca sık olur, ancak daha önce tanımladığımız sabitler arasında rastgele bir gecikme ile.

boşluk döngüsü()

{ çift fiyat = rastgele(minPriceInCents, maxPriceInCents) / 100.0; String güzelPrice = "$" + String(fiyat, 2); lcd.setCursor(0, 1); lcd.print(güzelFiyat); gecikme(random(minMillisBetweenPriceUpdates, maxMillisBetweenPriceUpdates)); }

Unutulmaması gereken bir şey, lcd.setCursor() çağrısıdır. LiquidCrystal kitaplığı, bir baskıdan sonra metninizi otomatik olarak bir sonraki satıra ilerletmez, bu nedenle (görünmez) imleci ikinci satıra manuel olarak taşımamız gerekir (burada 1 – sıfır tabanlıdır). Ayrıca, tekrar "Güncel Fiyat:" yazdırmamız gerekmediğine dikkat edin; manuel olarak yapmadığınız sürece LCD silinmez, bu nedenle yalnızca dinamik metni güncellememiz gerekir.

Bir deneyin ve hızlı bir şekilde ilgili bir sorun göreceksiniz. Fiyat, örneğin "14.99$" ve ardından "7.22$" ise, ekranda "7.229$" gösterilir. Unutmayın, siz söylemedikçe ekran kendini temizlemez. Aynı satıra yazdırsanız bile, yazdırdığınız metinden sonraki tüm metinler kalacaktır. Bu sorunu çözmek için, olası çöplerin üzerine yazmak için dizgimizi boşluklarla doldurmamız gerekiyor. Bunu yapmanın en kolay yolu, nicePrice değişkenimize birkaç boşluk eklemektir:

String güzelPrice = "$" + String(fiyat, 2) + " ";

Bu değişiklikle birlikte, bir konsept kanıtımız var! Hadi biraz karıştıralım.

3. Adım: Kod: Özel Karakterler

Kod: Özel Karakterler
Kod: Özel Karakterler
Kod: Özel Karakterler
Kod: Özel Karakterler

Kullandığımız LCD modülünün en havalı özelliklerinden biri, 8 adede kadar özel karakter oluşturabilme özelliğidir. Bu, createChar() yöntemiyle yapılır. Bu yöntem, verilen karakter için LCD'nin hangi piksellerinin açılacağını tanımlayan 8x5 bitlik bir dizi alır. Bu dizileri oluşturmaya yardımcı olacak çevrimiçi birkaç araç vardır. Bunu kullandım.

Kendinizi özellikle tasarımcı hissetmiyorsanız, bir görüntüyü siyah beyaza dönüştürmek için Photoshop'ta Eşik filtresini kullanmanızı ve bunu karakterlere dönüştürmenizi öneririm. Maksimum 8 özel karakteriniz veya 64x5 pikseliniz olduğunu unutmayın.

Amazon ok logosu için bu karakterlerden 6'sını ve daha güzel bir ticari marka sembolü için kalan 2'yi kullanmayı seçtim. API'nin nasıl kullanılacağı için Arduino IDE'deki CustomCharacter örneğini takip edebilirsiniz. İşleri gruplandırmaya bu şekilde karar verdim:

// Ticari Marka karakterleri için verileri tanımlayın

const size_t ticari markaCharCount = 2;const uint8_t ticari markaKarakterler[trademarkCharCount][8] = { { { B00111, B00010, B00010, B00000, B00000, B00000, B00000, B00000 }, { B10100, B11100, B10100, B00000, B00000, B00000, B00000, B00000 } }; uint8_t firstTrademarkCharByte; // Bu karakteri yazdırmak için kullanılan bayt; initCustomChars() içinde atanır

Sonra karakterleri oluşturmak için setup() işlevinden böyle bir işlev kullandım:

geçersiz initCustomChars() {

firstTrademarkCharByte = 0; for(size_t i = 0; i < ticari markaCharCount; i++) { lcd.createChar(logoCharCount + i, (uint8_t *)trademarkChars); } }

Bundan sonra, özel karakterleri yazdırmak, uygun baytlarla lcd.write() kullanmak kadar basittir. Bir dizi bayt yazdırmak için bir yardımcı işlev yazdım ve printTrademark() işlevini bununla tanımladım:

void writeRawByteRange(uint8_t satırı, uint8_t sütunu, uint8_t startValue, size_t numBytes)

{ for(uint8_t i = 0; i < numBytes; i++) { lcd.setCursor(sütun + i, satır); // print() değil, write() kullanmanız gerekir - print tamsayıyı // değeri bir dizgeye çevirir ve yazdırır *bunu* lcd.write(startValue + i); } } void printTrademark(uint8_t satır, uint8_t sütun) { writeRawByteRange(satır, sütun, firstTrademarkCharByte, ticari markaCharCount); }

Amazon ok logosu da benzer şekilde işlendi. Tüm ayrıntılar için ekteki koda bakın.

Adım 4: Kod: Niceties

İşleri kendim için biraz daha kolaylaştırmak için koda birkaç incelik ekledim. Bu, şu gibi şeyleri içerir: belirli bir satırı, üzerine boşluklar yazarak temizlemek için bir işlev ve belirli bir dizeyi bir satırda ortalamak için bir işlev.

Ayrıca ekranın üç farklı aşamadan geçmesini istedim:

  1. Aşağıdaki logolu "Dinamik Fiyatlandırma"
  2. Aşağıdaki logolu "by Amazon"
  3. rastgele fiyat gösterimi

Bunun için belirli bir fazın ne kadar süredir aktif olduğunu takip eden ve belirli bir süre sonra bir sonrakine geçen basit bir sistem kurdum.

Tüm kanlı ayrıntılar için ekteki koda bakın!

Adım 5: Kutu

Kutu
Kutu

Şimdi, bomba imha ekibinin bizi aramaması için, her şey için güzel bir kutu yapalım. Bunu lazer kesim akrilik ile yapacağız. Basit kutular yapma sürecini hızlı bir şekilde başlatmak için birçok çevrimiçi araç var. Malzemenin kalınlığı için iç boyutları ve hesapları belirlemenize izin verdiği için makercase.com'u öneririm.

Arduino, LCD ve 9V pili ölçtük ve 4" x 2.5" x 2" boyutlarındaki bir kasaya sığdırabileceğimizi tahmin ettik. Bu yüzden, bunları 1/8" kalınlığında maker kutusuna taktık. akrilik. Ortaya çıkan PDF'yi, LCD için yuvarlak bir pencere ve alt kısımda bir görüntüleme etiketi için bir yuva eklemek üzere değiştirdik (daha fazlası için). Ortaya çıkan dosya PDF olarak eklenir.

Kutunun dört tarafını birleştirmek için akrilik yapıştırıcı (toksik metil etil keton türü) kullandık. Ardından LCD paneli ön tarafa sıcak tutkalla tutturduk. Her şeyi çalıştırıp yerleştirdikten sonra, kutunun son iki tarafını daha sonra kolayca ayırabilmemiz için sıcak tutkalla kapattık. Cihazın çok fazla yıpranmasını beklemediğimiz için Arduino'yu ve pili kasanın alt kısmında sabitlenmemiş halde bıraktık.

Potansiyel İyileştirmeler

  • Cihazı açmak veya kapatmak için herhangi bir şekilde inşa etmeyi ihmal ettik. Ha. Kutunun altında veya arkasında bir anahtar için yer iyi bir fikir olurdu.
  • Asılı etiket için alt kısımdaki yuva, daha iyi görünürlük için kutunun önüne daha yakın olabilirdi.

Adım 6: Karıştırma

Harmanlama
Harmanlama
Harmanlama
Harmanlama

Ve şimdi, zor kısım: onu bir mağazaya gizlice sokmak.

Whole Foods markalaşması

Whole Foods ve Amazon markalaşmasını tersine mühendislikle uygularken öğrendiğimiz bazı şeyler:

  • Gövde metni genellikle Scala Sans'tadır
  • Başlık metni, genel "sıcak ve samimi" yazı tiplerinden biri olan Brighton'a çok benzeyen bir şeydedir
  • Whole Foods Green, #223323'e yakın bir şey
  • Tekrar eden grafik öğelerinin örnekleri için yerel mağazanızı işaretleyin: Fistolu kenarlıkları, güneş ışığını ve basit vektör sanatını severler.

asılı etiket

Akrilik kutunun altında bir yarık kestik, böylece kutuya neler olduğunu açıklayan bir asılı etiket yapıştırabildik. Örnek için ekteki PDF'ye bakın. Bu, kesilip yuvaya yerleştirilmek üzere tasarlanmıştır; herhangi bir yapıştırıcı olmadan oturmalı ve tutmalıdır.

raflar

Kutuyu gerçekten bir rafa takmaya gelince, Whole Foods oldukça standart raf bileşenleri kullanır. Bir hırdavatçıda ölçümler yaptık ve uyumlu bir kanca bulduk. Kutuyu sıcak tutkalla kancaya yapıştırdık.

Böyle bir kanca bulamazsanız, mıknatısları deneyebilirsiniz - kutunun arkasına biraz yapıştırın ve rafa oturtun.

Dağıtmak

Yoldan geçenlerin dikkatini çekmek için kutuyu göz hizasına yerleştirin. Yakalanma! İyi şanslar!

Önerilen: