TVZ Mechatronics Team


Zagreb University of Applied Sciences, Professional Study in Mechatronics

You are viewing an older revision! See the latest version

Izrada HMI ja Human Machine Interface

https://os.mbed.com/media/uploads/dfraj/picture1.png

Sučelje čovjek-stroj (eng. Human-Machine Interface, HMI) je rješenje koje povezuje sklopovlje i programsku podršku radi međusobne komunikacije. Nextion zaslon je HMI koji omogućuje povezivanje s mikroupravljačem ili nekim drugim elektroničkim sklopom koji za komunikaciju koristi UART (eng. Universal asynchronous receiver-transmitter) sklopovlje.

Na laboratorijskim vježbama koristi se osnovni (eng. Basic) model NX3224T024_011 Nextion zaslona (Slike 2 i 3) čije su glavne značajke vidljive u tablici niže. Osim Basic modela postoje još Intelligent i Enhanced modeli koji dolaze s dodatnim sklopovskim i programskim mogućnostima.

Potrošnja u normalnom načinu rada90mA@5V, jačina svjetline ekrana 100%
Potrošnja u štednom načinu rada15mA
Veličina dijagonale zaslona2.4“
Rezolucija240x320 piksela
Vrsta dodirnog zaslonaRezistivni
Brzina prijenosa podataka2400 – 115200 bps

Za izradu korisničkog sučelja koristi se program Nextion Editor. Projekti izrađeni u njemu poprimaju ".HMI" ekstenziju i njih je moguće naknadno uređivati. Generirana datoteka koju je potrebno prebaciti u memoriju Nextion zaslona ima ekstenziju ".tft" i nju nije moguće naknadno uređivati. Ona se na Nextion zaslon prenosi pomoću prilagodnog RS232 međusklopa ili microSD memorijske kartice. RS232 prilagodni međusklop olakšava prijenos ".tft" datoteke na Nextion zaslon ali ujedno i pruža mogućnost otklanjanja pogrešaka (engl. debugging). Primjer takvog RS232 prilagodnog međusklopa prikazan je na slici 4.

https://os.mbed.com/media/uploads/dfraj/4a.png

Nextion Editor - izrada novog projekta

Pokretanjem Nextion Editora na osobnom računalu pojavljuje se glavni prozor njegovog korisničkog sučelja (Slika 5). Za kreiranje novog projekta potrebno je u padajućem izborniku File kliknuti na New.

https://os.mbed.com/media/uploads/dfraj/5.png

Nakon potvrde unosa imena projekta pojavljuje se prozor (slika 6) u kojem je potrebno odabrati točnu verziju korištenog Nextion zaslona (Basic - NX3224T024_011). Također je potrebno i odabrati željenu orijentaciju zaslona u podizborniku Display (Slika 7).

https://os.mbed.com/media/uploads/dfraj/6.png https://os.mbed.com/media/uploads/dfraj/7.png

Potvrdom prethodnih odabira ponovno se pojavljuje glavni prozor novostvorenog projekta (Slika 8). Moguće je uočiti sljedeća polja korisničkog sučelja:

  1. Toolbox – dostupni grafički elementi za uređivanje korisničkog sučelja
  2. Picture/Fonts – slike i fontovi koje je korisnik dodao u projekt
  3. Display – izgled trenutno odabrane stranice (eng. Page)
  4. Output – konzola koja služi za prikaz statusa memorije i informacija o greškama nastalih prilikom prevođenja programskog koda
  5. Event – prostor za pisanje programskog koda i definiranje radnji ovisno o događajima
  6. Page – popis svih stranica od kojih se sastoji Nextion korisničko sučelje
  7. Attribute – svojstva odabranog elementa korisničkog sučelja

https://os.mbed.com/media/uploads/dfraj/8.png

Nextion Editor - generiranje fontova

Za prikaz bilo kakvog oblika teksta na zaslonu potrebno je odabrati font. Stoga je nakon otvaranja novog projekta potrebno dodati barem jedan font. To je moguće napraviti klikom na padajući izbornik Tools i otvaranjem aplikacije Font Generator. Time se otvara novi prozor (Slika 9) gdje je potrebno odabrati željeni font i njegovu veličinu. Također je moguće i podebljati font (eng. Bold) i zagladiti mu rubove (eng. Anti-aliasing). Upisivanjem imena fonta (eng. Font Name) koje će biti prikazano u Nextion Editoru i klikom na generiranje fonta (eng. Generate Font) pojavljuje se prozor u kojem je potrebno upisati ime i navesti lokaciju spremanja datoteke na disk.

https://os.mbed.com/media/uploads/dfraj/9.png

Nakon spremanja pojavljuje se prozor gdje je potrebno potvrditi dodavanje kreiranog fonta u Nextion Editor. Font tada poprima ID odnosno redni broj i postaje vidljiv u polju Fonts (Slika 10).

https://os.mbed.com/media/uploads/dfraj/10_xX3ZpqI.png

1. zadatak

Omogućiti paljenje i gašenje crvene i zelene svjetleće diode na razvojnom okruženju s mbed platformom LPC1768. Crvenom svjetlećom diodom je potrebno upravljati pomoću tipkala dok je zelenom potrebno upravljati pomoću tipke koja zadržava stanje. Na tipkalo postaviti tekst „CRVENA“ a na tipku koja zadržava stanje tekst „ZELENA“, kako bi korisniku bilo jasnije čemu služe ta dva grafička elementa. Podesiti njihove dimenzije na 240x60 piksela.

Rješenje:

Preuzeti predložak Nextion HMI projekta sa stranice kolegija na LMS-u te ga pokrenuti na računalu. Iz dostupnih elemenata grafičkog sučelja (polje Toolbox – Slika 8) potrebno je odabrati Button i Dual-state button. Nakon što se tipkalo pojavilo na početnoj stranici, potrebno je promijeniti njegove dimenzije, umetnuti proizvoljni tekst te njegov font (ID 1). Navedeni parametri se nalaze u polju Attribute (Slika 11). U predlošku Nextion HMI projekta sa stranice kolegija su već uključena 3 fonta veličina 16, 32 i 64 piksela.

https://os.mbed.com/media/uploads/dfraj/11.png

Analogno tome potrebno je promijeniti parametre tipke koja zadržava stanje (eng. Dual-state button). Na slici 12 je prikazan izgled traženog korisničkog sučelja za ovaj zadatak.

https://os.mbed.com/media/uploads/dfraj/12.png

U polju Event (Slika 8, polje 5) potrebno je definirati radnje koje se izvršavaju djelovanjem na grafičke elemente. Za Touch Press Event odnosno pritisak tipkala je stoga potrebno upisati sljedeće:

print "C" // pošalji znak C
printh FF FF FF //pošalji hex vrijednost 0D odnosno znak CR

Radnje koje je potrebno izvršiti pritiskom tipke koja zadržava stanje:

if(bt0.val==0){// ako je vrijednost objekta bt0 jednak nuli
  print "Z0" // pošalji string "Z0"
}else if(bt0.val==1){ // ako je vrijednost objekta bt0 jednak jedinici
  print "Z1" // pošalji string "Z1"
}
printh FF FF FF //pošalji hex vrijednost 0D odnosno znak CR

Pritiskom na tipku Debug u alatnoj traci vrši se prevođenje programskog koda te pokretanje simulatora u slučaju da ne postoje greške prilikom prevođenja. U konzoli je moguće vidjeti rezultat prevođenja (Slika 13).

https://os.mbed.com/media/uploads/dfraj/13.png

U polju Simulator Return (Slika 14) Debug prozora moguće je u različitim formatima (HEX i string) vidjeti podatke koje šalje Nextion zaslon.

https://os.mbed.com/media/uploads/dfraj/14.png

Pritiskom na tipkalo pojavljuju se HEX vrijednosti 43 i 0D. Vrijednost 43 prema ASCII tablici odgovara znaku 'C' dok 0D odgovara znaku CR (Carriage Return).

https://os.mbed.com/media/uploads/dfraj/15a.png

Potrebno je spojiti shemu prema slici 15 (gore). Zatvaranjem simulatora i pritiskom na tipku Upload u alatnoj traci otvara se prozor za flash-anje Nextion zaslona. Pritiskom na tipku Go započinje flash-anje što je vidljivo na računalu i na samom Nextion zaslonu (Slike 16 i 17).

U nastavku je prikazan programski kod za 1. zadatak:

Import program

00001 #include "mbed.h"
00002  
00003 Serial nextion(p28, p27);  
00004 DigitalOut myled1(LED2);
00005 DigitalOut myled2(LED4);
00006  
00007 char buffer[20];
00008 int znak = 0; 
00009  
00010 void Rx_interrupt(void){
00011     char c;
00012     if(nextion.readable()) {
00013         c = nextion.getc();
00014         buffer[znak] = c;
00015         znak++;
00016         if ((znak >= 3) && (buffer[znak-1] == 0xff) && (buffer[znak-2] == 0xff) && (buffer[znak-3] == 0xff)) {
00017             if (buffer[0] == 0x43){
00018                 myled1 = !myled1;
00019             }else if (buffer[0] == 0x5A){
00020                 myled2 = buffer[1] - 48;
00021             }
00022             memset(buffer,0,strlen(buffer)); 
00023             znak = 0; 
00024         }
00025     }
00026 }
00027  
00028 int main(){
00029     nextion.attach(&Rx_interrupt, Serial::RxIrq);
00030     while (1) {
00031     }
00032 }

https://os.mbed.com/media/uploads/dfraj/18.png

3. zadatak

Omogućiti upravljanje SG90 servo motora pomoću kliznog upravljača (eng. Slider) i prikaz kuta pomoću tekstualnog indikatora (eng. Text).

Rješenje: Preuzeti predložak Nextion HMI projekta sa stranice kolegija te ga pokrenuti na računalu. U prozoru Page (Slika 8, polje 6) Nextion Editora kliknuti mišem na stranicu page2 kako bi ona postala aktivna. Iz dostupnih elemenata grafičkog sučelja (polje Toolbox – Slika 8) potrebno je odabrati Text i Slider. Podesiti minimalnu vrijednost kliznog upravljača na 0, maksimalnu na 180 te zadanu vrijednost na 90 (Slika 24).

U parametrima tekstualnog indikatora odabrati font visine 32 piksela (ID 1). U polju Event (Slika 8, polje 5) potrebno je definirati radnju koje se izvršava djelovanjem na klizni upravljač.

Za Touch Release Event je stoga potrebno upisati sljedeće:

covx h0.val,t1.txt,0,0 // pretvaranje cjelobrojne vrijednosti slidera h0 u string i zapis u tekstualni indikator t1
print t1.txt // printanje vrijednosti tekstualnog indikatora
printh 0D // CR, krajnji znak
t1.txt=t1.txt+"°" // dodavanje znaka '°' na kraj stringa t1

Spojiti shemu prema slici 15 te flashati Nextion zaslon s novim sučeljem. U projektnom stablu otvorite datoteku vjezba3.c. Omogućite prevođenje samo datoteke vjezba3.c. Sadržaj datoteke vjezba3.c je prikazan programskim kodom 3.

Za upravljanje SG90 servo motorom potrebno je generirati PWM signal frekvencije 50 Hz i promjenjivog trajanja visokog stanja. Eksperimentalnom metodom su utvrđena trajanja visokog stanja PWM signala i odgovarajuće pozicije servo motora:

Import program

00001 #include "mbed.h" 
00002  
00003 Serial nextion(p28, p27); 
00004 PwmOut servo(p21);            
00005  
00006 char buffer[20]; 
00007 int znak = 0; 
00008  
00009 uint8_t pozicija = 0;
00010  
00011 void Rx_interrupt(void){
00012     char c;
00013  
00014     if(nextion.readable()) {
00015         c = nextion.getc();
00016         buffer[znak] = c;
00017         znak++;
00018         if ((znak >= 2) && (buffer[znak-1] == 0x0d)) {  
00019             pozicija = 0;
00020             for(int i = 0; i < 3; i++) {
00021                 if(buffer[i] == 0x0d) break;
00022                 pozicija = pozicija * 10 + (buffer[i] - 48);
00023             }
00024             servo.pulsewidth_us(5.56*pozicija+1000);
00025             memset(buffer,0,strlen(buffer));
00026             znak = 0;
00027         }
00028     }
00029 } 
00030  
00031 int main(){
00032     nextion .attach(&Rx_interrupt, Serial::RxIrq); 
00033     servo.period(0.02);    
00034     while (1) {
00035         wait(1.0);     
00036     }
00037 }

Čestitke!

Završili ste sve vježbe iz teme Koristenje ARM Keil razvojnog okruzenja.

Povratak na naslovnu stranicu TVZ Mechatronics Team-a.


All wikipages