Korisnički alati

Site alati


2018:karlo_siladi:projektni_zadatak

Razlike

Slijede razlike između dviju inačica stranice

Poveznica na ovu usporedbu

Starije izmjene na obje strane Starija izmjena
Novija izmjena
Starija izmjena
2018:karlo_siladi:projektni_zadatak [2018/06/14 00:37]
ksiladi
2018:karlo_siladi:projektni_zadatak [2023/06/19 18:11] (trenutno)
Redak 54: Redak 54:
   * Bluetooth modul [[https://​www.olimex.com/​Products/​Components/​RF/​BLUETOOTH-SERIAL-HC-06/​resources/​hc06.pdf|HC-06]]   * Bluetooth modul [[https://​www.olimex.com/​Products/​Components/​RF/​BLUETOOTH-SERIAL-HC-06/​resources/​hc06.pdf|HC-06]]
  
-===== Arduino Uno - Centralna jedinica =====+===== Arduino Uno/​Duemilanove ​- Centralna jedinica =====
  
 Arduino Uno je razvojna platforma zasnovana na [[http://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf|ATmega328p]] mikrokontroleru. Ima 14 ulazno-izlaznih pinova (izvoda) od kojih 6 može biti iskorišteno za pulsno-širinsku modulaciju (engl. //​pulse-width modulation, PWM//), 6 analognih ulaza, kvarcni oscilator frekvencije 16MHz, USB konektor za spajanje s računalom, konektor za napajanje, ICSP ( In Circuit Serial Programming ) konektor te tipkalo za reset mikrokontrolera. Arduino Uno je razvojna platforma zasnovana na [[http://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf|ATmega328p]] mikrokontroleru. Ima 14 ulazno-izlaznih pinova (izvoda) od kojih 6 može biti iskorišteno za pulsno-širinsku modulaciju (engl. //​pulse-width modulation, PWM//), 6 analognih ulaza, kvarcni oscilator frekvencije 16MHz, USB konektor za spajanje s računalom, konektor za napajanje, ICSP ( In Circuit Serial Programming ) konektor te tipkalo za reset mikrokontrolera.
Redak 62: Redak 62:
 {{:​2018:​karlo_siladi:​uno_specifications.png?​nolink&​436x500|Arduino Uno specifications}} {{:​2018:​karlo_siladi:​uno_specifications.png?​nolink&​436x500|Arduino Uno specifications}}
  
-U našem sustavu Arduino Uno je centralna jedinica koja je zadužena za komunikaciju s ostalim podsustavima. Odabrana je zbog svoje pristupačnosti,​ cijene, kratkog vremena razvoja, jednostavnosti korištenja te cijene.+U našem sustavu Arduino Uno/​Duemilanove ​je centralna jedinica koja je zadužena za komunikaciju s ostalim podsustavima. Odabrana je zbog svoje pristupačnosti,​ cijene, kratkog vremena razvoja, jednostavnosti korištenja te cijene.
  
 ====== mp3 modul DFPlayer YX5200 ====== ====== mp3 modul DFPlayer YX5200 ======
Redak 70: Redak 70:
 ==== Komunikacija ==== ==== Komunikacija ====
  
-Komunikacija s modulom se ostvaruje asinkronom serijskom UART komunikacijom. Potrebne su dva digitalna izvoda: Tx i Rx na Arduinu koji se spajaju na Rx i Tx izvode (UOČI: Rx→Tx; Tx→Rx) na mp3 modulu. Za rad mp3 modula potrebno je dovesti i napajanje (GND i +5V) s Arduino Uno razvojne platforme. Na Arduino Uno razvojnoj platformi odnosno na ATmega328p mikrokontroleru postoji sklopovlje za asinkronu serijsku komunikaciju koje je spojeno na USB kako bi se mogla ostvariti komunikacija s računalom. Zbog uhodavanja i nadogradnje sustava asinkrona serijska komunikacija sa mp3 modulom ostvarit će se programski. Pritom će se koristiti ugrađena biblioteka [[https://​www.arduino.cc/​en/​Reference/​SoftwareSerial|SoftwareSerial]] koja se već nalazi u Arduino IDE.+Komunikacija s modulom se ostvaruje asinkronom serijskom UART komunikacijom. Potrebne su dva digitalna izvoda: Tx i Rx na Arduinu koji se spajaju na Rx i Tx izvode (UOČI: Rx→Tx; Tx→Rx) na mp3 modulu. Za rad mp3 modula potrebno je dovesti i napajanje (GND i +5V, može i 3v3) s Arduino Uno razvojne platforme. Na Arduino Uno razvojnoj platformi odnosno na ATmega328p mikrokontroleru postoji sklopovlje za asinkronu serijsku komunikaciju koje je spojeno na USB kako bi se mogla ostvariti komunikacija s računalom. Zbog uhodavanja i nadogradnje sustava asinkrona serijska komunikacija sa mp3 modulom ostvarit će se programski. Pritom će se koristiti ugrađena biblioteka [[https://​www.arduino.cc/​en/​Reference/​SoftwareSerial|SoftwareSerial]] koja se već nalazi u Arduino IDE.
  
 ===== RFID čitač ===== ===== RFID čitač =====
Redak 80: Redak 80:
 ==== MFRC522 ==== ==== MFRC522 ====
  
-MFRC522 modul je RFID čitač/​pisač proizvođača NXP Semiconductors koji je namijenjen za očitavanje pasivnih RFID  oznaka propisanih ISO/IEC 14443 protokolom. Komunikacija između modula i RFID oznaka se odvija na 13.56 MHz. Komunikacija je ostvarena SPI komunikacijom linijama: MISO, MOSI, SS, CLK. Nedostatak: mali domet. Napredak: Zapis info o proizvodima na RFID oznaku (engl. //tag//).+MFRC522 modul je RFID čitač/​pisač proizvođača NXP Semiconductors koji je namijenjen za očitavanje pasivnih RFID oznaka propisanih ISO/IEC 14443 protokolom. Komunikacija između modula i RFID oznaka se odvija na 13.56 MHz. Komunikacija je ostvarena SPI komunikacijom linijama: MISO, MOSI, SS, CLK. Nedostatak: mali domet. Napredak: Zapis info o proizvodima na RFID oznaku (engl. //tag//). Napajanje 5V ili 3v3. S 5V ostvaren nešto veći domet.
  
-<font 12.0pt/​inherit;;​inherit;;​inherit></​font>​+===== Bluetooth modul ===== 
 + 
 +Bluetooth modul HC-06Odabran zbog jednostavnog rukovanja. Serijska komunikacija izvedena softverski. Jednostavno spajanje na Android mobilnoj aplikaciji. 
 + 
 +===== Shema spajanja sustava ===== 
 + 
 +{{:​2018:​karlo_siladi:​shema_sustava2.png?​nolink&​400x285}}{{ ​ :​2018:​karlo_siladi:​sustav_ozicenje.png?​nolink&​400x284}} 
 + 
 + 
 +====== Prototipno kućište ====== 
 + 
 +Uređaj je prenosiv pa je napajanje izvedeno baterijom nazivnog napona 9V. Napredak: punjive baterije, prekidač 
 + 
 +Za lakše rukovanje sustav je smješten u plastično kućište. Zbog malog dometa RFID čitača isti je postavljen izvan kućišta. Također izvan se nalaze i slušalice. 
 + 
 +{{:​2018:​karlo_siladi:​kuciste.jpg?​nolink&​300x400|kuciste.jpg}}
  
 ====== Komunikacija s vanjskim sustavima ====== ====== Komunikacija s vanjskim sustavima ======
Redak 90: Redak 105:
 Ako dođe do greške prilikom povezivanja preko bluetooth veze, sustav može komunicirati izravno nakon očitavanja jedinstvenog koda proizvoda preko .mp3 modula odnosno reproducirati glasovni zapis s informacijama o proizvodu. Napredak: baza glasovnih zapisa na vanjskom poslužitelju. Snimanje zapisa na samom uređaju. Ako dođe do greške prilikom povezivanja preko bluetooth veze, sustav može komunicirati izravno nakon očitavanja jedinstvenog koda proizvoda preko .mp3 modula odnosno reproducirati glasovni zapis s informacijama o proizvodu. Napredak: baza glasovnih zapisa na vanjskom poslužitelju. Snimanje zapisa na samom uređaju.
  
-====== ​  ​======+====== ​Android aplikacija ​====== 
 + 
 +Kod je dostupan na sljedećoj poveznici: http://​pametne-kuce.zesoi.fer.hr/​lib/​exe/​fetch.php?​media=2018:​karlo_siladi:​spvp_apk.zip 
 + 
 +Struktura aplikacije je prikazana na slici: 
 + 
 +{{:​2018:​karlo_siladi:​struktura_apk.png?​direct&​500x384}} 
 + 
 + 
 +===== Android Studio ===== 
 + 
 +Za izradu Android aplikacije potrebno je instalirati razvojni alat Android Studio. Najnovija verzija trenutno je 3.1.3. a dostupna je za preuzimanje na sljedećoj poveznici:​[[https://​developer.android.com/​studio/​|https://​developer.android.com/​studio/​]] . 
 + 
 +Detaljne upute za instalaciju razvojnog alata Android Studio 
 + 
 +[[https://​developer.android.com/​studio/​install|https://​developer.android.com/​studio/​install]] 
 + 
 + 
 +==== Kreiranje projekta ==== 
 + 
 +Nakon uspješne instalacije razvojnog alata potrebno je kreirati novi Android projekt. Kod stvaranja projekta potrebno je unijeti proizvoljno ime projekta. Korišteno ime je SPVP_projekt . Stvara se novi direktorij istog imena u kojeg se spremaju programski kodovi, biblioteke te resursi potrebni za aplikaciju. Nakon toga potrebno je unijeti verziju platforme za koju se projekt izrađuje. Odabrana je verzija API: 19 Android 4.4 (KitKat) što je relativno stara verzija Android operacijskog sustava, ali je time omogućeno da se aplikacija može pokretati na većini mobilnih uređaja jer je pokretanje moguće i na svim novijim verzijama Androida. 
 + 
 +Pri kreiranju novog projekta, stvoren je novi Activity koji prikazuje grafičko sučelje koje vidi korisnik pri pokretanju aplikacije. Potrebno je odabrati Empty Activity i dodijeliti mu naziv MainActivity. 
 + 
 +=== AndroidManifest.xml === 
 + 
 +Kako bi aplikacija ispravno radila potrebno je u datoteku AndroidManifest.xml dodati potrebne dozvole za korištenjem Bluetooth sučelja. 
 + 
 +<​code>​ 
 +<​uses-permission android:​name="​android.permission.BLUETOOTH"​ /> 
 +<​uses-permission android:​name="​android.permission.BLUETOOTH_ADMIN"​ /> 
 +</​code>​ 
 + 
 +Potrebno je i navesti sve Activity java razrede koji se koriste u aplikaciji. Korišteni su MainActivity , ProductInfoActivity i ProjectAboutActivity. 
 + 
 +Oznakom intent-filter daje se do znanja Androd OS-u koju Activity treba pokrenuti prilikom pokretanja aplikacije. U manifestu se još navode i korištene ikone. 
 + 
 +=== Struktura proizvoda === 
 + 
 +<​code>​ 
 +<?xml version="​1.0"​ encoding="​utf-8"?>​ 
 +<​manifest xmlns:​android="​http://​schemas.android.com/​apk/​res/​android"​ 
 +    package="​com.example.karlosiladi.bazapodataka">​ 
 + 
 +    <​uses-permission android:​name="​android.permission.BLUETOOTH_ADMIN"​ /> 
 +    <​uses-permission android:​name="​android.permission.BLUETOOTH"​ /> 
 + 
 +    <​application 
 +        android:​allowBackup="​true"​ 
 +        android:​icon="​@mipmap/​ic_launcher_spvp"​ 
 +        android:​label="​@string/​app_name"​ 
 +        android:​roundIcon="​@mipmap/​ic_launcher_spvp_round"​ 
 +        android:​supportsRtl="​true"​ 
 +        android:​theme="​@style/​AppTheme">​ 
 +        <​activity android:​name="​.ProductInfoActivity"​ /> 
 +        <​activity 
 +            android:​name="​.MainActivity"​ 
 +            android:​label="​@string/​title_activity_main"​ 
 +            android:​screenOrientation="​landscape"​ 
 +            android:​theme="​@style/​AppTheme.NoActionBar">​ 
 +            <​intent-filter>​ 
 +                <action android:​name="​android.intent.action.MAIN"​ /> 
 +                <​category android:​name="​android.intent.category.LAUNCHER"​ /> 
 +            </​intent-filter>​ 
 +        </​activity>​ 
 +        <​activity android:​name="​.ProjectAboutActivity"​ /> 
 +    </​application>​ 
 + 
 +</​manifest>​ 
 +</​code>​ 
 + 
 +=== Baza podataka === 
 + 
 +<​code>​ 
 +@Database(entities = {Products.class},​ version = 1, exportSchema = false) 
 +public abstract class ProductDatabase extends RoomDatabase { 
 + 
 +    private static final String DATABASE_NAME = "​products_db";​ 
 +    private static ProductDatabase INSTANCE; 
 +    public abstract DaoAccess daoAccess() ; 
 + 
 +    public static ProductDatabase getProductDatabase(Context context) { 
 +        if (INSTANCE == null) { 
 +            INSTANCE = 
 +                    Room.databaseBuilder(context.getApplicationContext(),​ ProductDatabase.class,​ DATABASE_NAME) 
 +                            .allowMainThreadQueries() 
 +                            .build(); 
 +        } 
 +        return INSTANCE; 
 +    } 
 + 
 +    public static void destroyInstance() { 
 +        INSTANCE = null; 
 +    } 
 +
 +</​code>​ 
 + 
 +=== Sučelje za slanje upita na bazu === 
 + 
 +<​code>​ 
 + ​public interface DaoAccess { 
 +    @Insert 
 +    void insertSingleProduct (Products product); 
 +    @Insert 
 +    void insertMultipleProducts (List<​Products>​ productsList);​ 
 +    @Query("​SELECT * FROM Products WHERE productId = :​productId"​) 
 +    Products fetchProductByProductId (String productId);​ 
 +    @Query("​SELECT * FROM Products"​) 
 +    List<​Products>​ getProducts();​ 
 +    @Update 
 +    void updateProduct (Products product); 
 +    @Delete 
 +    void deleteProduct (Products product); 
 +
 +</​code>​ 
 + 
 +=== Bluetooth handler i reprodukcija zapisa === 
 + 
 +<​code>​ 
 +        h = new Handler() { 
 +            public void handleMessage(android.os.Message msg) { 
 +                switch (msg.what) { 
 +                    case RECIEVE_MESSAGE:​ 
 +                        byte[] readBuf = (byte[]) msg.obj; 
 +                        String strIncom = new String(readBuf,​ 0, msg.arg1);​ 
 +                        sb.append(strIncom);​ 
 +                        int endOfLineIndex = sb.indexOf("​\r\n"​);​ 
 +                        if (endOfLineIndex>​ 0) { 
 +                            String sbprint = sb.substring(0,​ endOfLineIndex);​ 
 +                            sb.delete(0,​ sb.length());​ 
 +                            //​Toast.makeText(MainActivity.this,​ "From Arduino: " + sbprint, Toast.LENGTH_SHORT).show();​
  
-====== ​Plan projekta ======+                            if(mPlayer !null) { 
 +                                mPlayer.stop();​ 
 +                            } 
 +                            Products product ​db.daoAccess().fetchProductByProductId(sbprint);​ 
 +                            if(product ​== null){ 
 +                                Toast.makeText(MainActivity.this,​ "Ne postoji proizvod s ID: "+ sbprint +" u bazi proizvoda!",​ Toast.LENGTH_SHORT).show();​ 
 +                               // mPlayer ​MediaPlayer.create(MainActivity.this,​ R.raw.error_sound);​ 
 +                               // mPlayer.start();​ 
 +                                mPlayer ​MediaPlayer.create(MainActivity.this,​ R.raw.nemaubazi);​ 
 +                                mPlayer.start();​ 
 +                                productNameTextView.setText("​Skeniraj sljedeći proizvod..."​);​ 
 +                                productPriceTextView.setText(""​);​ 
 +                            } else { 
 +                                productNameTextView.setText(product.getProductName());​ 
 +                                productPriceTextView.setText(product.getProductPrice());​ 
 +                                String id product.getProductId();​ 
 +                                int res MainActivity.this.getResources().getIdentifier("​t"​+id,​ "​raw",​ MainActivity.this.getPackageName());​ 
 +                                if(res !0) { 
 +                                    mPlayer ​MediaPlayer.create(MainActivity.this,​ res); 
 +                                    mPlayer.start();​ 
 +                                } 
 +                            } 
 +                        } 
 +                        break; 
 +                } 
 +            }; 
 +        }; 
 +</​code>​
  
  
2018/karlo_siladi/projektni_zadatak.1528929462.txt.gz · Zadnja izmjena: 2023/06/19 18:10 (vanjsko uređivanje)