Search This Blog

Monday, May 26, 2014

Icomsat v1.1 Update on C#

pada posting blogger sebelumnya, komunikasi netduino dan icomsat masih dalam bentuk Vb. nah kali ini kita adaptasikan dari driver yang di rilis oleh SeedStudio. dengan sedikit modifikasi pada driver ini, hampir semua fitur dalam GSM communication bisa dilakukan.

berikut ini adalah class untuk GSM icomsat yang sudah disesuaikan. Click Here

yuk kita diskusi sedikit mengenai bagaimana class ini bekerja dan digunakan. dibawah ini adalah class diagram yang digunakan pada Data logger yang dibangun pada peneletian sebelumnya (mau baca jurnal  nya click here). mari kita fokus pada class GSM_modem. method yang biasa dipakai adalah layanan mengirim SMS, baca, hapus, dan menerima panggilan dan memutuskannya. semua hal tersebut akan lebih mudah ketika kita sudah terbiasa dengan AT Command yang digunakan dalam komunikasi serial antara icomsat v1.1 dan Netduino. Tips: Jangan pusingkan diri kita dengan fitur yang tidak kita gunakan.

perlu dicatat bahwa Pada Icomsat V1.1 pin 8 dan 9 merupakan pin yang dapat mengakses tombol Reset dan Power pada modul tersebut. (baca datasheet) so pastikan dalam software yang dibangun, pin ini tidak digunakan oleh apapun, karena biasanya menjadi penyebab GSM tidak bisa menyala. untuk dapat menggunakan Class ini deklarasikan ia sebagai objek pada software kita.

private static GSM_modem modem = new GSM_modem();

dalam tanda kurung bisa diisi untuk keperluan individu, namun untuk default setting biarkan ia kosong.

selanjutnya untuk mengetahui apakah GSM tersebut sudah dapat menerima command dari netduino kita bisa lakukan method.

modem.ATnF(); jika di respon "OK" maka kelas dan modul sudah siap untuk kita gunakan.

metod Hit Power Button ini diperlukan untuk mematikan dan menghidupkan modem melalui system. begitu juga dengan Hit Resetbtn.

pengembangan berikutnya adalah membuat method untuk dapat berkomunikasi melalui jaringan Internet.

semoga bermanfaat



Thursday, February 6, 2014

RTC pada Netduino+

Real Time Clock

RTC merupakan salah satu I2C device, RTC membantu Netduino untuk mendapat set waktu yang sesuai bahkan sampai ke resolusi millisecond. RTC memilki sumber catu daya yang berbeda dari Netduino sehingga set waktu tidak akan bergeser apabila Netduino dalam keadaan mati. Netduino tidak memiliki internal RTC, karena itulah setiap Netduino di reset maka waktu akan menunjukkan tanggal yang tidak sesuai atau kembali pada factory default -nya. 

kali ini saya menggunakan RTC DS1307 buatan iteadstudio (RTC v1.1). cukup mudah untuk di implementasikan kedalam netduino. tapi sebelum nya catatan nya adalah, pada RTC tersebut Resistor pada pin SDA dan SCL di pull up langsung ke catu daya 5V dari Netduino, hal ini tidak menjadi masalah apabila kita tidak menggunakan pin Analog input untuk melakukan pengukuran. namun apabila kita hendak menggunakan pin tersebut sebagai input analog, maka kita perlu sedikit merubah posisi pull up tersebut ke 3V. hal ini dapat dilakukan dengan memotong Jalur pada bagian belakang RTC yang menghubungkan catu daya 5V ke serangkaian resister tersebut dan menambahkan satu kabel yang terpisah untuk menyambungkannya pada catu daya 3.3v pada netduino. saya mendapatkan catatan ketika pin SDA dan SCL yang du pull up ke catu daya 5v maka analog read akan mendapatkan nilai yang jauh dari nilai sebenarnya. meskipun secara elektronik netduino akan memutuskan A4 dan A5 dari ADC chip ketika kita mendeklarasikannya sebagai I2C devices.

baik, sampai di sini mari kita lihat bagaimana menset up RTC pada Netduino Plus.
1. Secara fisik set up kabel seperti  di bawah ini:
   SDA -> Analog Pin 4
    SCL -> Analog Pin 5
    GND -> GND
    5V  -> 5V
    Pull Up Resistor ->3.3v (pull resistor di sini sebesar 4.7k)

2. Download Project nya di sini .
3. Untuk pertama kali menjalankan RTC, ubah sedikit code dibawah ini pada bagian main program.


 // TODO: Do this only once to set your 
 //clock.SetClock(14, 2, 4, 10, 40, 0, DayOfWeek.Sunday); //set sesuai dengan waktu upload sketch.
 // tahun, bulan, tanggal, jam, menit, detik

4. setelah upload sketch, nonaktifkan kembali code tersebut dan upload sekali lagi. hal ini perlu dilakukan agar waktu tidak berubah ketika netduino di reset.

5. panggil waktu yang sudah di setup menggunakan DateTime.Now(Format waktu nya). contoh:

Debug.Print("The time is: " + DateTime.Now.ToString("HH:mm:ss"));
Debug.Print(DateTime.Today.Date.ToString("dd/mm/yyyy")) 

tadaaaa.... selesai.... kita bisa memanggil method DateTime.now kapan pun dan sudah sync dengan DS1307 yang kita tambahkan.
kita bisa membuat format waktu sesuai dengan keinginan kita dengan memanggil method tersebut seperti ini

DateTime.now.today // return value : int tanggal hari ini (misal: 7)
DateTime.now.Hour // return value : int jam saat ini (misal: 22)
DateTime.now.millisecond // return value : int millisecond


selamat mencoba. jika perlu penjelasan lebih silahkan ditanyakan.

Cheers

SD card Log With Netduino

Untuk Netduino slot SD card sudah tersedia dan memiliki fitur autodetect. So, kita tidak perlu membeli shield khusus untuk merekam data. karena factory set nya sudah termasuk SDcard maka dalam programming nya pun menjadi mudah karena library nya ada termasuk kedalam .NetFramework (saya menggunakan versi .NetMF4.2)

Kali ini saya akan berbagi sedikit mengenai bagaimana menggunakan library tersebut. Disini saya menggunakan bahasa pemrograman C#. Class yang digunakan untuk mengendalikan SDcard pada Netduino terdapat pada Namespace System.IO, jadi sebelum memulai project nya sebaiknya tambahkan class tersebut kedalam project reference nya. Untuk mempermudah proses input data saya lebih memilih untuk membuat class baru yang ready to use. Class diagram untuk class SDcard sebagai berikut.

SD card Class For Netduino compatible with .NetMF 4.0 above
untuk code Lengkap nya download di sini. 

Saya akan ulas sedikit bagaimana untuk menggunakannya.
Pertama, yang perlu di ingat adalah bahwa code tersebut adalah sebuah Class, jadi tentu perlu dibuat satu objek untuk dapat menggunakannya pada main program. dibawah ini contoh create objek dari class tersebut.
private static DataStorage _store = new DataStorage();

setelah membuat objek nya kita bisa menggunakan method dari class dengan memanggil objek yang telah kita buat tadi. Dapat diliah dari diagram class di atas terdapat field, properties dan method. Sebaiknya kita fokus pada bagian Public Method dan Properties saja.

sebelum menulis kedalam SDcard hal pertama yang kita lakukan adalah mengisi property NameFile dan PathFile. Misal:

_store.PathFile = "Folder";
_store.NameFile = "Test"; //extensi pada NameFile akan berupa Csv. silahkan di edit sesuai kebutuhan.

kemudian, kita bisa mengisi file tesebut dengan memasukkan nilai kedalam property ContentFile

contoh:
_store.ContentFile = _hour + "," + (analogIn.miliVolts / 10).ToString("F1"));

ok. dengan begitu kita sudah menuliskan kedalam SD card dengan alamat @SD\Folder\Test.csv

catatan:
1. Class ini secara otomatis membuat Direktori "Folder" dan nama file "test" apabila tidak ditemukan.
2. Anda bisa menambahkan subdirectory pada pathfile dengan cara menambahkan class berikut :

        
public bool CheckPath(string rootDir, string YDir, string MDir)
 {                 
     try
     {
         Again:
         if (!Directory.Exists(@"\SD\" + rootDir))
         {
             Directory.CreateDirectory(@"\SD\" + rootDir);
             Thread.Sleep(150);
            
             goto Again;
         }
          else if (!Directory.Exists(@"\SD\" + rootDir + Path.DirectorySeparatorChar + YDir)) 
         {
             Directory.CreateDirectory(@"\SD\" + rootDir + Path.DirectorySeparatorChar + YDir);
             Thread.Sleep(150);
             goto Again;
         }
          else if (!Directory.Exists(@"\SD\" + rootDir + Path.DirectorySeparatorChar 
    + YDir + Path.DirectorySeparatorChar + MDir))
         {
             Directory.CreateDirectory(@"\SD\" + rootDir + Path.DirectorySeparatorChar 
    + YDir + Path.DirectorySeparatorChar + MDir);
             Thread.Sleep(150);
             goto Again;
         }
          else
         {
             _mypath = rootDir + Path.DirectorySeparatorChar + YDir + Path.DirectorySeparatorChar + MDir;
             return true;
         }                
     }
     catch (Exception ex)
     {
         myLcd.SetCursorPosition(0, 1);
         myLcd.Write(ex.Message);
         Debug.Print(ex.Message);
         return (false);
     }
}
lalu gunakan variable string _mypath pada class tersebut sebagai PathFile
 _store.PathFile = _namePath