Kamis, 09 Januari 2014

1

[Our Project] Monitoring Suhu Ruangan Server Dengan Dua Telelemetry - Web & SMS

  • Kamis, 09 Januari 2014
  • Nurkholish Ardi Firdaus
  • Yah nama ya juga anak kost, bikin tugas akhirnya ya dengan harga yang seminimal mungkin. Bermodalkan GSM modul berupa hape jadul (SE K500) sebagai telemetry SMS nya, ya kita mempunyai konsekuensinya dengan bermain format PDU yang mengharuskan kita mengkodekan berbagai perintah AT kedalam format data PDU, maklum terlalu manja kebiasaan pakai text mode pake modem GSM wavecomm. Nah telemetry ke web nya adalah pertama-tama data suhu dikirim melalui modem RF ke komputer logger yang jaraknya tidak jauh jauh amat. Modul RF kita pakai module KYL-400U minjem *muke miskin*.Antarmuka modem RF berupa serial USART biasa dengan baud 9600. "The Hero" dalam sistem ini adalah ATmega32 dimana dengan keterbatasannya hanya memiliki 1 pheripheral USART, dipaksa untuk mencabangkan RX/TX nya menggunakan IC switching 4066 (Quad bilateral Switch). Sebenernya sih ada MCU dengan 2 buah USART yaitu atmega162 namun melihat keterbatasannya tdk mempunyai ADC dan stoknya yang jarang-jarang tersedia di pasaran maka kita memutuskan pakai mega32 saja. Saya paling miris melihat K500 nya karena hape ini di bedal-bedel sedemikian rupa agar memenuhi kebutuhan sistem, mengingat hape ini di jaman saya SMP masih tergolong hape konglomerat. Tanpa menggunakan baterai, K500 ini di solder langsung dengan 5 volt (melihat baterai HP sebenarnya adalah 3.7volt) aaasssuuudahlah,toh normal-normal saja bisa nyala gitu hapenya, nah tahapan selanjutnya adalah mencari pin RX/TX pada k500 ini.. uhmmmm konon sih ada di pin 4 (RX) dan 5 (TX) jika di lihat dari berbagai referensi di internet nampaknya pin 4 dan 5 di rahasiakan fungsinya jadi kayak rahasia perusahaan gitu, tapi namanya juga engineer (kalo kita engineer pekok *teplok jidat*) pasti bisa bisa aja ngakalin, nah begini pinout nya:




    dan begini tabel fungsi dari setiap pin nya


    nah loh benerkan pin 4 sama 5 ga ditulis dasar huh nyebelin masih d rahasiain... pin 4 dan 5 ada di sebelah kanan pin 3 ya.. data in (RX) data out (TX) oh i see *muke jahat*.. Nah kalo secara manusiawi sih seharusnya kita beli ya kabel data gitu baru kabel datanya kita colokin hape, trus kabel datanya kita potong buat ngambil jalur RX/TX nya... asssuuudahlah we dont give any single shit about it... maka langsung solder aja deh tuh hape tepat d jalur RX/TX nya *muke jahat*. Belum puas men-dzalimi tuh hape kita berpikir, gimana kalo mati lampu? nanti hapenya juga mati dong sedangkan ketika listrik nyala kembali hape belum bisa nyala secara otomatis mengingat harus kita pencet dulu tombol powernya. Ah gampang saja kita solder saja switch power hape tersebut ke ground *muke jahat* jadilah kita mempermak hape jadul itu menjadi module GSM handal untuk SMS gateway. Eh iya lupa, pinout diatas berlaku untuk Hape SE: K300i, K700, K700i, S700, S700i, F500, F500i, K500, K500i, T610, T616, T630, Z600, P900, P908, T226, T226s, T230, T238, T200, T202, T310, T312, T316, T300, T302, T306, P800, P802, T39m, T39mc, R520, R520m, R520mc, T65s, T66, T62u, T68i, T68m, T68mc, T68ie, z1010, T100, T102, T105, T106, T66, T600, R600, R600s, R600sc, A3618, T610, T628, T616, T616, T630, Z200, Z600, Z608


    Referensinya dari sini: http://pinouts.ru/CellularPhones-P-W/erics_t28_pinout.shtml

    Sensor suhunya sih pakai LM35 biasa saja yang murah, baru deh kalo semisal ada pihak yang membutuhkannya masal kita bisa pakai SHT gitu amin. Nah cape deh aku njelasinnya gini nih diagram sistemnya: 





    Begini juga skematik hardwarenya:




    Nah ini penampakan alat nya yang sudah jadi namun belom di program:


    Sebenernya masih banyak yang belum di jelasin seperti end user interface nya yaitu yang beruoa web, namun itu bagian temen ane Roziq ya sudahlah juga mungkin penjelasannya masih kurang jelas cuma sekedar ngeromed saja smoga membantu teman-teman yang lagi mencari referensi dalam membuat tugas akhir. Salam engineer!

    Jumat, 20 Januari 2012

    1

    [C] Program Konversi Bilangan Biner ke Desimal

  • Jumat, 20 Januari 2012
  • Nurkholish Ardi Firdaus
  • Ketika saya mempelajari tentang bab "Representasi Data" dalam buku pembelajaran bahasa assembly untuk x86 proccessor terdapat tantangan bagi pembaca untuk membuat program konversi bilangan biner kedalam representasi bilangan bulatnya dalam bahasa C untuk mengetes pemahaman para pembaca dalam memahami konsepnya. Ini memang buku yang sangat menarik untuk dibaca, yaitu "Assembly Language for x86 Processors 6th Edition", anda harus membacanya! ;). Berikut adalah source codenya menurut pemahaman saya sendiri. Hope u enjoy it! :)





    ////////////////////////////////////////////////////////////////////////////////
    ///                       UNIVERSITAS NEGERI SEMARANG                        ///
    ///                             Fakultas Teknik                              ///
    ///                         Jurusan Teknik Elektro                           ///
    ///                Pendidikan Teknik Informatika dan Komputer                ///
    ///                     coded by Nurkholish Ardi Firdaus                     ///
    ////////////////////////////////////////////////////////////////////////////////
    //
    // Program Name: Representasi Bilangan Biner Kedalam Bilangan Bulat
    // Reference   : [ebook] Assembly Language for x86 Processors 6th Edition
    //
    ////////////////////////////////////////////////////////////////////////////////
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    
    int main()
    {
        //////////////////////////////////////////
        //                                      //
        // Jika Unsigned, dimulai dari MSB      //
        //                                      //
        //////////////////////////////////////////
        const   int Most_Significant_Bit = 0;
        //////////////////////////////////////////
        //                                      //
        // Jika Signed, dimulai dari LSB        //
        //                                      //
        //////////////////////////////////////////
        const   int Least_Significant_Bit = 63;
        //////////////////////////////////////////
    
        int     i;
        int     bin[64] = {0};
        char    user_bin[64] = {'0'};
        char    *pC;
        int     begin;
        int     step;
    
        long long result = 0;
    
        printf("Masukkan Angka Biner: ");
        scanf("%64s",user_bin);              //64-bit: batas Quadword
        pC = user_bin + strlen(user_bin) - 1;
        // mencopy data biner bertipe char dari user kedalam array integer
        for (i=Least_Significant_Bit; i>=0; i--) {
            if (pC[0] == '0') break;
            if (pC[0] == '1') bin[i] = 1;
            pC--;
        }
    
        if (bin[Most_Significant_Bit] == 1) {  // if signed
            begin = Most_Significant_Bit;
            step = 1;
        }
        else {
            begin = Least_Significant_Bit;
            step = -1;
        }
    
        if (step == 1) {   // if signed
            result = -(unsigned long long) pow((double) 2, (double)63);
            for (i=begin+1; i<=Least_Significant_Bit; i += step) {
                if (bin[i] == 1) {
                    result += (unsigned long long) pow((double) 2, (double)abs(i-63));
                }
            }
        }
        else {
            result = 0;
            for (i=begin; i>=Most_Significant_Bit; i += step) {
                if (bin[i] == 1) {
                    result += (unsigned long long) pow((double) 2, (double)abs(i-63));
                }
            }
        }
    
        printf("%s","\nRepresentasi Angka Bulat dari \n");
        for (i=0; i<=63; i++) {
            if ((i % 4) == 0) putchar(' ');
            if ((i % 32) == 0) putchar('\n');
            printf("%d",bin[i]);
        }
        printf("nnAdalah: %lldn",result);
        return 0;
    }

    Senin, 07 November 2011

    0

    [C] Teknik Membaca Satu Baris String Secara Keseluruhan

  • Senin, 07 November 2011
  • Nurkholish Ardi Firdaus
  • Dalam bahasa C, scanf() merupakan fungsi yang bisa kita gunakan untuk meminta input dari user yang selanjutnya data input tadi akan kita olah secara lebih lanjut dalam progran kita. Data bisa berupa angka maupun karakter, kita bisa memanggil fungsi scanf() seperti ini: scanf("%s",array_char);  jika kita meminta user untuk mengimput data berupa kata. Namun ketika datanya berupa kalimat yang dipisahkan oleh spasi maka scanf() hanya akan membaca 1 kata pertama sebelum spasi, sebut saja user memasukkan input kata berupa "Aku Seorang Kapiten", maka scanf() hanya akan membaca kata "Aku" sedangkan sisanya akan diabaikan. Ini sesuai konsep bahwa dalam bahasa C, whitespace (spasi) adalah penanda akhir inputan. Jadi kita terkendala dengan karakter spasinya yang oleh compiler dibaca sebagai akhir kata. Lalu bagaimana solusinya? Banyak sekali solusi yang bisa kita gunakkan, salah satunya adalah menggunakan ekspresi reguler (regular expression), sintaks pemanggilan fungsi scanf() menjadi seperti ini: scanf("%[^\n]s",array_char); arti dari panggilan fungsi scanf() ini menjadi: "Baca semua karakter kecuali \n" dimana "\n" adalah salah satu backslash character constant yang artinya adalah newline (garis baru), jadi arti keseluruhannya adalah "Baca semua karakter hingga baris baru tercipta", baris baru tercipta ketika user menekan enter yang berarti berganti baris ("\n"). Marilah kita praktikkan secara langsung lewat source code dibawah ini:


    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char nama_lengkap[50];
        scanf("%50[^n]s",nama_lengkap);
        printf("Nama Lengap Anda: %-50s",nama_lengkap);
    }
    Oke, sekian postingan kali ini. Semoga bermanfaat :)
    0

    [C] Membuat Program Segitiga

  • Nurkholish Ardi Firdaus
  • Oke, lama tidak posting. Kali ini saya akan berbagi source code yang menampilkan segitiga yang tersusun dari suatu karakter. Source code ini saya tulis dalam bahasa C. Oke cekidot...









    /*
        UNIVERSITAS NEGERI SEMARANG
        NAMA: NURKHOLISH ARDI FIRDAUS
        NIM : 5302411244
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    void prism(int line, const char *chr);
    
    int main()
    {
        printf("#################################n");
        printf("## UNIVERSITAS NEGERI SEMARANG ##n");
        printf("##   Nurkholish Ardi Firdaus   ##n");
        printf("##         5302411244          ##n");
        printf("##      Mengambar Prisma       ##n");
        printf("#################################n");
    
        prism(15,"+");
    
        return 0;
    }
    
    void prism(int line, const char *chr)
    {
        if (!(line % 2 == 0)) {   //lantai harus bilangan ganjil
            int prism_floor, draw_space, draw_char;
            for (prism_floor=1;prism_floor<=line;prism_floor++) {
                //cetak spasi sesuai dg baris (jika baris 1 maka cetak spasi (line-1) kali
                for (draw_space=line-1;draw_space>=prism_floor;draw_space--) printf(" ");
                for (draw_char=1;draw_char<=prism_floor;draw_char++) {  // Jika lantai 1, cetak 2 char, lantai 2 cetak 4 char
                    printf(chr);    // cetak 2x
                    printf(chr);}   //
                printf("n");  //newline
            }
        }
    }
    
    Sebenarnya masih ada kekurangan dalam program ini, apakah anda bisa melihat apa kekurangannya?? Ya, benar. Sisi atas segitiga tidak lancip melainkan tumpul karena terdiri dari 2 karakter. Mugkin anda bisa memodifikasinya, kuncinya adalah penempatan karakter output pada terminal. Semoga bermanfaat :).

    Minggu, 02 Oktober 2011

    1

    [C/C++] Program Penghitung Faktorial

  • Minggu, 02 Oktober 2011
  • Nurkholish Ardi Firdaus
  • Kali ini saya iseng membuat program penghitung faktorial menggunakan C++. Tujuan dari keisengan saya ini adalah saya ingin tahu apakah C++ mendukung metode panggilan fungsi secara rekursif. Eh ternyata bisa... Mari kita tenggok source code nya..










    #include <iostream>
    
    using namespace std;
    
    double fact(double n);
    
    int main()
    {
        int n;
        cout << "###################################n";
        cout << "### UNIVERSITAS NEGERI SEMARANG ###n";
        cout << "###       Factorial Solver      ###n";
        cout << "###   Nurkholish Ardi Firdaus   ###n";
        cout << "###################################n";
    
        cout << "Masukkan angka: ";
        cin >>  n;
        cout << "n";
        cout << n << "!=";
        cout << fact(n) << endl;
        return 0;
    }
    
    double fact(double n)
    {
        if (n>1) return n*fact(n-1);
        else return 1;
    }

    Subscribe