![Фалшива динамична цена: 6 стъпки (със снимки) Фалшива динамична цена: 6 стъпки (със снимки)](https://i.howwhatproduce.com/images/002/image-4928-63-j.webp)
Съдържание:
2025 Автор: John Day | [email protected]. Последно модифициран: 2025-01-23 14:36
![Image Image](https://i.howwhatproduce.com/images/002/image-4928-65-j.webp)
![](https://i.ytimg.com/vi/z8l4fS0Mlns/hqdefault.jpg)
![Свържете дисплея Свържете дисплея](https://i.howwhatproduce.com/images/002/image-4928-66-j.webp)
Цените на Amazon се променят постоянно. Ако оставите артикули в кошницата си за пазаруване за повече от няколко часа, вероятно ще бъдете предупредени за минутни колебания - $ 0,10 тук, $ 2,04 там. Amazon и неговите търговци очевидно използват някаква форма на алгоритмично ценообразуване, за да изтласкат последния лев от пазара.
Това е всичко, което може да се очаква (късният капитализъм и всичко това). Но какво ще стане, ако нещата се объркат? През 2011 г. избухна ценова война между два конкуриращи се алгоритма. Резултатът: книга за жизнения цикъл на домашните мухи (отпечатана, но не особено рядка) скочи до 23,6 милиона долара.
Неотдавнашното придобиване на Amazon на Whole Foods Market ни накара да се замислим: какво спира динамичното ценообразуване от навлизане във физическия свят на търговията на дребно? Ами ако цените в супермаркет бяха също толкова гъвкави, колкото тези онлайн?
Така че в този Instructable ще изградим динамичен ценови дисплей с Arduino и малък LCD. Ще поговорим накратко и за прикриването и инсталирането му в магазин.
(И ако се интересувате, тази приставка за Chrome може да ви покаже историята на ценообразуването на всеки артикул в Amazon през последните 120 дни.)
Необходим материал
Ето какво използвахме за изграждането на този проект:
- Arduino Uno R3
-
Стандартен 16x2 LCD дисплей. Използвахме този от Adafruit, но стига да е съвместим с библиотеката LiquidCrystal, трябва да сте добри. Ще ви трябват няколко неща, за да го свържете към Arduino:
- някои джъмперни кабели
- резистор 220 ома
- 10k ohm потенциометър (Това е за контролиране на контраста на дисплея. Ако намерите контраст, който харесвате, можете да замените потенциометъра с фиксиран резистор.)
- Малко акрил за кутията. Използвахме отлит матов черен акрил, лазерно изрязан и сглобен с акрилно лепило за разтворители и горещо лепило.
- Магнити и/или кука за стелажи за закрепване на кутията в магазина. Ако тръгнете по маршрута на куката, можете да измерите и да го отпечатате 3d, или да опитате да го намерите онлайн (Alibaba, може би?), Или … да го придобиете по някакъв друг, по-лош начин. Пази се.
Първо, нека стартираме дисплея!
Стъпка 1: Свържете дисплея
![Свържете дисплея Свържете дисплея](https://i.howwhatproduce.com/images/002/image-4928-67-j.webp)
![Свържете дисплея Свържете дисплея](https://i.howwhatproduce.com/images/002/image-4928-68-j.webp)
Със сигурност има много щифтове на гърба на този LCD. За щастие, документацията за софтуерната библиотека, която ще използваме, има добро ръководство за свързването й. Виж това.
В обобщение, вашето окабеляване трябва да завърши така:
-
Мощност:
- LCD GND (щифт 1) → Arduino GND
- LCD VDD (пин 2) → Arduino +5V
- LCD RW (щифт 5) → Arduino GND
-
Данни с данни:
- LCD RS (пин 4) → Arduino цифров щифт 12
- LCD Enable (pin 6) → Arduino digital pin 11
- LCD D4 (пин 11) → цифров щифт 5
- LCD D5 (щифт 12) → цифров извод 4
- LCD D6 (щифт 13) → цифров извод 3
- LCD D7 (щифт 14) → цифров щифт 2
-
Контраст на дисплея:
- Свържете краката на 10k потенциометър към +5V и GND на Arduino
- Изход на потенциометъра → LCD VO (щифт 3).
-
Подсветка:
- LCD BL1 (щифт 15) → 220 омов резистор → Arduino +5V
- LCD BL2 (щифт 16) → Arduino GND
Когато всичко е настроено, заредете един от примерните проекти на LiquidCrystal в Arduino IDE и вижте дали работи! Не забравяйте да проверите двукратно кода за инициализация на LCD дисплея в пробите-номерата на пиновете трябва да са правилни, в противен случай няма да видите нищо.
Например, примерът "Blink" има този код, който е правилен предвид горната настройка:
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Съвети
- Спестете си малко запояване и инвестирайте в някои кримпващи краища и конектори за заглавки. При проекти като този, където ще натъпчем електрониката в малък калъф, възможността да се правят къси джъмперни кабели е изключително полезна.
- По същия начин тръбите за радиатор са наистина полезни, за да се гарантира, че нищо не се къса, когато всичко е притиснато към себе си.
- Тъй като има толкова много неща към GND и +5V, решихме да направим откъснат кабел (вижте снимката по-горе), за да бъде възможно най-компактен. Ако пространството беше по -малък проблем, макет или протощит би бил по -лесен вариант.
- Някои потенциометри имат странна форма. По принцип лявият проводник се използва като маса, най -десният проводник като захранване, а средният като изход. Ако вашият има два проводника отпред и един отзад, този отзад е изход.
Разбрах
- Ако не виждате нищо на вашия LCD, опитайте да завъртите потенциометъра докрай в едната посока, а след това в другата. При най -ниския си контраст съдържанието на LCD дисплея е напълно невидимо.
- Ако видите наистина странни глупости на LCD дисплея или само един ред вместо два, уверете се, че всичките ви връзки са защитени. Имахме дефектна връзка със земята и това причиняваше най -странните проблеми с дисплея.
- Кодът за инициализация на LCD (какво се изпълнява от lcd.init () във функцията setup ()) е важен и отнема известно време. Ако нещо не е наред с дисплея ви и подозирате, че кабелът е дефектен, не очаквайте внезапно да накарате нещата да работят. Може да се наложи да нулирате Arduino, така че кодът за инициализация да има възможност да работи правилно.
- Уверете се, че проводниците ви са доста къси, но не прекалено къси. Няма нищо по -лошо от това, че трябва да препаявате, защото сте на няколко сантиметра от заглавката.
Страхотен! Сега нека го направим да покаже някои фантастични неща.
Стъпка 2: Код: Основи
![Код: Основи Код: Основи](https://i.howwhatproduce.com/images/002/image-4928-69-j.webp)
![Код: Основи Код: Основи](https://i.howwhatproduce.com/images/002/image-4928-70-j.webp)
Първо първо: нека на дисплея да се покаже „Текуща цена:“в горния ред и произволна цена в някакъв диапазон на втория. От време на време нека да опресняваме цената. Това е доста просто, но ще подчертае основното използване на библиотеката LiquidCrystal и някои от нейните странности.
Първо, нека вкараме библиотеката и дефинираме някои константи:
#включва
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
Страхотен! Това са параметрите за ценовия диапазон и колко често ще се опреснява. Сега нека направим екземпляр от LCD класа, предоставен от библиотеката, и го инициализираме. Ще отпечатаме нещо през серийната конзола, само за да сме сигурни, че нещата работят, дори и да не виждаме нищо на LCD. Ще направим това във функцията setup (), която се изпълнява веднъж след стартирането на Arduino. Имайте предвид обаче, че декларираме lcd променливата извън setup (), защото искаме достъп до нея в цялата програма.
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); void setup () {Serial.begin (9600); lcd.begin (lcdWidth, lcdHeight);
Serial.println ("LCD инициализиран");
lcd.print ("Текуща цена:");
}
А за месото ще използваме вградената функция random () и инициализатора String () за конструиране на десетична цена. random () генерира само цели числа, така че ще разделим резултата му на 100.0, за да получим стойност с плаваща запетая. Ще направим това в loop (), така че се случва възможно най -често, но със случайно закъснение между константите, които дефинирахме по -рано.
void loop ()
{двойна цена = произволна (minPriceInCents, maxPriceInCents) / 100.0; String prettyPrice = "$" + String (цена, 2); lcd.setCursor (0, 1); lcd.print (prettyPrice); забавяне (произволно (minMillisBetweenPriceUpdates, maxMillisBetweenPriceUpdates)); }
Едно нещо, което трябва да се отбележи, е извикването на lcd.setCursor (). Библиотеката LiquidCrystal не премества автоматично текста ви на следващия ред след отпечатване, така че трябва ръчно да преместим (невидимия) курсор на втория ред (тук 1-той се базира на нула). Имайте предвид също, че не трябваше да отпечатваме отново „Текуща цена:“; LCD не се изчиства, освен ако не го направите ръчно, така че трябва само да актуализираме динамичния текст.
Пробвайте и бързо ще видите свързан проблем. Ако цената беше, да речем, „$ 14.99“и след това „$ 7.22“, на дисплея ще се покаже „$ 7.229“. Не забравяйте, че дисплеят не се изчиства, освен ако не го кажете. Дори ако отпечатвате на един и същ ред, всеки текст, който е отпечатан от вас, ще остане. За да разрешим този проблем, трябва да напълним нашия низ с интервали, за да презапишем всеки потенциален боклук. Най -лесният начин да направите това е просто да включите няколко интервала в нашата променлива prettyPrice:
String prettyPrice = "$" + String (цена, 2) + "";
С тази промяна на място имаме доказателство за концепция! Нека да го разберем малко.
Стъпка 3: Код: Персонализирани знаци
![Код: Персонализирани знаци Код: Персонализирани знаци](https://i.howwhatproduce.com/images/002/image-4928-71-j.webp)
![Код: Персонализирани знаци Код: Персонализирани знаци](https://i.howwhatproduce.com/images/002/image-4928-72-j.webp)
Една от най -яките характеристики на LCD модула, който използваме, е възможността да създавате до 8 персонализирани знака. Това става чрез метода createChar (). Този метод отнема масив от 8x5 бита, който описва кои пиксели на LCD дисплея да се включат за дадения знак. Има няколко онлайн инструмента, които да помогнат за генерирането на тези масиви. Използвах този.
Ако не се чувствате особено дизайнерски, препоръчвам да използвате филтъра Threshold във Photoshop, за да превърнете изображение в черно-бяло и да го преобразувате в знаци. Не забравяйте, че имате максимум 8 персонализирани знака или 64x5 пиксела.
Избрах да използвам 6 от тези знаци за логото на стрелката на Amazon, а останалите 2 за по -хубав символ на търговска марка. Можете да следвате примера CustomCharacter в IDE на Arduino за това как да използвате API. Ето как реших да групирам нещата:
// Определете данните за знаците на запазената марка
const size_t trademarkCharCount = 2; const uint8_t trademarkChars [trademarkCharCount] [8] = {{B00111, B00010, B00010, B00000, B00000, B00000, B00000, B00000}, {B10100, B11100, B10100, B00000, B00000, B00 B00000}}; uint8_t първоTrademarkCharByte; // Байтът, използван за отпечатване на този знак; присвоено в initCustomChars ()
След това използвах функция като тази, извикана от setup (), за да създам символите:
void initCustomChars () {
firstTrademarkCharByte = 0; for (size_t i = 0; i <trademarkCharCount; i ++) {lcd.createChar (logoCharCount+i, (uint8_t *) trademarkChars ); }}
След това отпечатването на персонализираните символи е толкова просто, колкото използването на lcd.write () със съответните байтове. Написах помощна функция за отпечатване на диапазон от байтове и определих printTrademark () по отношение на нея:
void writeRawByteRange (uint8_t ред, uint8_t col, uint8_t startValue, size_t numBytes)
{for (uint8_t i = 0; i <numBytes; i ++) {lcd.setCursor (col+i, ред); // трябва да използва write (), а не print () - print ще превърне целочислената // стойност в низ и ще отпечата * that * lcd.write (startValue + i); }} void printTrademark (uint8_t ред, uint8_t col) {writeRawByteRange (ред, col, firstTrademarkCharByte, trademarkCharCount); }
Логото на стрелката на Amazon беше третирано по подобен начин. Вижте приложения код за пълни подробности.
Стъпка 4: Код: Удобства
За да направя нещата малко по -лесни за себе си, добавих няколко нюанса към кода. Това включва неща като: функция за изчистване на определен ред чрез презаписване с интервали и функция за центриране на даден низ на ред.
Исках също така дисплеят да преминава през три отделни фази:
- „Динамично ценообразуване“с логото по -долу
- „от Amazon“с логото по -долу
- показване на произволна цена
За това създадох проста система, която следи колко дълго е била активна дадена фаза и след определен период преминава към следващата.
Вижте прикачения код за всички кървави подробности!
Стъпка 5: Кутията
![Кутията Кутията](https://i.howwhatproduce.com/images/002/image-4928-73-j.webp)
Сега, за да не ни извикат отряда за бомби, нека направим хубава кутия за цялата работа. Ще направим това с лазерно изрязан акрил. Има много онлайн инструменти за стартиране на процеса на създаване на прости кутии. Препоръчвам makercase.com, тъй като ви позволява да посочите вътрешните размери и отчита дебелината на материала.
Измерихме Arduino, LCD и 9V батерия и изчислихме, че ще можем да я поставим в калъф с размери 4 "x 2,5" x 2 ". И така, включихме ги в корпус с дебелина 1/8" акрил. Променихме получения PDF, за да добавим заоблен прозорец за LCD и слот в долната част за таг на дисплея (повече за това по -късно). Полученият файл е прикачен като PDF.
Използвахме акрилно лепило (вид токсичен метил етил кетон), за да сглобим четири страни на кутията. След това прикрепихме LCD панела отпред с горещо лепило. След като всичко беше наред и работеше, запечатахме последните две страни на кутията с горещо лепило, за да можем лесно да я разглобим по -късно. Тъй като не очаквахме устройството да получи много износване, оставихме Arduino и батерията незащитени в долната част на кутията.
Потенциални подобрения
- Ние пренебрегнахме изграждането по какъвто и да е начин, за да включим или изключим устройството. Ха. Място за превключване в долната или задната част на кутията би било добра идея.
- Прорезът в долната част на висящия етикет можеше да бъде по -близо до предната част на кутията, за подобрена видимост.
Стъпка 6: Смесване
![Смесване In Смесване In](https://i.howwhatproduce.com/images/002/image-4928-74-j.webp)
![Смесване In Смесване In](https://i.howwhatproduce.com/images/002/image-4928-75-j.webp)
И сега, трудната част: промъкнете го в магазин.
Брандиране на цели храни
Някои неща, които научихме при обратния инженеринг на Whole Foods и брандирането на Amazon:
- Основният текст обикновено е в Scala Sans
- Заглавният текст е в нещо, което много прилича на Брайтън - един от тези общи „топли и приятелски“шрифтове
- Whole Foods Green е нещо близко до #223323
- Заложете в местния магазин за примери за графични елементи, които се повтарят: те обичат изкривените граници, слънчевите изблици и простото векторно изкуство.
Висящият етикет
Изрязахме прорез в долната част на акрилния корпус, за да можем да прикрепим висящ етикет към кутията, обяснявайки какво се случва. Вижте прикачения PDF за пример. Той е проектиран да бъде изрязан и поставен в слота; трябва да се побере и задържи без никакво лепило.
Стелажи
Що се отнася до действителното закрепване на кутията към рафт, Whole Foods използва доста стандартни компоненти за стелажи. Направихме измервания и намерихме съвместима кука в железария. Прикрепихме кутията към куката с горещо лепило.
Ако не можете да намерите такава кука, можете да опитате магнити - залепете някои към гърба на кутията и просто я щракнете върху рафт.
Разгърнете
Поставете кутията на нивото на очите, за да привлечете вниманието на минувачите. Не се хващайте! Най-добър късмет!
Препоръчано:
ДОМАШЕН ДЕКОРАЦИЯ С ФАЛШИВА ИНДУСТРИАЛНА КОРМОЛКА ЗА ВИСОКО НАЛЯГАНЕ: 6 стъпки (със снимки)
![ДОМАШЕН ДЕКОРАЦИЯ С ФАЛШИВА ИНДУСТРИАЛНА КОРМОЛКА ЗА ВИСОКО НАЛЯГАНЕ: 6 стъпки (със снимки) ДОМАШЕН ДЕКОРАЦИЯ С ФАЛШИВА ИНДУСТРИАЛНА КОРМОЛКА ЗА ВИСОКО НАЛЯГАНЕ: 6 стъпки (със снимки)](https://i.howwhatproduce.com/images/002/image-4362-10-j.webp)
ДОМАШНО ОБРАБОТВАНЕ С ФАЛШИВА ИНДУСТРИАЛНА ЛАМПА ЗА ВИСОКО НАЛЯГАНЕ: Видях в скрапа няколко хвърлени лампи с красива форма. Дойдох с някои идеи как да направя домашна декоративна лампа от тези счупени лампи и събрах няколко крушки. Днес съм готов да споделя как направих тези крушки за домашно деко
„Sup - мишка за хора с квадриплегия - ниска цена и отворен код: 12 стъпки (със снимки)
![„Sup - мишка за хора с квадриплегия - ниска цена и отворен код: 12 стъпки (със снимки) „Sup - мишка за хора с квадриплегия - ниска цена и отворен код: 12 стъпки (със снимки)](https://i.howwhatproduce.com/images/010/image-29419-j.webp)
„Sup - мишка за хора с квадриплегия - ниска цена и отворен код: През пролетта на 2017 г. семейството на най -добрия ми приятел ме попита дали искам да летя до Денвър и да им помогна с проект. Те имат приятел, Алън, който има квадриплегия в резултат на инцидент с планинско колоездене. Феликс (моят приятел) направихме бърза повторна проверка
Биопринтер на ниска цена: 13 стъпки (със снимки)
![Биопринтер на ниска цена: 13 стъпки (със снимки) Биопринтер на ниска цена: 13 стъпки (със снимки)](https://i.howwhatproduce.com/images/011/image-31954-j.webp)
Биопринтер на ниска цена: Ние сме изследователски екип, ръководен от студенти в UC Davis. Ние сме част от BioInnovation Group, която работи в лабораторията за молекулярно прототипиране и биоинновации на TEAM (съветници д -р Марк Фачоти и Андрю Яо, MS). Лабораторията събира студенти от
Знак за ниска цена на радарната скорост: 11 стъпки (със снимки)
![Знак за ниска цена на радарната скорост: 11 стъпки (със снимки) Знак за ниска цена на радарната скорост: 11 стъпки (със снимки)](https://i.howwhatproduce.com/images/004/image-9017-14-j.webp)
Знак за радарна скорост на ниска цена: Искали ли сте някога да създадете свой собствен евтин знак за скорост на радар? Живея на улица, където колите карат твърде бързо, и се притеснявам за безопасността на децата си. Мислех, че би било много по -безопасно, ако мога да инсталирам собствен знак за скорост на радар, който показва
Динамична настолна лампа: 10 стъпки (със снимки)
![Динамична настолна лампа: 10 стъпки (със снимки) Динамична настолна лампа: 10 стъпки (със снимки)](https://i.howwhatproduce.com/images/006/image-17353-20-j.webp)
Динамична настолна лампа: Здравейте момчета Направих тази динамична светлинна настолна лампа, която ще поддържа околната среда около вас жива и успокояваща и случваща се. Можете да изберете цвета на светлината с дистанционно управление и да го промените според настроението си, а също и модела на светлината e