Съдържание:
- Стъпка 1: Дизайн на интерфейса на потребителския интерфейс
- Стъпка 2: MCU комуникация
- Стъпка 3: Написване на логически код
- Стъпка 4: Придобиване на сензор
- Стъпка 5: Действителен оперативен ефект
Видео: КАМЕНЕН LCD с Умен дом: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:49
Днес получих дисплея на STONE със сериен порт, който може да комуникира чрез серийния порт на MCU, а логическият дизайн на потребителския интерфейс на този дисплей може да бъде проектиран директно с помощта на софтуера VGUS, предоставен на официалния уебсайт на STONE, което е много удобно за нас. Затова планирам да го използвам за направата на обикновен контролер за уреди, който включва управление на различни светлини (хол, кухня, детска стая, баня). В същото време може да се събира вътрешна и външна температура, влажност и качество на въздуха. Това е просто демо и можете да провеждате вторично развитие чрез кода, който предоставих. Някои основни уроци за екрана STONE могат да бъдат посетени на уебсайта:
Уебсайтът съдържа разнообразна информация за модела, потребителската и дизайнерската документация, както и видео уроци. Няма да навлизам в подробности тук.
Стъпка 1: Дизайн на интерфейса на потребителския интерфейс
Photoshop
Проектирах следните две UI страници с Photoshop:
Този проект има общо горните две страници. „Светлина“и „Сензор“в горния десен ъгъл са бутоните за превключване на тези две страници.
В страницата „Светлина“можете да контролирате всички видове светлини във вашия дом. На страницата „Сензор“можете да проверите стойностите, открити от различни сензори.
След дизайна на горните две страници можем да извършим логически дизайн на бутон чрез софтуера STONE TOOL, предоставен на официалния уебсайт на STONE.
Заслужава да се отбележи, че източникът на часовник, използван за показване на времето тук, е източникът на часовник на екрана на дисплея, а не източникът на часовник на MCU.
Ефект на превключване на TAB страница
В софтуера STONE TOOL не беше намерен компонент за превключване на TAB страница, затова се сетих за друг метод за постигане на ефекта на превключване на TAB страница.
Чрез наблюдението, което предоставям, могат да се открият две изображения на потребителския интерфейс, че двете изображения по-горе са „Светъл“и „Сензорен“текст, разликата е, че размерът на пикселите им е различен, така че трябва само да поставим позицията на два пиксела е зададена на същия текст и след това през горния ляв ъгъл на часа и датата за справка можете да постигнете TAB за превключване на ефекта.
Логика на бутоните
Вземете за пример бутона „Хол“. Когато потребителят натисне този бутон, екранът за показване на серийния порт STONE ще изпрати съответните инструкции за протокол през серийния порт. След като получи тази инструкция, MCU на потребителя ще анализира протокола, за да контролира състоянието на превключване на светлините, свързани с MCU.
Придобиване на сензор
Вземете например „качество на въздуха“: ако искате да получите качеството на въздуха в помещенията, трябва да имаме MCU за събиране на качеството на въздуха, сензор за качеството на въздуха, когато MCU се събира чрез алгоритъм, сравняващ плюсовете и минусите на качеството на въздуха, а след това MCU изпратено през сериен порт за показване на зоната за съхранение на „Добро“или „Лошо“, за промяна на съдържанието на дисплея на „Текстова променлива0“и след това потребителят може интуитивно да види достойнствата на контрола на качеството. Те са обяснени по -късно в кода на MCU.
Стъпка 2: MCU комуникация
STM32 е MCU, с който всички са запознати, и това е общ модел MCU в международен план. Следователно специфичният модел на STM32 MCU, който използвах в този проект, е STM32F103RCT6.
Има много серии STM32, които могат да отговорят на различни изисквания на пазара. Ядрото може да бъде разделено на cortex-m0, M3, M4 и M7, като всяко ядро може да бъде разделено на мейнстрийм, висока производителност и ниска консумация на енергия.
Чисто от гледна точка на обучението, можете да изберете F1 и F4, F1 представлява основния тип, на базата на ядрото cortex-m3, основната честота е 72MHZ, F4 представлява високата производителност, базирана на ядрото cortex-m4, основната честотата е 180M.
Що се отнася до F1, F4 (серия 429 и по -нови), освен различните ядра и подобряването на основната честота, очевидната характеристика на надстройката е LCD контролер и интерфейс на камерата, поддръжка на SDRAM, тази разлика ще бъде приоритетна при избора на проект. Въпреки това, от гледна точка на университетското преподаване и първоначалното обучение на потребителите, серията F1 все още е първият избор. В момента STM32 от серията F1 има най -голямото количество материали и продукти на пазара.
За инсталацията на средата за разработка на STM32 SCM и метода за изтегляне на програма няма да правя въвеждането.
Инициализация на GPIO
В този проект използвахме общо 4 GPIO, един от които е PWM изходният щифт. Нека първо разгледаме инициализацията на три обикновени GPIO порта:
Тази функция инициализира PB0 / PB1 / PB2 на STM32F103C8 като изходен извод и го извиква от основната функция. След инициализацията трябва да имаме логика за контрол на изходното състояние, високото и ниското ниво на този GPIO, затова написах функцията по -долу:
Това е функция, която можете интуитивно да разберете под името на променливата.
Инициализация на сериен порт
Частта за инициализация на серийния порт е в uart.c:
След това извикайте uart_init в основната функция, за да инициализирате скоростта на предаване на сериен порт от 115200. Питовете използват PA9/PA10
Инициализация на ШИМ
Конкретни стъпки:
1. Задайте часовник RCC;
2. Задайте часовник GPIO; Режимът GPIO трябва да бъде зададен на GPIO_Model_AF_PP или на функцията GPIO_PinRemapConfig (), ако е необходимо пренареждане на пина.
3. Задайте съответните регистри на TIMx таймера;
4. Задайте свързан с PWM регистър на TIMx таймера;
A. Задайте PWM режим
Б. Задайте работен цикъл (изчисление по формула)
В. Задайте полярността за сравнение на изхода (въведена по -рано)
Г. Най -важното е да активирате изходното състояние на TIMx и да активирате PWM изхода на TIMx; След като съответните настройки са завършени, TIMx таймерът се включва от TIMx_Cmd () за получаване на ШИМ изход. Извикайте това TIM3_PWM_Init от основната функция.
Стъпка 3: Написване на логически код
Показване на дефиницията на адреса на компонент
Компонентите на дисплея имат отделни адреси и тук съм ги написал като макроопределения: Прием на серийни данни
Гледайки информация за STONE дисплея, можете да видите, че когато бутонът е натиснат, серийният порт на дисплея изпраща протоколи в подходящ формат, който потребителският MCU може да получи и анализира. Когато бутонът е натиснат, серийният порт на дисплея изпраща девет байта данни, включително потребителски. Приемът на серийни данни се записва в Handler: Получените данни се съхраняват в масива "USART_RX_BUF". В този проект дължината на получаване е фиксирана. Когато дължината на приемане е повече от 9 байта, приемният край се оценява.
Контролирайте състоянието на превключване на лампата
В основната функция написах някакъв логически код за контрол на състоянието на превключване на лампата: Както можем да видим, кодът първо определя дали се приемат данните от серийния порт и когато се получат данните от серийния порт, определя кой бутон е потребителят натиска върху екрана на дисплея. Различните бутони на дисплея имат различни адреси, които могат да се видят в софтуера STONE TOOL: Когато потребителят натисне бутона "Хол", четвъртият и петият бит от данните, изпратени от серийния порт на екрана на дисплея, са адрес на бутона. Тъй като четвъртият бит от всички зададени тук бутони е 0x00, можем да преценим кой бутон потребителят натиска, като директно преценява данните от петия бит. След като получим натиснат от потребителя бутон, трябва да преценим потребителските данни, получени при натискане на бутона, което е осмата цифра от данните, изпратени от дисплея. Затова правим следния контрол: запишете параметъра на адреса на бутона и потребителските данни във функцията "Light_Contral", за да контролирате състоянието на включване-изключване на светлината. Елементът на функция Light_Contral е следният: Както можете да видите, ако адресът на бутона е "Хол" и потребителските данни са "LightOn", тогава PB0 щифтът на MCU е настроен на изход на високо ниво и светлината е включена. Другите три бутона са подобни, но няма да продължавам тук.
ШИМ изход
В потребителския интерфейс, проектиран от мен, има плъзгащ регулатор, който се използва за контрол на яркостта на светлината на "Детска стая". MCU се реализира от PWM. PWM изходният щифт е PB5. Кодът е следният: Плъзгащият регулатор е настроен на минимална стойност 0x00 и максимална стойност 0x64. Когато се плъзга, серийният порт на екрана на дисплея също ще изпраща съответните адреси и данни и след това задава коефициента на работа на изхода на ШИМ, като извиква следната функция:
Стъпка 4: Придобиване на сензор
На страницата „Сензор“на дисплея има четири данни от сензора.
Данните също имат адрес за съхранение на дисплея и можем да променим реалното съдържание, като просто запишем данни към тези адреси през серийния порт на MCU.
Тук направих проста реализация на код:
Данните на дисплея се актуализират на всеки 5 секунди и написах само проста демонстрация на съответната функция за събиране на сензори, тъй като нямам тези сензори в ръка.
При реално разработване на проекти тези сензори могат да бъдат данни, събрани от ADC, или данни, събрани от IIC, UART и SPI комуникационни интерфейси. Всичко, което трябва да направите, е да запишете тези данни в съответната функция като възвращаема стойност.
Стъпка 5: Действителен оперативен ефект
Препоръчано:
Умен дом от Raspberry Pi: 5 стъпки (със снимки)
Умен дом от Raspberry Pi: Вече има няколко продукта, които правят апартамента ви по -умен, но повечето от тях са патентовани решения. Но защо имате нужда от интернет връзка, за да превключите лампата на вашия смартфон? Това беше една от причините да създам свой собствен Smar
Умен дом с Arduino: 11 стъпки (със снимки)
Умен дом с Arduino: Здравейте, Ще ви покажа как да изградите свой собствен умен дом. Той показва температурата както отвътре, така и отвън, ако прозорецът е отворен или затворен, показва кога вали и сигнализира, когато PIR сензорът се движи. Направих приложението на android за
Умен дом с Arduino MKR1000 и M.I.T. Приложение за Android: 4 стъпки
Умен дом с Arduino MKR1000 и M.I.T. Приложение за Android: В този урок описвам как да подобрите вашия интелигентен дом само с няколко компонента. Сърцето на този интелигентен дом е дъската Arduino MKR1000, управлявана с приложение, проектирано на уебсайта за разработка на M.I.T. (Институт Масачузетс
HackerBox 0054: Умен дом: 8 стъпки
HackerBox 0054: Умен дом: Поздрави за хакерите на HackerBox по целия свят! HackerBox 0054 изследва домашната автоматизация чрез интелигентни ключове, сензори и др. Конфигурирайте Sonoff WiFi интелигентни превключватели. Променете интелигентните превключватели, за да добавите програмни заглавки и алтернативен фърмуер на флаш
Умен дом, използващ Amazon Alexa: 5 стъпки
Интелигентен дом, използващ Amazon Alexa: Основната идея на този проект е да се управлява електронен уред с помощта на Amazon Alexa или чрез неговото приложение от всяка точка на света. За това ще използваме Node MCU V1.0. Целият код ще бъде на моята страница на Github. Ако в даден момент не го направите