
Tartalomjegyzék:
2025 Szerző: John Day | [email protected]. Utoljára módosítva: 2025-01-23 14:48



Az Amazon árai folyamatosan változnak. Ha néhány óránál tovább hagyja a termékeket a bevásárlókosárban, akkor valószínűleg értesítést kap a perc ingadozásáról - 0,10 USD itt, 2,04 USD ott. Az Amazon és kereskedői nyilvánvalóan valamilyen algoritmikus árazást alkalmaznak, hogy kiszorítsák az utolsó fillért a piacról.
Ez minden, ami elvárható (késői kapitalizmus és minden más). De mi történik, ha a dolgok elromlanak? 2011 -ben árháború tört ki két egymással versengő algoritmus között. Az eredmény: egy könyv a házi legyek életciklusáról (elfogyott, de nem különösebben ritka) az egekbe szökött 23,6 millió dollár áron.
Az Amazon legutóbbi Whole Foods Market felvásárlása elgondolkodtatott bennünket: mi akadályozza meg a dinamikus árazást abban, hogy belépjen a kiskereskedelem fizikai világába? Mi lenne, ha egy szupermarketben az árak ugyanolyan rugalmasak lennének, mint az online?
Tehát ebben az utasításban dinamikus árkijelzőt építünk Arduino -val és egy kis LCD -vel. Röviden beszélünk az álcázásról és az üzletben történő telepítésről is.
(És ha érdekli, ez a Chrome -bővítmény megmutathatja az Amazon bármelyik árának előzményeit az elmúlt 120 napban.)
Szükséges anyag
Ezt használtuk a projekt felépítéséhez:
- Egy Arduino Uno R3
-
Standard 16x2 LCD kijelző. Ezt az Adafruitból használtuk, de amíg kompatibilis a LiquidCrystal könyvtárral, jónak kell lennie. Szüksége lesz néhány dologra az Arduino -hoz való csatlakoztatáshoz:
- néhány áthidaló kábel
- 220 ohmos ellenállás
- 10 k ohmos potenciométer (Ez a kijelző kontrasztjának szabályozására szolgál. Ha tetszik a kontraszt, akkor a potenciométert lecserélheti egy fix ellenállásra.)
- Némi akril a dobozhoz. Matt öntött, fekete fekete akrilt használtunk, lézervágással, akril oldószeres ragasztóval és forró ragasztóval.
- Mágnesek és/vagy polchorog a doboz rögzítéséhez az üzletben. Ha a horog útvonalat választja, mérhet és 3D-nyomtathat egyet, vagy megpróbálhat keresni az interneten (talán Alibaba?), Vagy… más módon, aljasabb módon szerezheti meg. Biztonságosan.
Először is indítsuk el a kijelzőt!
Lépés: Csatlakoztassa a kijelzőt


Biztosan sok csap van az LCD hátoldalán. Szerencsére a használni kívánt szoftverkönyvtár dokumentációjában jó útmutató található a bekötéshez. Nézd meg.
Összefoglalva, a kábelezésnek így kell végződnie:
-
Erő:
- LCD GND (1. tű) → Arduino GND
- LCD VDD (2. tű) → Arduino +5V
- LCD RW (5. tű) → Arduino GND
-
Adatok:
- LCD RS (4. tű) → Arduino digitális tüske 12
- LCD engedélyezés (6. tű) → Arduino digitális tüske 11
- LCD D4 (11. tű) → 5. digitális tű
- LCD D5 (12. érintkező) → 4. digitális tüske
- LCD D6 (13. tű) → 3. digitális tű
- LCD D7 (14. érintkező) → 2. digitális tű
-
Kijelző kontraszt:
- Csatlakoztasson egy 10k potenciométer lábát az Arduino +5V és GND -hez
- Potenciométer kimenet → LCD VO (3. tű).
-
Háttérvilágítás:
- LCD BL1 (15. láb) → 220 ohmos ellenállás → Arduino +5V
- LCD BL2 (16. láb) → Arduino GND
Ha minden kész, töltse fel az egyik példa LiquidCrystal projektet az Arduino IDE -be, és nézze meg, hogy működik -e! Ne felejtse el kétszer ellenőrizni az LCD inicializáló kódját a mintákban-a PIN-számoknak helyeseknek kell lenniük, különben nem fog látni semmit.
Például a "Blink" példa ezt a kódot tartalmazza, amely a fenti beállítások alapján helyes:
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Tippek
- Spóroljon meg néhány forrasztást, és fektessen be néhány préselt végbe és fejléc csatlakozóba. Az ilyen projekteknél, ahol egy kis tokba fogjuk zsúfolni az elektronikát, hihetetlenül hasznos, ha rövid áthidaló kábeleket készítünk.
- Hasonlóképpen, a hőre zsugorodó cső nagyon hasznos annak biztosítására, hogy semmi ne záródjon ki, ha minden önmagához van nyomva.
- Mivel olyan sok dolog megy a GND és a +5V-ra, úgy döntöttünk, hogy egy franken-kábelt készítünk (lásd a fenti képet), hogy a lehető legkisebb legyen. Ha a hely kevésbé lenne probléma, a kenyérlap vagy a protoshield könnyebb megoldás lett volna.
- Néhány potenciométer furcsa alakú. Általában a bal oldali vezetéket használják földelésként, a jobb oldali vezetéket áramként, a középső pedig kimenetként. Ha a tied két elöl és egy hátul van, akkor a kimenet a hátoldalon található.
Gotchas
- Ha nem lát semmit az LCD -n, próbálja elfordítani a potenciométert teljesen az egyik, majd a másik irányba. A legalacsonyabb kontraszt mellett az LCD tartalma teljesen láthatatlan.
- Ha nagyon furcsa hülyeségeket lát az LCD -n, vagy csak egy sort a kettő helyett, győződjön meg arról, hogy minden kapcsolat biztonságos. Hibás kapcsolatunk volt a földdel, és ez okozta a legfurcsább megjelenítési problémákat.
- Az LCD inicializáló kódja (amit az lcd.init () futtat a setup () függvényben) fontos és eltart egy ideig. Ha valami nem stimmel a kijelzővel, és gyanítja, hogy a vezeték hibás, ne várja el, hogy a rázkódó dolgok hirtelen működni fognak. Előfordulhat, hogy vissza kell állítania az Arduino -t, hogy az inicializáló kódnak lehetősége legyen a megfelelő futtatásra.
- Győződjön meg arról, hogy a vezetékek meglehetősen rövidek, de nem túl rövidek. Nincs is rosszabb, mint feloldani, mert néhány centiméterre van a fejléctől.
Nagy! Most mutassunk néhány divatos dolgot.
2. lépés: Kód: Alapok


Először is: legyen a kijelzőn a "Current Price:" felirat a felső sorban, és egy véletlenszerű ár valamilyen tartományban a második sorban. Időnként frissítsük az árat. Ez elég egyszerű, de kiemeli a LiquidCrystal könyvtár alapvető használatát és néhány furcsaságát.
Először húzzuk be a könyvtárat, és határozzunk meg néhány állandót:
#befoglalni
const uint8_t lcdWidth = 16;
const uint8_t lcdHeight = 2;
const hosszú minPriceInCents = 50;
const hosszú maxPriceInCents = 1999;
const unsigned hosszú minMillisBetweenPriceUpdates = 0,25 * 1000;
const unsigned long maxMillisBetweenPriceUpdates = 2 * 1000
Nagy! Ezek az árkategória paraméterei és a frissítés gyakorisága. Most készítsünk példányt a könyvtár által biztosított LCD osztályból, és inicializáljuk. Nyomtatunk valamit a soros konzolon keresztül, csak hogy meggyőződjünk arról, hogy a dolgok működnek, még akkor is, ha nem látunk semmit az LCD -n. Ezt megtesszük a setup () függvényben, amely egyszer fut az Arduino indítása után. Ne feledje azonban, hogy az lcd változót a setup () -on kívül deklaráljuk, mert hozzáférést akarunk ehhez a program során.
LiquidCrystal LCD (12, 11, 5, 4, 3, 2); void setup () {Serial.begin (9600); lcd.begin (lcdWidth, lcdHeight);
Serial.println ("LCD inicializálva");
lcd.print ("Jelenlegi ár:");
}
A hús esetében pedig a beépített random () függvényt és a String () inicializálót használjuk tizedes ár létrehozásához. A random () csak egész számokat generál, ezért az eredményét elosztjuk 100,0-val, hogy lebegőpontos értéket kapjunk. Ezt a ciklusban () hajtjuk végre, tehát a lehető leggyakrabban történik, de véletlenszerű késleltetéssel a korábban meghatározott állandók között.
üres hurok ()
{dupla ár = véletlenszerű (minPriceInCents, maxPriceInCents) / 100.0; String prettyPrice = "$" + String (ár, 2); lcd.setCursor (0, 1); lcd.print (prettyPrice); delay (random (minMillisBetweenPriceUpdates, maxMillisBetweenPriceUpdates)); }
Egy dolog, amit meg kell jegyezni, az lcd.setCursor () hívása. A LiquidCrystal könyvtár nem nyomtatja automatikusan a szöveget a következő sorba a nyomtatás után, ezért manuálisan kell áthelyeznünk a (láthatatlan) kurzort a második sorba (itt 1-ez nulla alapú). Azt is vegye figyelembe, hogy nem kellett újra kinyomtatni az "Aktuális ár:" -t; az LCD nem törlődik, hacsak nem kézzel, így csak a dinamikus szöveget kell frissítenünk.
Futtassa, és gyorsan látni fogja a kapcsolódó problémát. Ha az ára mondjuk „14,99 USD”, majd „7,22 USD” volt, akkor a kijelzőn „7,229 USD” jelenik meg. Ne feledje, hogy a kijelző nem törli magát, hacsak nem mondja meg. Még akkor is, ha ugyanazon a soron nyomtat, a kinyomtatott szövegen túl minden szöveg megmarad. A probléma megoldásához szóközzel kell kitöltenünk a karakterláncunkat, hogy felülírjuk az esetleges szemetet. Ennek legegyszerűbb módja, ha csak néhány mezőt ragad a prettyPrice változónkra:
String prettyPrice = "$" + String (ár, 2) + "";
Ezzel a változtatással megvan a koncepció bizonyítéka! Cicázzunk egy kicsit.
3. lépés: Kód: Egyéni karakterek


Az általunk használt LCD modul egyik legmenőbb tulajdonsága, hogy akár 8 egyedi karaktert is létrehozhat. Ez a createChar () metódussal történik. Ez a módszer 8x5 bites tömböt igényel, amely leírja, hogy az LCD melyik képpontját kapcsolja be az adott karakterhez. Van néhány online eszköz ezen tömbök létrehozásához. Ezt használtam.
Ha nem érzi magát kifejezetten dizájnernek, azt javaslom, hogy használja a Photoshop Threshold szűrőjét, hogy fekete-fehérré alakítsa a képet, és alakítsa át karakterekké. Ne feledje, hogy legfeljebb 8 egyéni karaktere van, vagy 64x5 képpont.
Úgy döntöttem, hogy 6 ilyen karaktert használok az Amazon nyíl logójához, a maradék kettőt pedig egy szebb védjegy szimbólumhoz. Az API használatához követheti az Arduino IDE CustomCharacter példáját. Így döntöttem úgy, hogy csoportosítom a dolgokat:
// Adja meg a védjegy karakterek adatait
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 B00000}}; uint8_t firstTrademarkCharByte; // A karakter nyomtatásához használt bájt; hozzárendelve az initCustomChars ()
Ezután egy ilyen függvényt használtam, amelyet a setup () -ból hívtak meg a karakterek létrehozásához:
void initCustomChars () {
firstTrademarkCharByte = 0; for (size_t i = 0; i <trademarkCharCount; i ++) {lcd.createChar (logoCharCount+i, (uint8_t *) trademarkChars ); }}
Ezt követően az egyéni karakterek nyomtatása olyan egyszerű, mint az lcd.write () használata a megfelelő bájtokkal. Írtam egy segédfunkciót, hogy kinyomtasson egy bájttartományt, és definiáltam a printTrademark () kifejezést:
void writeRawByteRange (uint8_t sor, uint8_t col, uint8_t startValue, size_t numBytes)
{for (uint8_t i = 0; i <numBytes; i ++) {lcd.setCursor (oszlop+i, sor); // az írást () kell használni, nem a nyomtatást () - a nyomtatás az egész // értéket karakterlánccá alakítja, és nyomtat *, hogy * lcd.write (startValue + i); }} void printTrademark (uint8_t sor, uint8_t oszlop) {writeRawByteRange (sor, oszlop, elsőTrademarkCharByte, védjegyCharCount); }
Az Amazon nyíl logóját hasonló módon kezelték. A részletekért lásd a mellékelt kódot.
4. lépés: Kód: Szépségek
Hogy kicsit megkönnyítsem a dolgomat, hozzáadtam néhány finomságot a kódhoz. Ide tartoznak például a következők: függvény egy adott sor törléséhez szóközökkel történő felülírással, és egy adott karakterlánc középre helyezése egy vonalon.
Azt is szerettem volna, ha a kijelző három különböző fázison halad át:
- "Dinamikus árképzés" az alábbi logóval
- "by Amazon" az alábbi logóval
- véletlenszerű árkijelző
Ehhez egy egyszerű rendszert építettem, amely nyomon követi, hogy egy adott fázis mennyi ideig volt aktív, és egy bizonyos idő elteltével továbblép a következőre.
Lásd a mellékelt kódot a véres minden részletért!
5. lépés: A doboz

Most, hogy ne hívjuk fel a bombaosztályt, készítsünk egy szép dobozt az egészhez. Ezt lézerrel vágott akrillel fogjuk megtenni. Rengeteg online eszköz áll rendelkezésre az egyszerű dobozok készítésének megkezdéséhez. Ajánlom a makercase.com webhelyet, mivel lehetővé teszi a belső méretek megadását és az anyag vastagságának figyelembevételét.
Megmértük az Arduino, az LCD és a 9 V -os akkumulátort, és úgy becsültük, hogy 4 "x 2,5" x 2 "méretű tokba tudjuk illeszteni. Tehát ezeket 1/8" vastagságú makercase -be dugtuk. akril. Módosítottuk a kapott PDF -t, hogy kerekített ablakot adjunk hozzá az LCD -hez, és alul egy nyílást a kijelzőcímke számára (erről bővebben később). A kapott fájlt PDF -ként csatoljuk.
A doboz négy oldalának összeállításához akril ragasztót (mérgező metil -etil -keton típusú) használtunk. Ezután forró ragasztóval rögzítettük az LCD panelt az elejére. Miután minden működött és illeszkedett, forró ragasztóval lezártuk a doboz utolsó két oldalát, hogy később könnyen szétszedhessük. Mivel nem számítottunk rá, hogy a készülék sok elhasználódást fog okozni, az Arduino-t és az akkumulátort nem tartottuk a tok alján.
Lehetséges fejlesztések
- Elhanyagoltuk az építést bármilyen módon, hogy be- vagy kikapcsoljuk a készüléket. Ha. Jó ötlet lett volna a doboz alján vagy hátulján elhelyezni egy kapcsolót.
- A lógó címke alján lévő nyílás közelebb lehetett a doboz elejéhez, a jobb láthatóság érdekében.
6. lépés: Keverés


És most a kemény rész: besurran egy boltba.
Whole Foods márkajelzés
Néhány dolog, amit megtanultunk a Whole Foods és az Amazon márkanevek fordított tervezésében:
- A törzsszöveg általában Scala Sans nyelvű
- A fejléc szövege valami olyasmi, ami nagyon hasonlít Brightonra - az egyik ilyen "meleg és barátságos" betűtípus
- A Whole Foods Green valami közel áll a #223323 -hoz
- Keresse fel helyi boltját, ahol példákat találhat grafikus elemekre, amelyek ismétlődnek: szeretik a fésűs szegélyeket, a napfényt és az egyszerű vektorgrafikát.
A függő címke
Vágtunk egy rést az akril tok alján, hogy lógó címkét rögzítsünk a dobozhoz, elmagyarázva, mi történik. Példa a csatolt PDF dokumentumban. Ezt úgy tervezték, hogy kivágja és behelyezze a nyílásba; ragasztó nélkül kell illeszkednie és tartania.
Polcok
Ami a dobozt a polchoz való rögzítéshez illeti, a Whole Foods elég szabványos polc alkatrészeket használ. Méréseket végeztünk, és egy hardverboltban találtunk egy kompatibilis horgot. A dobozt forró ragasztóval rögzítettük a horogra.
Ha nem talál ilyen kampót, próbáljon ki mágnest - ragasszon egyet a doboz hátuljára, és pattintsa egy polcra.
Telepítés
Helyezze a dobozt szemmagasságba, hogy felkeltse a járókelők figyelmét. Ne ragadj le! Sok szerencsét!
Ajánlott:
A hamis kapacitás tesztje 18650: 7 lépés (képekkel)

A hamis 18650 kapacitásvizsgálata: Ebben az utasításban keressük meg a hamis 10400 mAh teljesítményű bank kapacitását. Korábban ezt az erőforrást használtam saját energiabank létrehozásához, mert 2 dollárért vettem. Videó megtekintése ehhez a projekthez - És ne felejtsd el feliratkozni a csatornámra, szóval
Otthoni dekoráció hamis ipari nagynyomású izzóval: 6 lépés (képekkel)

HÁZI DEKORÁCIÓ HAMIS IPARI NAGYNYOMÁS IGÉNYVEL: Láttam a hulladékudvarban néhány gyönyörű formájú lámpa izzót. Ezekből a törött lámpákból ötleteltem, hogyan készítsek otthoni dekoratív lámpát, és összegyűjtöttem néhány izzót. Ma hajlandó vagyok megosztani, hogyan sikerült ezeket az izzókat otthoni dekorációvá alakítanom
Dinamikus LED -es világításvezérlő az Art számára: 16 lépés (képekkel)

Dinamikus LED világításvezérlő a művészethez: Bevezetés: A világítás a vizuális művészet fontos aspektusa. És ha a világítás idővel változhat, az a művészet jelentős dimenziójává válhat. Ez a projekt azzal kezdődött, hogy részt vett egy fénybemutatón, és megtapasztalta, hogyan lehet a világítást teljesen
Dinamikus asztali lámpa: 10 lépés (képekkel)

Dinamikus asztali lámpa: Sziasztok Srácok A távirányítóval kiválaszthatja a fény színét, és megváltoztathatja hangulatát, valamint a fénymintát
Dinamikus LED világító árnyékdoboz és keret az Art számára: 16 lépés (képekkel)

Dinamikus LED -es világítás árnyékdoboz és keret a művészethez :: A világítás a vizuális művészet fontos eleme. És ha a világítás idővel változhat, az a művészet jelentős dimenziójává válhat. Ez a projekt azzal kezdődött, hogy részt vett egy fénybemutatón, és megtapasztalta, hogyan változtathatja meg teljesen a világítás a világítást