Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-23 15:14
Amazon narxlari doimiy ravishda o'zgarib turadi. Agar siz savatni bir necha soatdan ko'proq vaqtga qoldirib qo'ysangiz, sizga bir daqiqalik tebranishlar to'g'risida xabar beriladi - bu erda $ 0.10, u erda $ 2.04. Shubhasiz, Amazon va uning savdogarlari oxirgi tiyinni bozordan siqib chiqarish uchun qandaydir algoritmik narxlash usullaridan foydalanmoqdalar.
Buni kutish kerak edi (kech kapitalizm va boshqalar). Ammo vaziyat yomonlashsa nima bo'ladi? 2011 yilda ikkita raqobatbardosh algoritm o'rtasida narxlar urushi boshlandi. Natijada: uy chivinlarining hayot aylanishi haqidagi kitob (chop etilmagan, lekin unchalik kam bo'lmagan) 23,6 million dollarga ko'tarildi.
Amazon yaqinda "Butun oziq -ovqat bozori" ni sotib olgani bizni hayron qoldirdi: dinamik narxlanish chakana savdo dunyosiga qadam qo'yishiga nima to'sqinlik qilmoqda? Agar supermarketdagi narxlar Internetdagi kabi moslashuvchan bo'lsa -chi?
Shunday qilib, ushbu yo'riqnomada biz Arduino va kichik LCD displeyli dinamik narx displeyini quramiz. Shuningdek, biz uni do'konda niqoblash va o'rnatish haqida qisqacha gaplashamiz.
(Va agar sizni qiziqtirsa, bu Chrome plagini sizga Amazon -dagi so'nggi 120 kunlik har qanday mahsulotning narx tarixini ko'rsatishi mumkin.)
Kerakli material
Mana, biz bu loyihani qurishda nimalarni ishlatganmiz:
- Arduino Uno R3
-
16x2 standart LCD displey. Biz buni Adafruit -dan ishlatganmiz, lekin u LiquidCrystal kutubxonasiga mos kelsa, siz yaxshi bo'lishingiz kerak. Arduino -ga ulanish uchun sizga bir nechta narsa kerak bo'ladi:
- ba'zi o'tish kabellari
- 220 ohmli qarshilik
- 10k ohmli potansiyometr (bu displey kontrastini boshqarish uchun. Agar sizga yoqqan kontrastni topsangiz, potansiyometrni qattiq rezistor bilan almashtirishingiz mumkin.)
- Qutiga bir oz akril. Biz quyuq matli qora akril, lazer bilan kesilgan va akril erituvchi-yopishtiruvchi va issiq elim bilan yig'ilgan ishlatilganmiz.
- Qutini do'konga ulash uchun magnit va/yoki tokchali ilgak. Agar siz ilgak yo'liga o'tsangiz, siz o'lchovni 3D formatida bosib chiqarishingiz yoki Internetda topishga urinib ko'rishingiz mumkin (Alibaba, ehtimol?), Yoki uni boshqa yomonroq tarzda sotib olishingiz mumkin. Xavfsiz bo'ling.
Birinchidan, displeyni ishga tushiramiz!
1 -qadam: Displeyni simga ulang
LCD displeyning orqa tomonida juda ko'p pinlar bor. Yaxshiyamki, biz foydalanmoqchi bo'lgan dasturiy kutubxona uchun hujjatlar uni ulash bo'yicha yaxshi qo'llanma. Tekshirib ko'r.
Xulosa qilib aytganda, sizning simlaringiz shunday tugashi kerak:
-
Quvvat:
- LCD GND (1 -pin) → Arduino GND
- LCD VDD (2 -pin) → Arduino +5V
- LCD RW (pin 5) → Arduino GND
-
Ma'lumotlar:
- LCD RS (pin 4) → Arduino raqamli pin 12
- LCD yoqish (pin 6) → Arduino raqamli pin 11
- LCD D4 (pin 11) → raqamli pin 5
- LCD D5 (pin 12) → raqamli pin 4
- LCD D6 (pin 13) → raqamli pin 3
- LCD D7 (pin 14) → raqamli pin 2
-
Displey kontrasti:
- 10k potensiometrning oyoqlarini Arduino +5V va GND ga ulang
- Potentsiometr chiqishi → LCD VO (pin 3).
-
Orqa yorug'lik:
- LCD BL1 (pin 15) → 220 ohmli qarshilik → Arduino +5V
- LCD BL2 (pin 16) → Arduino GND
Hammasi tugagach, Arduino IDE -dagi LiquidCrystal loyihalaridan birini yuklang va u ishlayotganini ko'ring! Namunalarda LCD boshlanish kodini ikki marta tekshirishni unutmang-pin raqamlari to'g'ri bo'lishi kerak, aks holda siz hech narsani ko'rmaysiz.
Masalan, "Blink" misolida ushbu kod mavjud, bu yuqoridagi sozlamalarni hisobga olgan holda to'g'ri:
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Maslahatlar
- Lehimlashdan saqlaning va qisqich uchlari va sarlavhali ulagichlarga mablag 'sarflang. Elektronni kichkina korpusga joylashtiradigan bunday loyihalarda, qisqa o'tish kabellarini yasash juda foydali.
- Xuddi shunday, issiqlik o'tkazmaydigan quvurlar hech narsa o'z -o'zidan siqilib qolmasligiga ishonch hosil qilish uchun juda foydali.
- GND va +5V uchun juda ko'p narsa borligi sababli, biz iloji boricha ixcham bo'lish uchun ochiq kabelni (yuqoridagi rasmga qarang) yasashni tanladik. Agar bo'sh joy kamroq bo'lsa, non paneli yoki protoshield osonroq bo'lar edi.
- Ba'zi potentsiometrlar g'alati shaklga ega. Umuman olganda, chap qo'rg'oshin erga, o'ng tomonda - kuchga, o'rtada - chiqish sifatida ishlatiladi. Agar sizning oldingizda va orqasida ikkita sim bo'lsa, orqa tomonda - chiqish.
Gotchas
- Agar siz LCD displeyingizda hech narsa ko'rmasangiz, potentsiometrni bir tomonga, keyin boshqasiga burab ko'ring. Eng past kontrastda LCD displeyi umuman ko'rinmas.
- Agar siz LCD displeyda g'ayritabiiy yoki ikkita chiziq o'rniga bitta chiziqni ko'rsangiz, barcha ulanishlar xavfsiz ekanligiga ishonch hosil qiling. Bizda erga ulanish noto'g'ri edi va u ekranning eng g'alati muammolarini keltirib chiqardi.
- LCDni ishga tushirish kodi (lcd.init () funktsiyasida ishga tushadigan narsa) muhim va biroz vaqt talab etiladi. Agar sizning displeyingizda biror narsa noto'g'ri bo'lsa va siz simning noto'g'ri ekanligidan shubhalansangiz, shovqinli narsalar to'satdan ishlay boshlaydi deb o'ylamang. Arduino -ni asl holatiga qaytarish kerak bo'lishi mumkin, shunda ishga tushirish kodi to'g'ri ishlashi mumkin.
- Sizning simlaringiz juda qisqa ekanligiga ishonch hosil qiling, lekin juda qisqa emas. Qayta sotishdan ko'ra yomonroq narsa yo'q, chunki siz sarlavhadan bir necha santimetr uzoqdasiz.
Ajoyib! Keling, bu erda ba'zi ajoyib narsalarni ko'rsataylik.
2 -qadam: Kod: asoslari
Birinchidan, birinchi navbatda: yuqori satrda "Joriy narx:" displeyi ko'rsatiladi, ikkinchisida esa tasodifiy narx. Tez -tez, narxni yangilab turaylik. Bu juda oddiy, lekin LiquidCrystal kutubxonasining asosiy ishlatilishini va uning ba'zi qiziq tomonlarini ta'kidlaydi.
Birinchidan, keling, kutubxonaga kiraylik va ba'zi doimiylarni aniqlaymiz:
#qo'shing
const uint8_t lcdWidth = 16;
const uint8_t lcdHeight = 2;
const long minPriceInCents = 50;
const long maxPriceInCents = 1999;
const unsigned long minMillisBetweenPriceUpdates = 0,25 * 1000;
const unsigned long maxMillisBetweenPriceUpdates = 2 * 1000
Ajoyib! Bu narx oralig'ining parametrlari va u qanchalik tez -tez yangilanadi. Keling, kutubxona tomonidan taqdim etilgan LCD sinfiga misol keltiramiz va uni ishga tushiramiz. Biz ketma -ket konsolda biror narsani chop etamiz, shunchaki ishlayotganiga ishonch hosil qilish uchun, agar biz LCD displeyda hech narsa ko'rmasak ham. Biz buni Arduino etiklaridan keyin bir marta ishlaydigan setup () funktsiyasida bajaramiz. E'tibor bering, biz lcd o'zgaruvchisini setup () dan tashqarida e'lon qilamiz, chunki biz unga dastur davomida kirishni xohlaymiz.
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); void setup () {Serial.begin (9600); lcd.begin (lcdWidth, lcdHeight);
Serial.println ("LCD boshlangan");
lcd.print ("Joriy narx:");
}
Go'sht uchun biz tasodifiy () funktsiyasidan va String () boshlang'ichidan o'nlik narxni yaratish uchun foydalanamiz. random () faqat butun sonlarni hosil qiladi, shuning uchun biz uning natijasini 100.0 ga bo'linib, suzuvchi nuqta qiymatini olamiz. Biz buni loop () da bajaramiz, shuning uchun iloji boricha tez -tez sodir bo'ladi, lekin biz ilgari aniqlagan doimiylar orasidagi tasodifiy kechikish bilan.
bo'sh halqa ()
{er -xotin narx = tasodifiy (minPriceInCents, maxPriceInCents) / 100.0; String prettyPrice = "$" + String (narx, 2); lcd.setCursor (0, 1); lcd.print (prettyPrice); kechikish (tasodifiy (minMillisBetweenPriceUpdates, maxMillisBetweenPriceUpdates)); }
Shuni ta'kidlash kerakki, lcd.setCursor () ga qo'ng'iroq. LiquidCrystal kutubxonasi matni bosilgandan so'ng matnni avtomatik ravishda keyingi qatorga o'tkazmaydi, shuning uchun biz (ko'rinmas) kursorni qo'lda ikkinchi qatorga o'tkazishimiz kerak (bu erda 1-bu nolga asoslangan). Shuni ham unutmangki, biz "Joriy narx:" ni yana chop etishimiz shart emas edi; Agar siz buni qo'lda qilmasangiz, LCD o'chirilmaydi, shuning uchun biz faqat dinamik matnni yangilashimiz kerak.
Yugurib bering, shunda siz tezda muammoni ko'rasiz. Agar narx, aytaylik, "$ 14.99", keyin "$ 7.22" bo'lsa, displeyda "$ 7.229" ko'rsatiladi. Esda tutingki, displey o'zi aytmaydi. Agar siz bir xil satrda chop etsangiz ham, siz chop etgan matndan keyingi matn qoladi. Ushbu muammoni hal qilish uchun biz potentsial axlatni qayta yozish uchun qatorni bo'sh joy bilan to'ldirishimiz kerak. Buni amalga oshirishning eng oson usuli - bu go'zalPrice o'zgaruvchisiga bir nechta bo'sh joyni kiritish:
String prettyPrice = "$" + String (narx, 2) + "";
O'zgarish bilan biz kontseptsiyani tasdiqlaymiz! Keling, biroz chalkashtiraylik.
3 -qadam: Kod: maxsus belgilar
Biz foydalanadigan LCD modulining ajoyib xususiyatlaridan biri bu 8 ta maxsus belgini yaratish qobiliyatidir. Bu createChar () usuli orqali amalga oshiriladi. Bu usul 8x5 bitli massivni oladi, bu belgi uchun LCD displeyining qaysi piksellarini yoqilishini tasvirlaydi. Internetda ushbu massivlarni yaratishga yordam beradigan bir nechta vositalar mavjud. Men buni ishlatganman.
Agar siz o'zingizni dizayner sifatida yaxshi his qilmasangiz, men rasmni oq-qora rangga aylantirish uchun Photoshop-da chegara filtridan foydalanishni va uni belgilarga o'zgartirishni maslahat beraman. Esda tutingki, sizda maksimal 8 ta maxsus belgi yoki 64x5 piksel bo'lishi kerak.
Men Amazon o'qining logotipi uchun 6 ta belgidan foydalanishni tanladim, qolgan 2 tasi yaxshi savdo belgisi belgisi uchun. API -dan qanday foydalanish kerakligi haqida Arduino IDE -dagi CustomCharacter misoliga amal qilishingiz mumkin. Men shunday narsalarni guruhlashga qaror qildim:
// Savdo belgisi belgilariga tegishli ma'lumotlarni aniqlang
const size_t savdo belgisiCharCount = 2; const uint8_t savdo belgisiChars [savdo belgisiCharCount] [8] = {{B00111, B00010, B00010, B00000, B00000, B00000, B00000, B00000}, {B10100, B11100, B10100, B00000, B00000, B00000, B00000, B00000 B00000}}; uint8_t firstTrademarkCharByte; // Bu belgini chop etish uchun ishlatiladigan bayt; initCustomChars () da tayinlangan
Keyin men belgilarni yaratish uchun setup () deb nomlangan shunday funktsiyadan foydalandim:
void initCustomChars () {
firstTrademarkCharByte = 0; for (size_t i = 0; i <trademarkCharCount; i ++) {lcd.createChar (logoCharCount+i, (uint8_t *) savdo belgisiChars ); }}
Shundan so'ng, maxsus belgilarni bosib chiqarish lcd.write () ni tegishli baytlar bilan ishlatish kabi oddiy. Men bir qator baytlarni chop etish uchun yordamchi funktsiyani yozdim va printTrademark () ni shu nuqtai nazardan aniqladim:
Void writeRawByteRange (uint8_t qator, uint8_t col, uint8_t startValue, size_t numBytes)
{for (uint8_t i = 0; i <numBytes; i ++) {lcd.setCursor (col+i, satr); // print () dan emas, write () dan foydalanish kerak - print tamsayı // qiymatini satrga aylantiradi va * lcd.write (startValue + i) ni bosib chiqaradi; }} void printTrademark (uint8_t qator, uint8_t col) {writeRawByteRange (satr, ustun, birinchiTrademarkCharByte, savdo belgisiCharCount); }
Amazon o'qining logotipi xuddi shunday tarzda ishlangan. To'liq ma'lumot uchun biriktirilgan kodni ko'ring.
4 -qadam: Kod: Nitetsiya
Ishlarni biroz osonlashtirish uchun men kodga bir nechta chiroyli narsalarni qo'shdim. Bunga quyidagilar kiradi: ma'lum bir qatorni bo'sh joylar bilan qayta yozish orqali tozalash funktsiyasi va satrda berilgan satrni markazlashtirish funktsiyasi.
Men, shuningdek, displey uch xil bosqichda aylanishini xohlardim:
- Quyidagi logotip bilan "Dinamik narxlar"
- Quyida logotipli "Amazon tomonidan"
- tasodifiy narx ko'rsatkichi
Buning uchun men ma'lum bir fazaning qancha vaqt faolligini kuzatib boradigan va ma'lum vaqtdan so'ng keyingi bosqichga o'tadigan oddiy tizimni qurdim.
Barcha dahshatli tafsilotlar uchun biriktirilgan kodni ko'ring!
5 -qadam: quti
Endi biz bomba guruhini chaqirmaymiz, keling, hamma narsa uchun chiroyli quti tayyorlaylik. Biz buni akril akril bilan qilamiz. Oddiy qutilar tayyorlash jarayonini tezda boshlash uchun ko'plab onlayn vositalar mavjud. Men makercase.com saytini tavsiya qilaman, chunki u materialning qalinligi uchun ichki o'lchovlar va hisoblarni belgilash imkonini beradi.
Biz Arduino, LCD va 9V batareyalarini o'lchadik va uni 4 dyuymli x 2,5 dyuymli korpusga sig'dira olamiz deb taxmin qildik. Shunday qilib, biz ularni qalinligi 1/8 dyuymli katta harf bilan uladik. akril. Biz PDF -ni LCD uchun yumaloq oynani va displey tagining ostidagi uyani qo'shish uchun o'zgartirdik (bu haqda keyinroq). Olingan fayl PDF formatida biriktiriladi.
Biz qutining to'rt tomonini yig'ish uchun akril yopishtiruvchi (toksik metil etil keton) ishlatardik. Keyin biz LCD panelni old tomoniga issiq elim bilan biriktirdik. Bizda hamma narsa ishlay boshlagach, biz qutining oxirgi ikki tomonini issiq elim bilan yopishtirdik, shunda biz uni osonlikcha ajratib olamiz. Qurilmaning juda ko'p eskirishini kutmaganimiz uchun, biz Arduino va batareyani korpusning pastki qismida himoyasiz qoldirdik.
Potentsial yaxshilanishlar
- Biz qurilmani yoqish yoki o'chirish uchun biron bir tarzda qurishni e'tiborsiz qoldirdik. Ha. Qutining pastki yoki orqa qismiga o'tish uchun joy ajratish yaxshi bo'lar edi.
- Osiladigan tagning pastki qismidagi uyasi ko'rinishni yaxshilash uchun qutining old qismiga yaqinroq bo'lishi mumkin edi.
6 -qadam: aralashtirish
Va endi, qiyin qismi: uni yashirincha do'konga olib kirish.
Whole Foods brendi
Whole Foods va Amazon brendining teskari muhandisligi bo'yicha biz bilib olgan ba'zi narsalar:
- Asosiy matn odatda Scala Sans -da
- Sarlavha matni Brightonga juda o'xshash narsada - umumiy "samimiy va do'stona" shriftlardan biri
- Whole Foods Green - bu 223323 ga yaqin narsa
- O'zingizning mahalliy do'koningizni takrorlanadigan grafik elementlarga misollar bilan tanishtiring: ular qirrali chegaralar, quyosh nurlari va oddiy vektor san'atini yaxshi ko'radilar.
Osiladigan yorliq
Biz akril qutining pastki qismidagi yoriqni kesib tashladik, shunda biz qutiga osilgan tegni yopishtirib, nima bo'layotganini tushuntirdik. Misol uchun biriktirilgan PDF -ga qarang. Bu kesish va uyaga kiritish uchun mo'ljallangan; u hech qanday yopishtirgichsiz joylashishi va ushlab turishi kerak.
Raflar
Qutini tokchaga yopishtirishga kelsak, Whole Foods tokchaning standart elementlaridan foydalanadi. Biz o'lchovlar qildik va apparat do'konida mos keladigan kancani topdik. Biz qutini ilgakka issiq elim bilan yopishtirdik.
Agar siz bunday ilgakni topa olmasangiz, magnitlarni sinab ko'rishingiz mumkin - ba'zilarini qutining orqa qismiga yopishtirib, tokchaga yopishtiring.
Tarqatish
O'tganlarning e'tiborini jalb qilish uchun qutini ko'z darajasida joylashtiring. Qo'lga tushmang! Omad tilaymiz!
Tavsiya:
Soxta sanoat yuqori bosimli lampochka bilan uy bezatish: 6 qadam (rasmlar bilan)
Soxta sanoatning yuqori bosimli lampochkasi bilan uyni bezatish: men hurda hovlida chiroyli shaklidagi lampochkalarning tashlanganini ko'rdim. Men bu singan lampalardan uy dekorativ chirog'ini yasash g'oyalarini topdim va bir nechta lampochkalarni to'pladim. Bugun men bu lampochkalarni uy dekoriga qanday aylantirganimni aytib berishga tayyorman
Alexa pardalari boshqaruv tizimi - 3D bosma va past narx: 19 qadam (rasmlar bilan)
Alexa pardalari boshqaruv tizimi - 3D bosma va arzon narx: Salom, men anchadan buyon uyimizni iloji boricha avtomatlashtirishga harakat qilaman. Qish Buyuk Britaniyaga bu erga kelganda, men kechqurun barcha pardalarni yopib qo'yishni, keyin esa ertalab hammasini ochishni boshdan kechirdim. Bu men yugurishni anglatadi
3D -bosma Flahing LED -yorliq yorlig'i - ismingizni nurda oling!: 4 qadam (rasmlar bilan)
3D-bosma Flahing LED-yorliq yorlig'i-O'z ismingizni nurda oling!: Bu juda kichik loyiha bo'lib, unda siz ko'p rangli LED yoritgichlar yordamida juda yorqin va ko'zni qamashtiradigan ism yorlig'ini yaratasiz. kerak: 3D bosilgan qismlar https://www.thingiverse.com/thing:2687490 kichik
Soxta/soxta kamera yarating: 3 qadam
Qo'rqinchli/soxta kamera yarating: Sizda kimdir " korpus " sizning uyingiz. Balki kimdir sizning old eshigingizni silkitayotgandir va siz ularga yordam bera olasizmi, deb so'raganingizda, ular sizdan ------- ning uyimi, deb so'rashgandir. Yo'q deysiz, ular adashib ketishadi.
Arduino lazer yorlig'i - Duino yorlig'i: 11 qadam (rasmlar bilan)
Arduino Laser Tag - Duino Tag: Duino tagger - Umumiy kirish Duino tag - bu arduino atrofida joylashgan lazerli teglar tizimi. Nihoyat, ofis qurollari, o'rmonli urushlar va shahar atrofi uchun mukammal lazerli teglar tizimi bo'lmaguncha, modifikatsiyalanishi va buzilishi mumkin bo'lgan lazer yorlig'i tizimi