İçindekiler:

Akıllı Evli STONE LCD: 5 Adım
Akıllı Evli STONE LCD: 5 Adım

Video: Akıllı Evli STONE LCD: 5 Adım

Video: Akıllı Evli STONE LCD: 5 Adım
Video: Brezilya'da kadın taraftara acayip üst araması#short #futbol #football #keşfet #tiktok #foryou #fyp 2024, Temmuz
Anonim
Akıllı Evli STONE LCD
Akıllı Evli STONE LCD

Bugün, STONE'nin MCU'nun seri portu üzerinden haberleşebilen seri port sürücü ekranını aldım ve bu ekranın UI mantık tasarımı, bizim için çok uygun olan STONE'nin resmi web sitesinde sağlanan VGUS yazılımı kullanılarak doğrudan tasarlanabilir. Bu yüzden, çeşitli ışıkların (oturma odası, mutfak, çocuk odası, banyo) kontrolünü içeren basit bir cihaz kontrolörü yapmak için kullanmayı planlıyorum. Aynı zamanda iç ve dış sıcaklık, nem ve hava kalitesi toplanabilir. Bu sadece basit bir demo ve verdiğim kod aracılığıyla ikincil geliştirme yapabilirsiniz. STONE ekranı hakkında bazı temel eğitimler web sitesine gidebilir:

Web sitesinde model, kullanıcı ve tasarım belgeleri ile video eğitimleri hakkında çeşitli bilgiler bulunur. Burada çok fazla ayrıntıya girmeyeceğim.

Adım 1: UI Arayüz Tasarımı

UI Arayüz Tasarımı
UI Arayüz Tasarımı
UI Arayüz Tasarımı
UI Arayüz Tasarımı
UI Arayüz Tasarımı
UI Arayüz Tasarımı
UI Arayüz Tasarımı
UI Arayüz Tasarımı

Photoshop

Aşağıdaki iki UI sayfasını photoshop ile tasarladım:

Bu proje toplamda yukarıdaki iki sayfaya sahiptir. Sağ üst köşedeki "Işık" ve "Sensör" bu iki sayfanın geçiş butonlarıdır.

"Işık" sayfasında evinizdeki her türlü ışığı kontrol edebilirsiniz. "Sensör" sayfasında, çeşitli sensörler tarafından algılanan değerleri kontrol edebilirsiniz.

Yukarıdaki iki sayfanın tasarımından sonra STONE'nin resmi web sitesinde bulunan STONE TOOL yazılımı ile buton mantığı tasarımı yapabiliriz.

Burada zaman gösterimi için kullanılan saat kaynağının MCU saat kaynağı değil, gösterim ekranının saat kaynağı olduğunu belirtmekte fayda var.

SEKME sayfa değiştirme efekti

STONE TOOL yazılımında TAB sayfa değiştirme bileşeni bulunamadı, bu yüzden TAB sayfa değiştirme efektini elde etmek için başka bir yöntem düşündüm.

Gözlem yoluyla, iki UI görüntüsü sağladığım, yukarıdaki iki görüntünün "Işık" ve "Sensör" metni olduğunu, farkın piksel boyutlarının farklı olduğunu, bu nedenle yalnızca iki piksel konumunu ayarlamamız gerektiğini görebilirsiniz. aynı metin ve daha sonra referans için saat ve tarihin sol üst köşesinden, efekti değiştirmek için TAB'ı elde edebilirsiniz.

Düğme mantığı

Örnek olarak "Oturma Odası" düğmesini alın. Kullanıcı bu düğmeye bastığında, STONE seri port görüntüleme ekranı seri port üzerinden ilgili protokol talimatlarını gönderecektir. Bu talimatı aldıktan sonra, kullanıcının MCU'su, MCU'ya bağlı ışıkların anahtarlama durumunu kontrol etmek için protokolü ayrıştırır.

Sensör edinimi

Örneğin "hava kalitesini" alın: iç mekan hava kalitesini elde etmek istiyorsanız, hava kalitesini toplamak için bir MCU'ya, hava kalitesinin artılarını ve eksilerini karşılaştıran bir algoritma aracılığıyla MCU sayısal toplandığında hava kalitesi sensörüne sahip olmamız gerekir. MCU, "İyi" veya "Kötü" depolama alanını görüntülemek, "Metin değişkeni0" ekran içeriğini değiştirmek için bir seri bağlantı noktası aracılığıyla gönderilir ve ardından kullanıcı, kalite kontrolünün yararlarını sezgisel olarak görebilir. Bunlar daha sonra MCU kodunda açıklanmıştır.

Adım 2: MCU İletişimi

MCU İletişimi
MCU İletişimi
MCU İletişimi
MCU İletişimi
MCU İletişimi
MCU İletişimi
MCU İletişimi
MCU İletişimi

STM32, herkesin aşina olduğu MCU'dur ve uluslararası alanda yaygın bir MCU modelidir. Bu nedenle, bu projede kullandığım STM32 MCU I'nin spesifik modeli STM32F103RCT6'dır.

Piyasanın çeşitli taleplerini karşılayabilecek birçok STM32 serisi bulunmaktadır. Çekirdek korteks-m0, M3, M4 ve M7'ye bölünebilir ve her çekirdek ana akım, yüksek performans ve düşük güç tüketimi olarak ayrılabilir.

Tamamen öğrenme açısından, F1 ve F4'ü seçebilirsiniz, F1, korteks-m3 çekirdeğine dayalı temel türü temsil eder, ana frekans 72MHZ'dir, F4, korteks-m4 çekirdeğine dayanan yüksek performansı temsil eder, ana frekans 180M'dir.

F1, F4 (429 serisi ve üstü), farklı çekirdekler ve ana frekansın iyileştirilmesi dışında, yükseltmenin belirgin özelliği LCD denetleyici ve kamera arayüzü, SDRAM desteği, proje seçiminde bu farka öncelik verilecektir. Ancak, üniversite öğretimi ve kullanıcıların ilk öğrenimi açısından F1 serisi hala ilk tercihtir. Şu anda F1 serisinin STM32'si piyasadaki en büyük malzeme ve ürün miktarına sahip.

STM32 SCM geliştirme ortamı kurulumu ve program indirme yöntemi hakkında tanıtım yapmayacağım.

GPIO başlatma

Bu projede biri PWM çıkış pini olmak üzere toplam 4 GPIO kullandık. Önce üç sıradan GPIO bağlantı noktasının başlatılmasına bakalım:

Bu fonksiyon, STM32F103C8'in PB0\PB1\PB2'sini çıkış pini olarak başlatır ve ana fonksiyondan çağırır. Başlattıktan sonra, bu GPIO'nun çıkış durumunu, yüksek ve düşük seviyesini kontrol etmek için bir mantığa ihtiyacımız var, bu yüzden işlevi aşağıdaki gibi yazdım:

Bu, değişkenin adıyla sezgisel olarak anlayabileceğiniz bir işlevdir.

Seri bağlantı noktası başlatma

Seri bağlantı noktasının başlatma kısmı uart.c'dedir:

Ardından, 115200 seri port baud hızını başlatmak için ana fonksiyonda uart_init'i arayın. Pinler PA9/PA10 kullanır.

PWM başlatma

Belirli adımlar:

1. RCC saatini ayarlayın;

2. GPIO saatini ayarlayın; GPIO modu, GPIO_Model_AF_PP'ye veya pin yeniden eşlemesi gerekiyorsa GPIO_PinRemapConfig() işlevine ayarlanmalıdır.

3. TIMx zamanlayıcının ilgili kayıtlarını ayarlayın;

4. TIMx zamanlayıcısının PWM ile ilgili kaydını ayarlayın;

A. PWM modunu ayarla

B. Görev döngüsünü ayarlayın (formül hesaplaması)

C. Çıkış karşılaştırma polaritesini ayarlayın (önceden tanıtılmıştı)

D. En önemlisi, TIMx'in çıkış durumunu etkinleştirin ve TIMx'in PWM çıkışını etkinleştirin; İlgili Ayarlar tamamlandıktan sonra TIMx zamanlayıcı TIMx_Cmd() ile PWM çıkışı almak için açılır. Ana işlevden bu TIM3_PWM_Init'i çağırın.

3. Adım: Mantık Kodu Yazma

Mantık Kodu Yazma
Mantık Kodu Yazma
Mantık Kodu Yazma
Mantık Kodu Yazma
Mantık Kodu Yazma
Mantık Kodu Yazma

Bileşen adres tanımını görüntüle

Ekran bileşenlerinin ayrı adresleri var ve burada hepsini makro tanımları olarak yazdım: Seri veri alımı

STONE ekranı ile ilgili bilgilere bakıldığında, butona basıldığında ekrandaki seri portun kullanıcı MCU'sunun alıp ayrıştırabileceği uygun formatta protokoller gönderdiğini görebilirsiniz. Düğmeye basıldığında, ekrandaki seri port, kullanıcı verileri dahil olmak üzere dokuz bayt veri gönderir. Seri veri alımı İşleyicide yazılır: Alınan veriler "USART_RX_BUF" dizisinde saklanır. Bu projede alıcı uzunluk sabittir. Alma uzunluğu 9 bayttan fazla olduğunda, alıcı uç değerlendirilir.

Lambanın anahtarlama durumunu kontrol edin

Ana fonksiyonda, lambanın switch durumunu kontrol etmek için bazı mantık kodları yazdım: Gördüğümüz gibi kod öncelikle seri port verisinin alınıp alınmadığını, seri port verisi alındığında ise kullanıcının hangi butondan olduğunu belirler. ekrana basar. Ekrandaki farklı düğmelerin farklı adresleri vardır, bu STONE TOOL yazılımında görülebilir: Kullanıcı "Oturma Odası" düğmesine bastığında, ekranın seri portu tarafından gönderilen verilerin dördüncü ve beşinci bitleri, düğmenin adresi. Burada ayarlanan tüm düğmelerin dördüncü biti 0x00 olduğundan, doğrudan beşinci bitin verilerini değerlendirerek kullanıcının hangi düğmeye bastığını yargılayabiliriz. Kullanıcının bastığı butonu elde ettikten sonra butona basıldığında alınan kullanıcı datasını yani display ekranından gönderilen datanın sekizinci basamağı olup olmadığına karar vermemiz gerekmektedir. Bu nedenle şu kontrolü yapıyoruz: ışığın açık-kapalı durumunu kontrol etmek için "Light_Contral" fonksiyonuna buton adres parametresini ve kullanıcı verilerini yazın. Light_Contral fonksiyon varlığı aşağıdaki gibidir: Gördüğünüz gibi buton adresi "Oturma Odası" ve kullanıcı datası "LightOn" ise MCU'nun PB0 pini yüksek seviye çıkışa ayarlanmış ve ışık yanıyor. Diğer üç düğme benzer, ama burada devam etmeyeceğim.

PWM çıkışı

Tarafımdan tasarlanan kullanıcı arayüzünde "Çocuk Odası" ışığının parlaklığını kontrol etmek için kullanılan sürgülü bir regülatör bulunmaktadır. MCU, PWM. PWM tarafından uygulanmaktadır çıkış pini PB5'tir. Kod aşağıdaki gibidir: Kayar ayarlayıcı minimum 0x00 değerine ve maksimum 0x64 değerine ayarlanmıştır. Kaydırıldığında, ekranın seri portu da ilgili adresleri ve verileri gönderecek ve ardından aşağıdaki işlevi çağırarak PWM çıkışının görev oranını ayarlayacaktır:

Adım 4: Sensör Toplama

Sensör Toplama
Sensör Toplama
Sensör Toplama
Sensör Toplama
Sensör Toplama
Sensör Toplama

Görüntü ekranının "Sensör" sayfasında dört Sensör verisi vardır.

Verilerin ayrıca ekranda bir depolama adresi vardır ve MCU'nun seri portu üzerinden bu adreslere basitçe veri yazarak gerçek içeriği değiştirebiliriz.

Burada basit bir kod uygulaması yaptım:

Görüntü verileri her 5 saniyede bir güncellenir ve elimde bu sensörler olmadığı için ilgili sensör toplama işlevinin yalnızca basit bir demosunu yazdım.

Gerçek proje geliştirmede, bu sensörler ADC tarafından toplanan veriler veya IIC, UART ve SPI iletişim arayüzleri tarafından toplanan veriler olabilir. Tek yapmanız gereken bu verileri karşılık gelen fonksiyona dönüş değeri olarak yazmaktır.

Adım 5: Gerçek Çalışma Etkisi

Önerilen: