Search This Blog

Showing posts with label Netduino. Show all posts
Showing posts with label Netduino. Show all posts

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 

Monday, September 9, 2013

Communicate to Icomsat V1.1

hal pertama yang perlu diperhatikan dalam memulai komunikasi antara Netduino Board dengan GSMshield Icomsat v1.1 adalah :
1. Pastikan Jumper Pada modul terpasang pada D0 untuk Tx dan D1 untuk Rx (berlawanan dengan Rx/Tx pada  arduino board) agar komunikasi dapat terlaksana.
2. gunakan class serial communication utuk memanggil fungsi komunikasi dengan port UART pada Icomsat V1.1
3. Pastikan setting Port sebagai berikut
  • Port name : "Com1" - Com1 pada arduino adalah D0 dan D1 (Rx/Tx)
  • Baudrate : 9600 bps
  • Parity : None
  • databits : 8
  • Stopbits : One

4. Penting buat kita Untuk memanggil event handler sebelum membuka jalur komunikasi (port.open), agar arduino siap mendengarkan string dari Icomsat.

5. Berikut Cuplikan Code nya:(dalam Vb.net Language)

Imports System  
Imports System.Text  
Imports System.Threading  
Imports System.IO.Ports  
Imports Microsoft.VisualBasic.Constants  
Imports Microsoft.SPOT  
Imports Microsoft.SPOT.Hardware  
Imports SecretLabs.NETMF.Hardware  
Imports SecretLabs.NETMF.Hardware.NetduinoPlus  
   
 Namespace Uart  
   Public Class Com_UART  
     Private Shared GSM_UART As SerialPort  
     Private Shared OnboardLed As OutputPort  
     Private Shared DataIn As String  
     Public Shared Sub Main()  
       ' write your code here  
       OnboardLed = New OutputPort(Pins.ONBOARD_LED, False)  
       GSM_UART = New SerialPort("COM1", 9600, Parity.None, 8, StopBits.One)  
       AddHandler GSM_UART.DataReceived, New SerialDataReceivedEventHandler(AddressOf RecieveData)  
   
   
       If GSM_UART.IsOpen = False Then  
   
         GSM_UART.Open()  
         Debug.Print("Port Opening" & " : at baudRate= " & GSM_UART.BaudRate)  
       Else  
         Debug.Print("Port is ready...")  
       End If  
   
       Thread.Sleep(1000)  
   
       Dim bytesTosend As Byte() = Encoding.UTF8.GetBytes("AT+CMGF=1" & vbCr)  
       Debug.Print("Send port : AT+CMGF=1")  
       GSM_UART.Write(bytesTosend, 0, bytesTosend.Length)  
       Debug.Print("Port is writing...")  
   
       Thread.Sleep(Timeout.Infinite)  
     End Sub  
     Private Shared Sub RecieveData(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)  
       Dim Length As Integer = GSM_UART.BytesToRead  
       Dim bufferData As Byte() = New Byte(Length - 1) {}  
       GSM_UART.Read(bufferData, 0, Length)  
       DataIn += New String(Encoding.UTF8.GetChars(bufferData))  
   
       If DataIn.IndexOf(vbLf) >= 0 Then  
         Debug.Print("Command: " & DataIn)  
         DataIn = DataIn.Trim()     ' Get rid of the line feed  
         If DataIn <> "" Then  
           OnboardLed.Write(state:=True)  
           Debug.Print(DataIn)  
         End If  
   
         If DataIn = "" Then  
           OnboardLed.Write(state:=False)  
           Debug.Print("Command should be Cleared :" & DataIn)  
         End If  
         ' Clear the string for the next transmission  
       DataIn=""  
       End If  
     End Sub  
   End Class  
 End Namespace   

Monday, September 2, 2013

Mendefinisikan Sinyal pada Analog dan Digital input

Analog Read pada Netduino

Dalam mentejermahkan sinyal analog pada pin A0 di netduino kita bisa merujuk pada forum berikut :

Analog Input Read C#.Net

Download disini untuk class yang saya gunakan.
pada forum tersebut, output yang dihasilkan pada jendela debug adalah sebagai berikut

Raw Value: 940  ; Volts: 3.02929688
Averaged Value: 912    ; Averaged Volts: 2.93906236

Raw Value: 913  ; Volts: 2.94228506
Averaged Value: 920    ; Averaged Volts: 2.96484375

Raw Value: 884  ; Volts: 2.84882808
Averaged Value: 902    ; Averaged Volts: 2.90683579


Hasil di atas merupakan output yang tidak diharapkan, karena input yang diberikan pada Pin A0 adalah ==0, sementara pada jendela debug tertulis seperti diatas. Solusi untuk problem ini adalah dengan menambahkan Pull Down sebesar 100ohm - 1kohm untuk mendapatkan hasil yang sesuai (input 0v, output 0v).

Notes:
1. Analog Input pada Netduino+ memiliki limitasi 10 bit dengan max input voltage 3.3V. artinya bahwa pada chip ADC 10 bit memiliki nilai byte 2^10 = 1024 segmen dangan kapasitas reference 3300mv. dengan begitu kita dapat mengetahui bahwa resolusi pengukuran voltage pada netduino adalah 3300/1024 = 3.223mV ( volts per counts).

2. Analog input pada netduino tidak dapat menerima voltage lebih dari ~3.5V, berpotensi merusak ADC chip pada netduino ketika kita memaksakan arus lebih dari batas maximum nya. untuk itu perlu menambahkan R seri (pada kasus ini saya menggunakan 1 Kohm)pada input nya untuk membatasi jumlah arus yang masuk. untuk menghindari loncatan voltage (incase user tidak sengaja memberikan input analog lebih dari batas nya) yang berpotensi merusak sebaiknya menambahkan Dioda Zener antara Input analog dan Gnd.

3. Analog Read pada netduino memiliki noise sebesar 0.3mv - 0.6 mv. Belum ada solusi untuk menyelesaikan masalah ini. Patut untuk di coba, beberapa literatur mengenai reduksi noise signal analog mengatakan ada 3 kunci utama untuk dapat mereduksi noise pada suatu sinyal yaitu : Power Supply, Grounding dan Pengkabelan yang benar.

4. Saya mendeteksi ada nya cross talk pada netduino A4/A5 ketika digunakan sebagai SDA/SCL I2C device (dalam hal ini saya menggunakan RTC). CrossTalk terjadi antara pin tersebut dengan pin Analog lainnya (A0 - A3). dan menurut saya ini termasuk kedalam dynamic cross talk. ada beberapa literatur yang dapat menjelaskan bagaimana mengatasi hal ini.


Cheers,

semoga bermanfaat.

Sunday, September 1, 2013

Membuat Data Logger Untuk Pengembangan Stasiun Cuaca Otomatis Menggunakan Netduino+

Latar Belakang
Stasiun Cuaca Otomatis atau lebih dikenal dengan sebutan AWS (Automatic Weather Station) sudah banyak dikembangkan oleh negara - negara maju. Produsen AWS sangatlah banyak dan tersebar diseluruh dunia, salah satu produsen AWS yang terkenal saat ini adalah AWS dari GlobalWater.

Pada dasarnya hampir seluruh jenis AWS yang dibuat oleh para produsen ini memiliki prinsip kerja dan teknologi yang serupa. Prinsip kerjanya pun sangat mudah untuk dipahami. Mengingat pentingnya peran AWS dalam mengumpulkan data cuaca atau iklim dalam berbagai kegunaan dan fungsinya, pasar AWS di Indonesia cukup menjanjikan untuk digandrungi. Sangat disayangkan, AWS yang digunakan di Indonesia didominasi oleh produsen asal luar Indonesia. Hal inilah yang mendorong kami untuk mempelajari dan mengembangkan AWS.

Bagian utama dari sebuah AWS adalah data logger nya, dimana sebuah data logger berperan sebagai pengumpul, pengolah dan penyimpanan data. Tidak sedikit data logger yang memiliki fitur jaringan GSM/GPRS sehingga memungkinkan untuk mengirim dan menyimpan data secara online (tellemetry system).

Data Centre BMKG
BMKG baru - baru ini menyiapkan data centre untuk memusatkan pengumpulan data cuaca yang tersebar di seluruh Indonesia pada satu lokasi. tentunya keputusan ini membuat BMKG selangkah lebih baik dalam pengelolaan dan analisis data yang mereka miliki.

NetDuino+

Netduino adalah salah satu mikrokontroler yang cukup tangguh untuk digunakan sebagai processing unit bagi sebuah AWS. untuk memanfaatkan Netduino+ sebagai DataLogger AWS, hal - hal yang perlu dilakukan adalah mempelajari dasar2 pemograman dan elektronika. kerangka pemograman yang perlu dibangun adalah sebagai berikut:
1. Mendefinisikan Sinyal pada Analog dan Digital input
2. Medefinisikan sinyal RTC (real time clock) untuk dimanfaatkan sebagai pengolah variable waktu.
3. Merekam data kedalam MicroSD
4. Mengolah data menjadi Output kedalam Modul GSM agar dapat ditransmisikan dalam bentuk SMS ke DataCentre. (ini bagian yang paling menantang ^^).

Untuk Elektronika nya, yang perlu disiapkan adalah:
1. Sensor Analog (Suhu, Kelembaban, Tekanan udara dan Radiasi Matahari)
2. Sensor Digital (Curah Hujan, Kecepatan Angin dan Arah Angin)
3. Karena Input Analog pada Netduino sangat terbatas maka perlu dibuat rangkain yang berfungsi sebagai switching input (disini kita gunakan IC 4017)
4. ... akan terus berkembang seiring masalah yang akan kita temui selama riset...


Kenapa Netduino?

1. Netduino Merupakan mikrokontroler yang memiliki fitur paling lengkap (LAN, MicroSDcard, UART port, GPIO)
2. Support 2 bahasa pemrogrman (C# dan Vb.Net), ini yang paling penting karena editor programnya menggunakan VisualStudio .Net sehingga dalam pengembangan nya sangat terbantu dengan fitur2 yang diunggulkan dalam VS.Net.
3. Support hampir semua modul yang biasa dirilis untuk board Arduino, hal ini memudahkan kita untuk mengembangkan apapun dengan sluruh modul yang ada di Arduino.
4. ekonomis