Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-23 14:59
„Amazon“kainos nuolat kinta. Jei paliksite prekes pirkinių krepšelyje ilgiau nei kelias valandas, greičiausiai būsite įspėti apie minutės svyravimus - 0,10 USD čia, 2,04 USD ten. Akivaizdu, kad „Amazon“ir jos prekybininkai naudoja tam tikrą algoritminę kainodarą, kad išstumtų paskutinį centą iš rinkos.
To ir galima tikėtis (vėlyvasis kapitalizmas ir visa tai). Bet kas atsitiks, jei viskas klostysis blogai? 2011 metais kilo karas tarp dviejų konkuruojančių algoritmų. Rezultatas: knyga apie naminių musių gyvavimo ciklą (baigta spausdinti, bet ne itin reta) šoktelėjo iki 23,6 mln.
Neseniai „Amazon“įsigyta „Whole Foods Market“privertė mus susimąstyti: kas trukdo dinamiškoms kainoms pereiti į fizinį mažmeninės prekybos pasaulį? O kas, jei kainos prekybos centre būtų tokios pat lanksčios kaip ir internete?
Taigi, šioje instrukcijoje mes sukursime dinamišką kainų ekraną su „Arduino“ir mažu skystųjų kristalų ekranu. Taip pat trumpai pakalbėsime apie jo užmaskavimą ir įdiegimą parduotuvėje.
(Ir jei jus domina, šis „Chrome“papildinys gali parodyti bet kurios „Amazon“prekės kainų istoriją per pastarąsias 120 dienų.)
Reikalinga Medžiaga
Štai ką mes panaudojome kurdami šį projektą:
- „Arduino Uno R3“
-
Standartinis 16x2 LCD ekranas. Mes naudojome šį iš „Adafruit“, tačiau kol jis suderinamas su „LiquidCrystal“biblioteka, turėtumėte būti geras. Norėdami prijungti prie „Arduino“, jums reikės kelių dalykų:
- kai kurie trumpieji kabeliai
- 220 omų rezistorius
- 10k omų potenciometras (skirtas ekrano kontrastui valdyti. Jei radote patinkantį kontrastą, galite pakeisti potenciometrą fiksuotu rezistoriumi.)
- Šiek tiek akrilo dėžutei. Mes panaudojome matinį juodą akrilą, pjaustytą lazeriu ir surinktą akrilo tirpikliu ir karštais klijais.
- Magnetai ir (arba) lentynų kablys, skirtas dėžutei pritvirtinti parduotuvėje. Jei einate kabliuko keliu, galite išmatuoti ir atspausdinti 3D, arba pabandyti surasti internete (galbūt „Alibaba“?), Arba … įsigyti jį kitu, labiau klastingu būdu. Būti saugiam.
Pirma, pradėkime ekraną!
1 žingsnis: prijunkite ekraną
Tikrai yra daug kaiščių to LCD gale. Laimei, programinės įrangos bibliotekos, kurią ketiname naudoti, dokumentacijoje yra geras jos prijungimo vadovas. Pasižiūrėk.
Apibendrinant, jūsų laidai turėtų baigtis taip:
-
Galia:
- LCD GND (1 kaištis) → „Arduino GND“
- LCD VDD (2 kaištis) → „Arduino“+5 V.
- LCD RW (5 kaištis) → „Arduino GND“
-
Duomenys:
- LCD RS (4 kaištis) → „Arduino“skaitmeninis kaištis 12
- LCD įjungimas (6 kontaktas) → „Arduino“skaitmeninis kaištis 11
- LCD D4 (11 kaištis) → 5 skaitmeninis kaištis
- LCD D5 (12 kaištis) → 4 skaitmeninis kaištis
- LCD D6 (13 kaištis) → 3 skaitmeninis kaištis
- LCD D7 (14 kaištis) → 2 skaitmeninis kaištis
-
Ekrano kontrastas:
- Prijunkite 10 k potenciometro kojas prie „Arduino“+5 V ir GND
- Potenciometro išėjimas → LCD VO (3 kaištis).
-
Foninis apšvietimas:
- LCD BL1 (15 kaištis) → 220 omų rezistorius → Arduino +5V
- LCD BL2 (16 kaištis) → „Arduino GND“
Kai viskas bus paruošta, įkelkite vieną iš pavyzdinių „LiquidCrystal“projektų į „Arduino IDE“ir pažiūrėkite, ar jis veikia! Nepamirškite dar kartą patikrinti mėginiuose esančio LCD inicijavimo kodo-PIN kodai turi būti teisingi, kitaip nieko nematysite.
Pavyzdžiui, „Blink“pavyzdyje yra šis kodas, kuris yra teisingas, atsižvelgiant į aukščiau pateiktą sąranką:
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Patarimai
- Sutaupykite litavimo ir investuokite į kai kuriuos gofruotus galus ir antgalių jungtis. Tokiuose projektuose, kuriuose mes sutrauksime elektroniką į mažą dėklą, sugebėjimas pagaminti trumpus trumpiklius yra neįtikėtinai naudingas.
- Panašiai šiluminio susitraukimo vamzdžiai yra tikrai naudingi, siekiant užtikrinti, kad niekas netrumpėtų, kai visa tai prispaudžiama prie savęs.
- Kadangi tiek daug dalykų patenka į GND ir +5 V, mes nusprendėme padaryti atvirą kabelį (žr. Aukščiau esančią nuotrauką), kad jis būtų kuo kompaktiškesnis. Jei erdvė būtų mažiau problema, duonos lenta ar protoshield būtų buvęs lengvesnis pasirinkimas.
- Kai kurie potenciometrai yra keistos formos. Paprastai kairysis laidas naudojamas kaip žemė, dešinysis laidas kaip galia, o vidurinis - kaip išėjimas. Jei jūsų priekyje yra du laidai, o gale - vienas, tai galinis yra išėjimas.
Gotchas
- Jei LCD ekrane nieko nematote, pabandykite pasukti potenciometrą į vieną pusę, tada į kitą. Esant mažiausiam kontrastui, LCD turinys yra visiškai nematomas.
- Jei LCD ekrane matote tikrai keistą kvailystę arba tik vieną eilutę, o ne dvi, įsitikinkite, kad visi ryšiai yra saugūs. Turėjome netinkamą ryšį su žeme ir tai sukėlė keisčiausias ekrano problemas.
- LCD inicijavimo kodas (tai, ką paleidžia lcd.init () sąrankos () funkcijoje) yra svarbus ir užtrunka. Jei ekrane kažkas negerai ir įtariate, kad laidas yra sugedęs, nesitikėkite, kad dėl staigių judesių staiga jis pradės veikti. Jums gali tekti iš naujo nustatyti „Arduino“, kad inicijavimo kodas galėtų tinkamai veikti.
- Įsitikinkite, kad jūsų laidai yra gana trumpi, bet ne per trumpi. Nieko nėra blogiau, kai reikia nusistovėti, nes esate keli centimetrai nuo antraštės.
Puiku! Dabar parodykime keletą išgalvotų dalykų.
2 žingsnis: kodas: pagrindai
Pirma, pirmiausia: ekrano viršuje rodoma „Dabartinė kaina:“, o antroje - atsitiktinė kaina. Kaskart atnaujinkime kainą. Tai gana paprasta, tačiau išryškins pagrindinį „LiquidCrystal“bibliotekos naudojimą ir kai kurias jos ypatybes.
Pirma, paimkime biblioteką ir apibrėžkime keletą konstantų:
#įtraukti
const uint8_t lcdWidth = 16;
const uint8_t lcdHeight = 2;
const ilgas minPriceInCents = 50;
const ilgas maxPriceInCents = 1999;
const unsigned ilgi minMillisBetweenPriceUpdates = 0,25 * 1000;
const unsigned long maxMillisBetweenPriceUpdates = 2 * 1000
Puiku! Tai yra kainų diapazono parametrai ir tai, kaip dažnai jis bus atnaujinamas. Dabar padarykime bibliotekos pateiktą LCD klasės egzempliorių ir inicijuokime. Mes ką nors išspausdinsime per serijinę konsolę, kad būtume tikri, jog viskas veikia, net jei LCD ekrane nieko nematome. Tai padarysime nustatymo () funkcijoje, kuri vieną kartą paleidžiama po „Arduino“įkrovos. Tačiau atminkite, kad deklaruojame kintamąjį lcd ne sąrankoje (), nes norime prieigą prie jo visoje programoje.
„LiquidCrystal lcd“(12, 11, 5, 4, 3, 2); void setup () {Serial.begin (9600); lcd.begin (lcdWidth, lcdHeight);
Serial.println („LCD inicijuotas“);
lcd.print ("Dabartinė kaina:");
}
O mėsai mes naudosime integruotą atsitiktinę () funkciją ir „String“() inicializatorių dešimtainei kainai apskaičiuoti. random () generuoja tik sveikus skaičius, todėl jo rezultatą padalinsime iš 100,0, kad gautume slankiojo kablelio reikšmę. Mes tai padarysime cikle (), todėl tai atsitinka kuo dažniau, tačiau atsitiktinai vėluojant tarp anksčiau apibrėžtų konstantų.
tuštumos kilpa ()
{dviguba kaina = atsitiktinė (minPriceInCents, maxPriceInCents) / 100,0; String prettyPrice = "$" + eilutė (kaina, 2); lcd.setCursor (0, 1); lcd.print (ganaPrice); uždelsimas (atsitiktinis (minMillisBetweenPriceUpdates, maxMillisBetweenPriceUpdates)); }
Reikia atkreipti dėmesį į skambutį į lcd.setCursor (). „LiquidCrystal“biblioteka po spausdinimo automatiškai neperkelia jūsų teksto į kitą eilutę, todėl turime rankiniu būdu perkelti (nematomą) žymeklį į antrąją eilutę (čia 1-ji pagrįsta nuliu). Taip pat atkreipkite dėmesį, kad mums nereikėjo dar kartą spausdinti „Dabartinė kaina:“; LCD neišvalomas, nebent tai darote rankiniu būdu, todėl turime tik atnaujinti dinaminį tekstą.
Paleiskite ir greitai pamatysite susijusią problemą. Jei kaina buvo, tarkime, „14,99 USD“, o vėliau - „7,22 USD“, ekrane bus rodoma „7,229 USD“. Atminkite, kad ekranas pats neišsivalo, nebent jums tai pasakysite. Net jei spausdinsite toje pačioje eilutėje, bet koks tekstas, esantis už spausdinto, liks. Norėdami išspręsti šią problemą, turime užpildyti eilutę tarpais, kad perrašytume visas galimas šiukšles. Lengviausias būdas tai padaryti yra tiesiog priderinti kelias vietas prie mūsų „prettyPrice“kintamojo:
Eilutė prettyPrice = "$" + eilutė (kaina, 2) + "";
Po šio pakeitimo mes turime koncepcijos įrodymą! Truputį paanalizuokime.
3 žingsnis: kodas: pasirinktiniai simboliai
Viena iš nuostabiausių mūsų naudojamo LCD modulio savybių yra galimybė sukurti iki 8 pasirinktinių simbolių. Tai atliekama naudojant metodą createChar (). Šis metodas reikalauja 8x5 bitų masyvo, kuris apibūdina, kuriuos LCD pikselius įjungti tam tikram simboliui. Internete yra keletas įrankių, padedančių sukurti šiuos masyvus. Aš naudojau šį.
Jei nesijaučiate ypač dizainerių, rekomenduoju naudoti „Photoshop“slenksčio filtrą, kad vaizdas taptų nespalvotas, ir paversti jį simboliais. Atminkite, kad turite ne daugiau kaip 8 pasirinktinius simbolius arba 64 x 5 taškus.
Aš pasirinkau naudoti 6 iš šių simbolių „Amazon“rodyklės logotipui, o likusius 2 - gražesniam prekės ženklo simboliui. Norėdami naudoti API, galite sekti „CustomCharacter“pavyzdį „Arduino IDE“. Taip nusprendžiau sugrupuoti dalykus:
// Apibrėžkite prekės ženklo simbolių duomenis
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; // Baitas, naudojamas šiam simboliui spausdinti; priskirtas initCustomChars ()
Tada simboliams sukurti naudoju tokią funkciją, iškviestą iš setup ():
void initCustomChars () {
firstTrademarkCharByte = 0; for (size_t i = 0; i <trademarkCharCount; i ++) {lcd.createChar (logoCharCount+i, (uint8_t *) trademarkChars ); }}
Po to tinkintų simbolių spausdinimas yra toks pat paprastas, kaip naudojant lcd.write () su atitinkamais baitais. Parašiau pagalbinę funkciją, kad atspausdintų baitų diapazoną, ir pagal ją apibrėžiau printTrademark ():
void writeRawByteRange (eilutė uint8_t, uint8_t col, uint8_t startValue, size_t numBytes)
{for (uint8_t i = 0; i <numBytes; i ++) {lcd.setCursor (col+i, line); // reikia naudoti write (), o ne print () - spausdinimas sveiką skaičių // reikšmę pavers eilute ir atspausdins *, kad * lcd.write (startValue + i); }} void printTrademark (uint8_t line, uint8_t col) {writeRawByteRange (line, col, firstTrademarkCharByte, trademarkCharCount); }
Panašiai buvo elgiamasi su „Amazon“rodyklės logotipu. Išsamią informaciją rasite pridėtame kode.
4 žingsnis: kodas: Niceties
Kad man būtų šiek tiek lengviau, prie kodo pridėjau keletą malonumų. Tai apima tokius dalykus kaip: tam tikros eilutės išvalymo funkcija perrašant ją tarpais ir tam tikros eilutės centravimo funkcija eilutėje.
Taip pat norėjau, kad ekranas pereitų tris skirtingus etapus:
- „Dinaminė kainodara“su žemiau esančiu logotipu
- „Amazon“su žemiau esančiu logotipu
- atsitiktinis kainų rodymas
Tam aš sukūriau paprastą sistemą, kuri stebi, kiek laiko tam tikra fazė buvo aktyvi, ir po tam tikro laikotarpio pereina prie kito.
Žiūrėkite pridedamą kodą, kad gautumėte visą žiaurią informaciją!
5 žingsnis: dėžutė
Taigi, kad nekviestume bombų būrio, padarykime gražią dėžę viskam. Mes tai darysime lazeriu pjaustytu akrilu. Yra daug internetinių įrankių, leidžiančių pradėti paprastų dėžių kūrimo procesą. Aš rekomenduoju makercase.com, nes tai leidžia nurodyti vidinius matmenis ir atsižvelgti į medžiagos storį.
Mes išmatavome „Arduino“, skystųjų kristalų ir 9 V bateriją ir apskaičiavome, kad galėsime ją įdėti į 4 x 2,5 colio x 2 colių dėklą. Taigi, prijungėme juos prie didžiųjų raidžių, kurių storis 1/8 colio akrilas. Mes pakeitėme gautą PDF failą, kad pridėtume suapvalintą langą LCD ekranui, o apačioje - lizdą ekrano žymai (daugiau apie tai vėliau). Gautas failas pridedamas kaip PDF.
Keturoms dėžutės pusėms surinkti naudojome akrilo klijus (toksiškas metilo etilketono rūšis). Tada karštu klijais pritvirtinome LCD skydelį prie priekio. Kai viskas veikė ir sumontuota, paskutines dvi dėžutės puses užklijavome karštais klijais, kad vėliau galėtume lengvai jas išardyti. Kadangi nesitikėjome, kad prietaisas susidėvės, „Arduino“ir akumuliatorių palikome neapsaugotą dėklo apačioje.
Galimi patobulinimai
- Mes nepaisėme jokių būdų, kaip įjungti arba išjungti įrenginį. Cha. Gera idėja būtų buvusi vieta jungikliui dėžutės apačioje arba gale.
- Pakabinimo žymos apačioje esantis lizdas galėjo būti arčiau dėžutės priekio, kad būtų geriau matomas.
6 žingsnis: susimaišymas
O dabar, sunkioji dalis: įsiskverbti į parduotuvę.
„Whole Foods“prekės ženklas
Kai kuriuos dalykus sužinojome sukurdami „Whole Foods“ir „Amazon“prekės ženklą:
- Kūno tekstas paprastai yra „Scala Sans“
- Antraštės tekstas yra kažkas panašaus į „Brighton“- vienas iš tų bendrųjų „šiltų ir draugiškų“šriftų
- „Whole Foods Green“yra kažkas panašaus į #223323
- Išsirinkite vietinę parduotuvę, kur rasite pasikartojančių grafinių elementų pavyzdžių: jiems patinka šukuotos kraštinės, saulės spinduliai ir paprastas vektorinis menas.
Pakabinama etiketė
Mes išpjovėme plyšį akrilo dėklo apačioje, kad prie dėžutės galėtume pritvirtinti pakabinamą žymą, paaiškinančią, kas vyksta. Pavyzdį rasite pridėtame PDF. Jis skirtas iškirpti ir įkišti į angą; jis turėtų tilpti ir laikyti be jokių klijų.
Lentynos
Kalbant apie dėžutės tvirtinimą prie lentynos, „Whole Foods“naudoja gana standartinius lentynų komponentus. Atlikome matavimus ir techninės įrangos parduotuvėje radome suderinamą kabliuką. Prie kablio dėžutę pritvirtinome karštais klijais.
Jei nerandate tokio kabliuko, galite išbandyti magnetus - priklijuokite kai kuriuos prie dėžutės galo ir tiesiog užfiksuokite ant lentynos.
Diegti
Padėkite dėžutę akių lygyje, kad patrauktumėte praeivių dėmesį. Nesusigaudyk! Didžiausios sėkmės!
Rekomenduojamas:
Kaip sukurti netikrą automobilio signalizaciją naudojant 555 laikmatį: 5 žingsniai
Kaip sukurti padirbtą automobilio signalizaciją naudojant 555 laikmatį: Šiame projekte parodyta, kaip naudojant 5 sekundžių delsimo lemputę su 5 sekundžių vėlavimu padaryti mirksintį šviesos diodą. Tai gali būti padirbtas automobilio aliarmas, nes jis imituoja automobilio signalizacijos sistemą su ryškiai raudonai mirksinčiu šviesos diodu. Sunkumo lygis Pati grandinė nėra sudėtinga
3D spausdinta mirksinti LED vardo žyma - gaukite savo vardą šviesoje!: 4 žingsniai (su nuotraukomis)
3D atspausdinta mirksinčio LED vardo žyma-gaukite savo vardą šviesose !: Tai puikus mažas projektas, kurio metu naudojant daugiaspalvius LED žibintus sukuriate labai prašmatnų ir akį traukiantį vardo žymą. Vaizdo įrašo instrukcijos: Šiame projekte jūs reikia: 3D spausdintos dalys https://www.thingiverse.com/thing:2687490 Mažos
Sukurkite fiktyvią/netikrą kamerą: 3 žingsniai
Sukurkite netikrą/netikrą fotoaparatą: ar kada nors jautėte, kad kažkas „apgaubia“? Jūsų namas. Galbūt kažkas purtė jūsų priekines duris ir kai jūs jų paklausėte, ar galėtumėte jiems padėti, jie jūsų paklausė, ar čia ------- namas. Jūs pasakytumėte „ne“ir jie išeitų
Sukurkite netikrą kaminą OS X 10.4: 3 veiksmais
Sukurkite netikrą kaminą „OS X 10.4“: ar „Leopard“yra jūsų „Macintosh“? Nei aš Todėl aš padariau tai pamokoma vien todėl, kad noriu, kad visi mano šūdai būtų lengvai pasiekiami! Vienintelis dalykas, kurio jums reikia, yra jūsų „Mac“ir privaloma aparatinė įranga (pelė, klaviatūra, ekranas …)
„Arduino“lazerinė žyma - „Duino“žyma: 11 žingsnių (su nuotraukomis)
„Arduino“lazerinė žyma - „Duino“žyma: „Duino“žymeklis - Bendra įžanga „Duino“žyma yra lazerinių žymių sistema, pagrįsta arduino. Pagaliau lazerinių žymų sistema, kurią galima modifikuoti ir nulaužti, kol turėsite tobulą lazerinių žymių sistemą biuro ginklams, miško karams ir priemiesčiams