"Kembali Ke Dasar Elektronika Digital ... "

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Animasi LED Dengan IC 4017

    IC 4017 adalah IC 16-pin CMOS dekade counter dari seri IC CMOS 4000. Sangat berguna jika ingin membuat animasi lampu atau LED secara sederhana seperti led berjalan, tulisan berjalan , counter/timer dan masih banyak kegunaan lainnya

  • Bermain DOT Matrix - LOVEHURT

    Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • BIKIN PCB SEDERHANA TAPI GA MURAHAN

    Bikin PCB itu ga susah kok..dengan software EAGLE CAD dan teknik sterika kamu dapat membuat PCB untuk berbagai project elektronika mu ...

Rabu, 22 Juli 2020

Cara Mudah Belajar MODBUS - Komunikasi Industri Jaman dulu [part 4] Arduino MQTT Bridge




Setelah berhasil memposisikan arduino menjadi modbus master, kita akan butuh sedikit usaha lagi untuk melengkapi piramida IOT nya. Untuk itu perlu penggabungan dari beberapa tulisan sebelumnya yaitu dasar MQTT pada ESP8266 disini dengan tulisan seri modbus part 3 disini. Ada dua mode mqtt yang ingin saya gunakan yaitu mode request-reply dan mode periodic. Perhatikan rangkaian dasar yang telah kita bahas sebelumnya.


Skematik arduino mqtt bridge


Dengan asumsi pembaca telah memahami pembahasan sebelumnya, mode request-reply memiliki 5 type perintah yang akan dikirim ke perangkat modbus dan jika di tuliskan dalam script seperti berikut  :


if (Serial.available() > 0) { //perintah dari serial port monitor/putty
    // read the incoming byte:
    incomingByte = Serial.read();

    if (incomingByte == '1') {  //toggle led mati hidup
       if (!led) mod.write(ledOn, sizeof(ledOn)); //modbus led on
       else mod.write(ledOff, sizeof(ledOff)); //modbus led off

       led=!led;
      }
    else if (incomingByte == '2')  mod.write(tombol, sizeof(tombol));  //cek tombol
    else if (incomingByte == '3')  mod.write(humitemp, sizeof(humitemp)); //baca dht11
    else if (incomingByte == '4')  mod.write(aisi, sizeof(aisi)); //baca holding register

    }
Pada script diatas merupakan perintah atau request yang dikirimkan oleh Terminal Serial semisal putty atau serial monitor sketch arduino dimana terjemahan perintah nya seperti berikut :

  • '1'  : Togle led On atau Off
  • '2'  : Baca penekanan tombol
  • '3'  : Baca sensor DHT11
  • '4'  : Baca Holding Register

Kita dapat  merubah request dari terminal serial menjadi perintah yg  dikirim melalui SUBSCRIBE TOPIK  MQTT,  jadi esp8266 akan menunggu apakah ada request dari server/broker yang masuk dan membandingkan isi payloadnya sesuai script berikut :

void mqtt_callback(char* topic, byte* payload, unsigned int length) {
 
  Serial.print("Message arrived in topic: ");
  Serial.println(topic);
 
  Serial.print("Message:");
 
  String message;
  for (int i = 0; i < length; i++) {
    message = message + (char)payload[i];  //Convert *byte to String
  }
   Serial.print(message);
   if(message == "1"){  //bandingkan payload yang masuk dan kirim modbus
       if (!led) mod.write(ledOn, sizeof(ledOn));
       else mod.write(ledOff, sizeof(ledOff));

       led=!led;
      }
   if(message == "2")mod.write(tombol, sizeof(tombol));
   if(message == "3")mod.write(humitemp, sizeof(humitemp));
   if(message == "4")mod.write(aisi, sizeof(aisi));


 }
Untuk memahaminya tidaklah begitu sulit jika anda rajin membaca blog ini dari seri tulisan mengenai mqtt yang sering saya bahas sebelumnya. 

Setelah modbus me-reply request maka esp8266 akan membandingkan reply modbus dan selanjutnya melakukan PUBLISH MQTT ke topik yang telah ditentukan ke broker mqtt. Anda juga bisa menggunakan Smartphone dengan aplikasi IOT MQTT PANEL untuk menerima data yang di PUBLISH oleh bridge mqtt esp8266 dan tentunya juga bisa mengirimkan perintah/request ke modbus.




Untuk mode periodic cukup menambahkan timer pada loop utama yang akan mengirimkan perintah modbus untuk pengecekan tombol dan pembacaan DHT11 setiap jeda waktu tertentu. Selengkapnya ikuti penjelasan pada video berikut ini :



Share:

Cara Mudah Belajar MODBUS - Komunikasi Industri Jaman dulu [part 3] Arduino Sebagai Modbus Master



Dalam sebuah piramida Internet Of Things, bagi developer kelas rumahan seperti penulis yang tukang solder ini, ruang geraknya terbatas pada 2  tingkat  yaitu piramida paling bawah pembacaan sensor via microcontroller dan piramida paling atas pada tampilan hasil IOT melalui grafik web dan apps smartphone. Level priramida "connectivity" umumnya merupakan posisi yang hanya bisa dikerjakan oleh dunia telekomunikasi sedangkan level "platforms" merupakan ranah para raksasa IT. 

Standar komunikasi MODBUS bisa digambarkan berada pada perbatasan piramida 1 dan 2 dimana para pengembang modbus mulai mengeluarkan standar modbus TCP untuk meng-akomodir standar jaman now yang serba IP. Lalu alat berbasis modbus yang masih menggunakan standar serial com membutuhkan sebuah bridge IOT yang akan membuat loncatan dari piramida 1 ke piramida 3. Tulisan saya serial pembahasan modbus yang ke-3 dan selanjutnya akan membahas perancangan dan praktek arduino sebagai bridge MQTT sederhana yang akan menghubungkan modbus ke dalam piramida IOT.


Jika anda memerlukan sensor suhu kelembaban standar modbus untuk industri yang harganya terjangkau maka gambar diatas merupakan salah satu pilihan. Diperlukan pembacaan datasheet atau manual yang didapat dari produsennya yang merupakan ciri khas dari alat ber-Protokol modbus. Tiap desainer alat menggunakan alamat register bebas dimanapun sesuai pemahaman mereka begitu juga pemetaan data yang dikirim seperti apa prosedurnya dilakukan tanpa pola yang seragam antar alat yang berbeda. Seperti biasa saya lebih suka menjelaskan dengan praktek langsung dimana kali ini saya berusaha menduplikasi alat SHT20 modbus diatas dengan menggunakan sensor sejuta umat DHT11.



Langkah awal yang perlu diperhatikan adalah mengukur kemampuan microcontoller arduino sebagai bridge IOT dengan memposisikannya sebagai modbus master dan hasilnya penulis beberapa kali kesulitan untuk memperoleh library modbus master yang sesuai dengan keinginan. Ini dikarenakan ternyata akibat saking banyaknya standar yang harus diakomodir maka lebih mudah untuk membuat bridge sesuai dengan karakteristik dari masing-masing alat modbus. Pada penjelasan part1 dan part2 yang saya tulis sebelumnya, alat modbus yang saya buat memiliki deretan perintah dan respon serial sebagai berikut:


0x05 0x05 0x00 0x00 0xFF 0x00 0x8D 0xBE  ==> Ngidupin LED
0x05 0x05 0x00 0x00 0x00 0x00 0xCC 0x4E  ==> Matikan LED

0x05 0x02 0x00 0x00 0x00 0x01 0xB8 0x4E  ==> Baca TOMBOL

----Reply Tombol---
05 02 01 00 A0 B8   ==> LOW                                                    
05 02 01 01 61 78   ==> HIGH

0x05 0x04 0x00 0x00 0x00 0x03 0xB1 0x8F ==> Baca DHT11

---Reply DHT11----
05 04 06 00 1D 00 4F 00 5F CF BE

0x05 0x03 0x00 0x00 0x00 0x0F 0x04 0x4A ==> Baca REGISTER

---Reply----
05 03 1E 00 77 00 77 00 77 00 2E 00 61 00 69 00 73 00 69 00 35 00 35 00 
35 00 2E 00 63 00 6F 00 6D 0B ED 


Untuk perintah mode function 5 force coil / menghidupkan LED maka yang dikirim akan sama dengan apa yang di reply oleh alat modbus, sedangkan function lainnya memiliki karakteristik yang selalu sama. Sehingga jika kita ingin membuat master modbus pada arduino cukup mengirim 5 jenis perintah serial  seperti pada array berikut :



byte ledOn[] = {0x05, 0x05, 0x00, 0x00, 0xFF, 0x00, 0x8D, 0xBE};//ngidupin Led
byte ledOff[] = {0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x4E};//matikan Led
byte tombol[] = {0x05, 0x02, 0x00, 0x00, 0x00, 0x01, 0xB8, 0x4E};//baca tombol
byte humitemp[] = {0x05, 0x04, 0x00, 0x00, 0x00, 0x03, 0xB1, 0x8F};//baca dht11
byte Hregister[] = {0x05, 0x03, 0x00, 0x00, 0x00, 0x0F, 0x04, 0x4A};//baca hold reg


Sedangkan untuk reply responnya kita cukup membandingkan dengan pola seragam yang akan muncul.

byte tombolL[] = {0x05, 0x02, 0x01, 0x00, 0xa0, 0xB8}; // tombol Low 
byte tombolH[] = {0x05, 0x02, 0x01, 0x01, 0x61, 0x78}; // tombol High 

byte dhtOK[] = {0x05, 0x04, 0x06} ; //reply DHT11

byte aisiOK[] = {0x5, 0x03, 0x1E}; //reply Hold register

//simpan pada pada pointer
byte bufferDataModbus[50];
byte *ptr;
Perhatikan reply dari pembacaan DHT 11 seperti berikut :


05 04 06 00 1D 00 4F 00 5F CF BE

05     =  Alamat device id slave
04     =  Perintah baca input analog/ function 04
06     = 6 byte data berikut akan muncul (format 2 byte per data) 
00 1D  = 2 byte pertama adalah 001D = 29
00 4F  = 2 byte kedua adalah 004F =  79
00 5F  = 2 byte ketiga adalah 005F = 95
CF BE  = Checksum / CRC 16 modbus

Jadi butuh parsing pada byte ke-4 dan ke-6 untuk mendapatkan pembacaan suhu dan parsing byte ke-8 untuk mendapatkan kelembaban. Checksum tidak begitu critical sehingga mungkin untuk diabaikan, dan urutan script pembacaan DHT 11 yang kemudian akan dilempar ke serial monitor adalah seperti berikut ini :



void loop()
{

unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= 5000) {
    // timer baca dht11 tiap 5 detik 
    previousMillis = currentMillis;   
    //kirim perintah ke modbus baca dht 11
   mod.write(humitemp, sizeof(humitemp));
    
    }

  //check modbus timeout
  long millisResponModbus = millis() + 1000;
  while (!mod.available())
  {
    if (millisResponModbus < millis())
    {
      break;//timeout
    }
  }
 
 // baca data serial yang masuk dari modbus lalu simpan pada pointer
  while (mod.available())
  {
    byte b = mod.read();
    *ptr++ = b;
    Serial.print("0x");
    Serial.print(String(b, HEX));
    Serial.print(" ");
    delay(2);

  }

  //proses komparasi data yg masuk (DHT11) dengan array jawaban lalu parsing
  if (memcmp(bufferDataModbus, dhtOK, sizeof(dhtOK)) == 0) {
  ptr = bufferDataModbus;
  Serial.println("");
  Serial.print(F("SUHU :"));
  Serial.print(ptr[4]); //alamat byte ke 4
  Serial.print(F(","));
  Serial.print(ptr[6]); //alamat byte ke 6
  Serial.print(F(" C HUMI :"));
  Serial.print(ptr[8]); //alamat byte ke 8
  Serial.println(" %");
  memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus));
 }


}


Jadi jika ingin melihat visualisasinya anda bisa menontonnya pada video berikut ini :


Share:

Selasa, 21 Juli 2020

Cara Mudah Belajar MODBUS - Komunikasi Industri Jaman dulu [part 2] Membedah Isi Pesan Modbus




Pada bagian kedua kita akan membedah standar protokol modbus melalui pembedahan perintah yang dikirim dan terima dari master menuju slave. Dari software sniffer serial port  yg menyadap komunikasi serial pada komunikasi antara PC sebagai master modbus dan arduino sebagai modbus slave, didapatkan pola pengiriman data seperti ini saat menghidupkan LED:

05 05 00 00 FF 00 8D BE

Kode diatas berupa Hexa jadi kalau dipisah-pisah berdasarkan standar pada beberapa tulisan yang saya baca di beberapa artikel di internet adalah seperti berikut:

05     =  Alamat device id slave
05     =  Perintah force coil / function 05
00 00  = 2 byte alamat address memori (mulai 0)
FF 00  = 2 byte force coil ON
8D BE  = Checksum / CRC 16 modbus

Ada pola khusus yaitu alamat address register dan data perintah berupa 2 byte. Register / alamat memory modbus selalu dimulai dari nol walaupun sejatinya alamat yang dituju merupakan register yg diawali angka 1, contoh kita akan megakses register 40001, tetap saja perintah nya akses ke reg 0 karena sudah diwakili oleh byte perintah function sebagai penanda jenis register yg akan diakses. Check sum ini didapat dengan rumus tertentu dan daripada pusing langsung aja gunakan website https://www.scadacore.com/tools/programming-calculators/online-checksum-calculator/ untuk menjadi crosscheck. Pada terminal realterm sudah terdapat penghitung checksum otomatis sehingga sangat gampang.



Jadi untuk mematikan led perintahnya adalah :


05 05 00 00 00 00 CC 4E

Untuk mengecek checksumnya (CC 4E) dapat menggunakan website yang telah saya berikan sebelumnya. Untuk mengecek penekanan tombol perintahnya adalah :


05 02 00 00 00 01 B8 4E

05     =  Alamat device id slave
02     =  Perintah baca input digital / function 02
00 00  = 2 byte alamat address memori (mulai 0)
00 01  = 2 byte panjang data yg diharapkan
B8 4E  = Checksum / CRC 16 modbus



Jawaban yg diterima untuk kondisi tombol dilepas / LOW :

05 02 01 00 A0 B8

Untuk kondisi tombol ditekan / HIGH
05 02 01 01 61 78

Dimana yang berwarna merah artinya  bisa dilihat pada website  parsing data RTU berikut  http://rapidscada.net/modbus/ModbusParser.aspx


Untuk membaca DHT11 dilakukan dengan function 04 dan 3 buah data akan diminta ke modbus yaitu  suhu didepan koma, suhu di belakang koma dan terakhir angka kelembaban. Perintahnya sebagai berikut :

05 04 00 00 00 03 B1 8F

05     =  Alamat device id slave
04     =  Perintah baca input analog/ function 04
00 00  = 2 byte alamat address memori (mulai 0)
00 03  = 2 byte panjang data yg diharapkan (3 buah data)
B1 8F  = Checksum / CRC 16 modbus

sedangkan replynya seperti ini formatnya : 

05 04 06 00 1D 00 4F 00 5F CF BE

05     =  Alamat device id slave
04     =  Perintah baca input analog/ function 04
06     = 6 byte data berikut akan muncul (format 2 byte per data) 
00 1D  = 2 byte pertama adalah 001D = 29
00 4F  = 2 byte kedua adalah 004F =  79
00 5F  = 2 byte ketiga adalah 005F = 95
CF BE  = Checksum / CRC 16 modbus

Jadi hasil pembacaan dari DHT 11 adalah 29,79 derajat Celcius dengan kelembaban 95%. Untuk lebih jelasnya bisa dilihat pada video https://www.youtube.com/watch?v=cOmQoyfORtg&t=34m30s



Share:

Cara Mudah Belajar MODBUS - Komunikasi Industri Jaman dulu [part 1] Membuat Arduino Modbus Slave




Seri tulisan saya kali ini akan membahas tentang protokol komunikasi pada industri yang masih de facto menjadi standar disana. Standar MODBUS yang diperkenalkan oleh modicom (kemudian menjadi schneider) pada tahun 1979 sebagai sistem kendali pada mesin industri dimana saat itu kontrol dari pusat PLC (Programmable Logic Unit) dihubungkan menuju RTU (remote terminal unit) melalui komunikasi serial RS 232/485. Untuk memudahkan pemahaman kali ini saya  akan menekankan praktek langsung menggunakan mikrokontroller arduino.





Salah satu contoh alat berbasis modbus yang lagi naik daun adalah PZEM dimana saat musim pengiritan energi sangat dibutuhkan kontrol pengaturan daya listrik melalui monitoring yang akurat. Terdapat satu blog pada internet karya mas asep kurniawan (semesin dot com) membahas penggunaan alat ini tanpa menggunakan library pzem pada sketch arduino. Secara sederhana pembacaan datanya digambarkan seperti ini :

courtesy semesin dot com

Pola pikir orang jaman dulu saat mendesain protokol modbus menggunakan pola ADDRESS-DATA, jadi sebuah lokasi alamat memori memiliki data yang dapat dibaca atau ditulis dan dari perubahan register ini maka akan mendapatkan kondisi yang diharapkan. Alamat address yang standar modbus sebagai berikut :


Object typeAccessSizeAddress Space
CoilRead-write1 bit00001 - 09999
Discrete inputRead-only1 bit10001 - 19999
Input registerRead-only16 bits30001 - 39999
Holding registerRead-write16 bits40001 - 49999

Coil merupakan istilah output relay, Discrete input merupakan istilah untuk switch, Input register merupakan data sensor analog dan Holding register sebagai alamat memory umum yang dapat digunakan menampung parameter/variabel. Ada istilah lainnya yang perlu diketahui yaitu function code yang menjelaskan perintah yang dikirim akan mengerjakan apa.

FUNCTION CODE VALUE TYPE
01 (0x01) Read Coil Status
02 (0x02) Read Input Status
03 (0x03) Read Holding Registers
04 (0x04) Read Input Registers
05 (0x05) Force Single Coil
06 (0x06) Preset Single Register
15 (0x0F) Force Multiple Coils
16 (0x10) Preset Multiple Registers

Yang sering digunakan pada alat berbasis modbus adalah  fungsi 02, 03, 04 dan 05.





Karena di tempat saya tidak memiliki alat berbasis modbus maka pada praktek part 1 ini kita akan membuat alat seperti pada skematik diatas tujuannya menjadikan arduino dengan I/O berupa dht11, led dan tombol menjadi berbasis modbus. Script nya seperti dibawah ini :


//Library modbus slave: https://code.google.com/archive/p/arduino-modbus-slave/downloads
#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>
#include "DHT.h"
/*
Cara Mudah Menjadikan arduino menjadi alat modbus
Alamat device ID 5 pada 9600 baud.
*/


#define LED 2
#define TOMBOL 3
#define dhtPin 4
#define DHTTYPE DHT11
DHT dht(dhtPin, DHTTYPE);

unsigned long previousMillis = 0;
const long interval = 5000; 

//Setup register bank
//semua data ditulis dan disimpan disini
modbusDevice regBank;
//mode slave
modbusSlave slave;

void setup()
{   
  pinMode(LED, OUTPUT);
  pinMode(TOMBOL, INPUT);
//menentukan device ID.  
  regBank.setId(5);
  dht.begin();
/*
modbus registers format seperti berikut
00001-09999  Digital Outputs, master dapat menulis dan membaca data
10001-19999  Digital Inputs, master hanya bisa baca data
30001-39999  Analog Inputs,  master hanya bisa membaca nilai pada register
40001-49999  Analog Outputs, master dapat tulis baca register

*/

//tambahkan alamat LED pada register bank
  regBank.add(1); //LED
  

//Tombol sebagai Input registers 10001
  regBank.add(10001);  //TOMBOL
 

//Analog Input registers 30001-30003 untuk DHT11
  regBank.add(30001);  //DHT11 - suhu puluhan
  regBank.add(30002);  //DHT11 - suhu desimal
  regBank.add(30003);  //DHT11 - kelembaban
  
//Coba simpan register umum 40001-40015 
  regBank.add(40001);  // w
  regBank.add(40002);  // w
  regBank.add(40003);  // w
  regBank.add(40004);  // .
  regBank.add(40005);  // a
  regBank.add(40006);  // i
  regBank.add(40007);  // s
  regBank.add(40008);  // i
  regBank.add(40009);  // 5
  regBank.add(40010);  // 5
  regBank.add(40011);  // 5
  regBank.add(40012);  // .
  regBank.add(40013);  // c
  regBank.add(40014);  // o
  regBank.add(40015);  // m


/*
protocol handler yang akan menulis dan membaca
register data.  
*/
  slave._device = &regBank;  

// Serial pada 9600
  slave.setBaud(9600);   
//isi register umum diawal
  regBank.set(40001,'w');
  regBank.set(40002,'w');
  regBank.set(40003,'w');
  regBank.set(40004,'.');
  regBank.set(40005,'a');
  regBank.set(40006,'i');
  regBank.set(40007,'s');
  regBank.set(40008,'i');
  regBank.set(40009,'5');
  regBank.set(40010,'5');
  regBank.set(40011,'5');
  regBank.set(40012,'.');
  regBank.set(40013,'c');
  regBank.set(40014,'o');
  regBank.set(40015,'m');
}

//fungsi memecah angka dibelakang koma dht11
int ExtractDecimalPart(float Value, int numberOfDecimals)
{
  float temp = Value - (long)(Value); 
  long p = 1;
  for (int i=0; i< numberOfDecimals; i++) p*=10;
  long DecimalPart = p * temp;
  return DecimalPart;
}

void loop()
{
//Melihat data register 1 dan lempar ke LED
  digitalWrite(LED,regBank.get(1));  

//Membaca input tombol dan lempar ke register 10001
  regBank.set(10001, digitalRead(TOMBOL));

//membaca dht11 tiap 5 detik
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= interval) {
    // save the last time you read the sensor 
    previousMillis = currentMillis;   
 
    int h = dht.readHumidity();
    float t= dht.readTemperature();
    int t1 = t;
    int t2 = ExtractDecimalPart(t,2); //pecah desimal

    regBank.set(30001,1000); // tulis suhu depan koma 
    regBank.set(30002,1000); // tulis suhu belakang koma
    regBank.set(30003,1000); // tulis kelembaban


    }

   
// loop terus sebagai slave    
  slave.run();  

 
}

Pergunakan software monitoring modbus yang banyak ada di internet  untuk melakukan pengecekan apakah alat yang kita buat sudah terbukti menggunakan modbus, yang saya gunakan adalah radzio modbus. 



Dengan menggunakan USB to Serial langsung ke PC maka telah terbukti device modbus arduino dengan ID 5 dapat dibaca datanya dan dilakukan kontrol LED terhadapnya.  Kita juga bisa mengetest data apa sih yang dikirimkan secara serial dan format yang benar melalui terminal real term yang akan dibahas pada video selanjutnya, dan selengkapnya bisa dilihat pada video berikut :


Share:

Senin, 20 Juli 2020

Televisi Digital & Satelit [Seharusnya] Menjadi Solusi Kelas Jarak Jauh Saat Pandemi



Pernahkah anda membayangkan sebelumnya apa yg kini terjadi di 2020 ? Ekonomi morat-marit , banyak korban virus berjatuhan, ambulance meraung dijalan dengan sopir yang berpakaian astronot. Ahh saya terlalu dramatis dan akan diserang para pendukung mereka yg menganggap kalau corona itu HOAX ! Tapi ada satu hal yang sangat nyata dihadapi para orang tua yang memiliki anak usia sekolah mulai Paud sampai tingkat mahasiswa, masalahnya sama yaitu : KUOTA INTERNET ! Gak usah mikirin korona hoax setingan amerika-china -iluminati dan sebagainya..ini nih jeritan nyata para orang tua di tahun ajaran baru 2020/2021.




Jawaban normatif akan diberikan oleh rata-rata guru ketika para ortu murid protes, umumnya di kota yang jaringan internetnya merata, dimana para ortu teriak lantang anaknya gak bisa mengikuti akibat miskin kuota.  Guru pasti menyarankan untuk mencari sumber internet gratis di tetangga, taman, balai RW dan sebagainya. Memang sih penulis sempat juga menjadi surveyor di wifi.id milik telkom dimana dulu itu banyak titik keramaian dan public area yg ada hotspot gratis disediakan oleh telkom. Tapi saat pandemi ini telkom menggenjot di pemasangan indihome ke rumah-rumah dan ndak tahu lagi nasib wifi.id, namun demi CSR kepada masyarakat seharusnya wifi.id mengikuti penetrasi Indihome yang semakin masive. Cerita akan menjadi ironi ketika dipelosok yang jaringan telpon sekelas 2G pun gak sampai, jadi kalau masalah jangkauan internet kurang merata ya saya siapa kok berani protes ? hehehehe


- Perhitungan Kuota Perbulan

  




Mari kita hitung yuk berapa sih kira-kira kuota yang dihabiskan untuk kelas online ? Kita asumsikan kelasnya dilakukan di youtube dengan resolusi video paling standar bisa dilihat enak di mata yaitu 240p dengan perhitungan dari wikipedia sekitar 180-250 MB. Kita ambil tengahnya yaitu 200MB per jam. Jika per-hari siswa mengikuti kelas online sebanyak maximal 2 jam maka sebulan...


200 MB x 2 (jam) x 5 (hari) x 4 (minggu) = 8 GB 


Glekk glekk..hhoekkk ..itu baru seorang anak yg culun dan gak maen game , jangan dikira iklan nongol diyutub gak makan quota apa? Terus searching jawaban dari tugas guru, tulis status IG yg videonya seabrek , maen tiktok, video call untuk tatap muka ke guru dan itu tuh..PUBG dan FF akan susah untuk dikontrol ..apalagi rata-rata anak terbiasa mencari ini nih seperti gambar dibawah...




Hanya bisa geleng-geleng saya , niat baik TVRI dan Kemdikbud untuk mengatasi permasalahan kuota dan infrastruktur internet di daerah terluar dan terdepan Indonesia, menjadi ternoda oleh ulah para "Budak Adsense" yang sudah menyediakan seolah-olah "kunci jawaban" ( jauh sebelum acara kelas tvri dimulai) , dengan harapan menjaring viewer saat kelas tvri selesai dan terdapat tugas untuk dikerjakan dirumah. Sepertinya kesalahannya ada pada TVRI telah menyediakan jadwal dan kisi-kisi yang akan dibahas, dan para yutubers ini entah mendapat ide dari mana akan telah menyediakan bank soalnya. Dan benar saja saat selesai TVRI  memutar satu kelas maka dipublish lah video yang sesuai dan view dari video youtube ini menjadi melonjak drastis. Luar biasa ! Youtube menjadi kebanjiran pengunjung dari anak-anak sekolah, operator telco mendapatkan penghasilan penjualan pulsa quota internet dan yutuber mendapatkan berkah dari adsense. Orang tua siswa hanya bisa menggaruk kepala karena bayar SPP tetap jalan begitu juga Kuota internet yang 2 minggu dijamin sudah lenyap !


- TV DIGITAL SEHARUSNYA MENJADI SOLUSI



Harapan muncul saat membaca artikel viral diatas pada sebuah postingan di Facebook dimana sekolah di padang berusaha merelay LAN sekolahnya via WiFi ke lokasi disekitar sekolah sehingga siswa mendapatkan sinyal yg terhubung dengan server sekolah. Saya awalnya lumayan salut dengan ide yang sebenarnya saya pernah liat pada website luar negeri beberapa tahun yang lalu, tapi gak apa-apa namanya juga meniru sah sah saja. Yang menjadi permasalahan yg mengusik sanubari adalah "kenapa harus selalu pakai jaringan IP sih? "  Bukannya lebih mudah kalau pake sistem broadcast seperti radio dan televisi ? Masih ingat penulis pernah membuat alat pemancar TV sekampung untuk menyebar pengajian ke rumah-rumah (baca disini) ? 



Jadi ide sederhana ini sudah terbukti bisa menjadi solusi di pelosok daerah yang terbebas dari scanner BALMON kominfo, kalau dikota besar ya jangan gunakan ide ini ya pasti di tutup langsung ! Daripada susah-susah narik kabel LAN atau menaikkan tiang PTP wifi dari sekolah menuju titik berkumpulnya murid kenapa tidak dibagikan materinya melalu FLASHDISK saja ? atau guru burning VCD video pelajaran tiap minggu dan seninnya diambil siswa , jumat tugas dari dalam video tadi dikumpulkan. Syarat tanpa kontak langsung guru  ke peserta didik pun menjadi terpenuhi.






Indonesia merupakan pelopor "distance learning " pertama di negara ASEAN ketika TPI - Televisi Pendidikan Indonesia muncul pada tahun 1991. Saat itu penulis rajin menonton pembelajaran tiap pagi dan siang hari dimana produksi acara dilakukan oleh pustekom depdikbud saat itu. Kini TPI menjadi MNC tv dan pustekom telah mendirikan siaran TV satelit TV Edukasi yang mengudara via satelit Palapa. Dulu TVE sempat mengudara melalui UHF analog tapi karena suatu dan lain hal turun tayang kalah dengan tv komersial. Nah inilah seharusnya peran penyiaran sekolah diambil oleh TV DIGITAL yang menyediakan banyak kemudahan.


Gambar diatas merupakan siaran DISTANCE LEARNING TV dari satelit thaicom 8 yang kemudian dapat diterima di daerah thailand dan sekitarnya. Juga satelit ini berfungsi sebagai sumber siaran pemancar digital UHF di seluruh negeri gajah putih. Dengan teknologi digital satelit DVB-S2 maupun DVB-T2 melalui teresterial UHF maka 1 kanal frekuensi yang kalau siaran analog hanya 1 siaran bersemut dan berbayang, dengan tv digital dapat ditingkatkan menjadi 10 siaran kualitas HD. Saya membayangkan jika migrasi digital kita mengikuti jadwal ASO - Analog Switch OFF tepat jadwalnya di 2018  maka permasalahan kuota internet pada orang tua murid bisa sedikit ditekan dengan siaran televisi pendidikan yang beragam channelnya.

Sebagai penutup marilah kita ikuti teleconfrence Bapak Presiden SOEHARTO saat meresmikan siaran TELEVISI PENDIDIKAN INDONESIA tahun 1991.



by : nyoman yudi kurniawan
pencinta elektronika dan tv satelit
ahocool@gmail.com

Share:

Sabtu, 18 Juli 2020

[IOT Itu Gampang] SIM7000 NBIOT Gagal Terima Pesan Subscribe MQTT dari Antares



Senangnya hati ini saat berhasil menduplikasi alat jadul saat penulis kerja praktek pada tahun 2002 (bisa dibaca disini ) terutama saat berhasil mengirimkan data pembacaannya menuju grafik pada microsoft excel menggunakan NBIOT telkomsel dan Antares sebagai platform IOT nya. Dan sekarang saya ingin mengetes proses kebalikan dari alat ini yaitu subscribe ke topic antares dan mencoba menerima data. Sebagai pemahaman untuk pembaca, proses subscribe MQTT dari antares selalu menggunakan topik :

/oneM2M/resp/antares-cse/ACCESS:KEY/json

Access:key merupakan username dan password yang anda dapatkan dari platform antares . Karena topiknya satu saja maka data yg ingin diolah diterima dibagian mana ? Mari kita lihat contoh respon atau jawaban dari topik mqtt.

 {
   "m2m:rsp" : {
      "rsc" : 2001,
      "rqi" : "123456",
      "pc" : {
         "m2m:cin" : {
            "rn" : "cin_63068886",
            "ty" : 4,
            "ri" : "/antares-cse/cin-63068886",
            "pi" : "/antares-cse/cnt-682859183",
            "ct" : "20200707T152502",
            "lt" : "20200707T152502",
            "st" : 0,
            "cnf" : "message",
            "cs" : 35,
            "con" : "{\"led\":\"on\"}"
         }
      },
      "to" : "username:password",
      "fr" : "/antares-cse"
   }
}

Wihh panjangnya sekitar 500 karakter nih...padahal kalau dilihat dari buffer nya library tinyGSM hanya mencantumkan rx buffer sebanyak 64 byte saja. Jadi berdasarkan penelusuran praktek menghidupkan LED melalu NBIOT-ANTARES pesan tidak bisa diterima karena kepanjangan. Kalau saya errorkan mengirim data maka response dapat diterima dengan baik karena pesan nya tidak melewati jumlah byte buffer.







Dapat disimpulkan datanya terlalu panjang untuk buffer sim7000 bagaimana kalau buffernya dibesarkan? Yang terjadi adalah memory RAM arduino yang saya gunakan menjadi kritis 80% dan tidak mampu untuk mengerjakan  fungsi memori dinamis scriptnya. Bagaimana kalau kita menggunakan broker lain dan mencoba mengirim data panjang ? Kita coba menggunakan broker HIVEMQ dan hasil yang didapat kurang lebih sama. Untuk lebih jelasnya dapat dilihat pada video berikut ini.





Share:

[IOT Itu Gampang] NBIOT - Alat Pengukur Kematangan Kultur Alga - Flashback ke Jaman Kuliah



Pada tahun 2002 penulis mendapatkan tantangan dari dosen ketua bidang studi elektronika almarhum ir soetikno yang sangat legendaris di elektro ITS, saat itu kami di lab elka sedang mengalami kejenuhan tugas akhir yang temanya cenderung mirip - mirip. Tantangan ini berupa pilihan untuk mengerjakan skripsi mengenai "Teknologi Baru" atau "Teknologi Terapan Masyarakat". Penulis yang otak nya lumayan "cekak" membuang jauh - jauh tantangan teknologi baru dimana kawan kami yang paling pintar mendapatkan tugas akhir teknologi baru FPAA (field programmable analog array) yang fresh from the oven dari amerika dan  terbatas sekali penelitian awalnya. Tapi karena topik judul skripsi paling mudah yaitu pengenalan awal sudah diambil, maka tantangan ke mahasiswa lainnya adalah membuat aplikasi dari modul FPAA yang datang langsung dari amerika, dimana syaratnya kalau sampai merusakkan alatnya maka harus menggatinya. Otak cekak , uang juga apalagi jadi larilah penulis ke topik pilihan lainnya yaitu teknologi terapan masyarakat.


Seketika penulis teringat akan sebuah balai penelitian perikanan di bukit gondol bali yg pernah dikunjungi pada masa SMA,  membuka beberapa foto album lama saat kunjungan kesana, dan berujung pada keputusan untuk menjajaki kerja praktek pada balai perikanan yang pilihannya ada di Sidoarjo, Sukabumi dan Buleleng Bali. Ternyata balai di sidoarjo yg cukup dekat sedang penuh karena memang ada kampus perikanan berdempet dengan balai. Sukabumi kejauhan walau ingin banget mencoba pengalaman hidup di kota lain. Akhirnya pilihan akhir kembali ke kota kelahiran singaraja bali dan melakukan penjajakan kerja praktek di balai perikanan disana dan sedikit kecewa karena hampir ditolak dengan alasan tidak ada topik untuk anak elektronika disana. Berita baiknya ada fasilitas baru kerjasama uni eropa yang super canggih dibangun di ujung tanjung bukit gondol dan saya berhasil menego pihak balai untuk bisa kerja praktek pada fasilitas tropical marine fish farming, dengan syarat saya harus tetap mengikuti kerja praktek standar siswa perikanan selama sebulan dan tidak berhak untuk mengutak-atik alat-alat kontrol yang fresh baru dibuka plastiknya.


Kulit menggelap karena tiap hari berjemur memberi pakan ke tambak dan tempat pembesaran ikan pelari kencang macam ikan kuwe dan red snapper, mengecek perkembangan pembesaran kerapu, memijah ikan dan mengambil gonad/telur ikan, mengecek jenis kelamin ikan, mengumpulkan telur bandeng di malam hari, menghitung banyaknya plankton pada mikroskop dan banyak hal diluar elektronika yang saya kerjakan, padahal didepan mata ada mesin kontrol PLC buatan jerman yang sedang dikonfigurasi oleh seorang bule finlandia  dan karena bahasa inggris saya lumayan bagus jadi mengalami momen "jaka sembung bawa golok". Si bule kurus tinggi ini hanya berbahasa jerman - perancis dan Finish ..lhaa kok finish ? Lomba lari dong ? hehhe benar baru pertama kali melihat bule skandinavia bahasa inggrisnya kacau dan susah di mengerti. Jadilah bahasa tarzan lebih dominan kita gunakan dalam komunikasi sehari-hari.

- Prinsip Dasar


Diujung sebulan menjadi calon petambak handal, saya kembali ke wujud asli sebagai tukang solder dan dengan sekejap mata mendapatkan judul laporan skripsi yaitu alat pembaca tingkat kematangan kultur alga / pithoplankton berbasis mikrokontroler mcs 51 dengan prinsip sensor cahaya terhalang. Kultur alga pada polibag bening ini akan berubah tingkat kegelapannya karena mahluk hidup berfungsi sebagai makanan ikan kecil ini adalah tumbuhan yang berfotosintesis. 


Back to the future pada tahun 2020 saya merangkai alat ini kembali dengan menambahkan prinsip IOT yang nantinya akan mengirim pembacaan sensor ke smartphone. Bisa dilihat pada video dibawah ini dimana merupakan kelanjutan pada praktek membaca ADC ke microsoft excel. Awalnya saya akan mengirim data pembacaan langsung ke PC menggunakan komunikasi serial saja persis dengan pembahasan membikin grafik excel lewat arduino disini. 

 




- Menghubungkan Dengan NBIOT - ANTARES

Beberapa tulisan saya sebelumnya sudah cukup lengkap membahas pengiriman data melalui NBIOT modul SIM7000 ke MQTT dan chart seperti yang dibahas disini. Jadi silahkan menuju pembahasan cara pengiriman data melalui NBIOT dan jangan kecewa kalau dilokasi kalian hanya terdapat sinyal GPRS saja yang bisa dikoneksikan. Sedangkan untuk platform antares saya sampai ke tahapan penggunaan NBIOT dengan ESP8266. Jadi jika menggunakan Antares dan SIM7000 maka yang diwaspadai adalah kemampuan pengolahan data json yang lumayan panjang dan untungnya karena proses sensor kita ini satu arah saja maka menjadi lebih mudah.

Saya akan membagi skripnya dari percobaan saya dan selanjutnya anda bisa melihat pebahasannya pada videonya.



#include <SoftwareSerial.h> //koneksi ke modem

#define TINY_GSM_MODEM_SIM7000
#define TINY_GSM_DEBUG SerialMon
#define BAUD 9600
#define SerialMon Serial

SoftwareSerial SerialAT(2, 3); // RX, TX ke modem

const char apn[]  = "NB1INTERNET"; //untuk gprs gunakan "internet"
const char user[] = "";
const char pass[] = "";
byte randomValue = random(0, 37);
const char *mqtt_server = "mqtt.antares.id"; //server antares
const char *mqtt_user = "";
const char *mqtt_pass = "";
const int mqtt_port = 1883;
const char *mqtt_client_name = "ahocool" + randomValue; // random

//dibawah ini sesuaikan dengan akun atares kamu
#define TOPIKPUB "/oneM2M/req/access:key/antares-cse/json"
#define accessKey "access:key"
#define projDev "Device/project"

// library modem dan mqtt 
#include <TinyGsmClient.h>
#include <PubSubClient.h>

#ifdef DUMP_AT_COMMANDS
  #include <StreamDebugger.h>
  StreamDebugger debugger(SerialAT, SerialMon);
  TinyGsm modem(debugger);
#else

TinyGsm modem(SerialAT);
#endif
TinyGsmClient client(modem);
PubSubClient mqtt(client);

long lastReconnectAttempt = 0;
int val;


void setup()
{
  // Set debug console dan modem
  SerialMon.begin(9600);
  delay(10);
  SerialAT.begin(9600);
  delay(3000);

  String modemInfo = modem.getModemInfo();
  SerialMon.print("Modem: ");
  SerialMon.println(modemInfo);

  SerialMon.print("Waiting for network...");
  if (!modem.waitForNetwork(240000L)) {
    SerialMon.println(" fail");
    delay(10000);
    return;
  }
  SerialMon.println(" OK");

  if (modem.isNetworkConnected()) {
    SerialMon.println("Network connected");
  }

  SerialMon.print(F("Connecting to "));
  SerialMon.print(apn);
    if (!modem.gprsConnect(apn, user, pass)) {
    SerialMon.println(" fail");
      delay(10000);
      return;
  }
  
    SerialMon.println(" OK");


   // MQTT Broker setup
  mqtt.setBufferSize(512);
  mqtt.setServer(mqtt_server, mqtt_port);
}


boolean mqttConnect() {
  SerialMon.print("Connecting to ");
  SerialMon.print(mqtt_server);

  // koneksi ke MQTT Broker
  boolean status = mqtt.connect(mqtt_client_name,mqtt_user, mqtt_pass);

  if (status == false) {
    SerialMon.println(" fail");
    return false;
  }
  SerialMon.println(" OK");

  return mqtt.connected();
}


void loop()
{

  //cek jika koneksi mqtt gagal maka ulang lagi
   if (!mqtt.connected()) {
    SerialMon.println("=== MQTT NOT CONNECTED ===");
    // Reconnect every 10 seconds
    unsigned long t = millis();
    if (t - lastReconnectAttempt > 10000L) {
      lastReconnectAttempt = t;
      if (mqttConnect()) {
        lastReconnectAttempt = 0;
      }
    }
    delay(100);
    return;
  }

  val = analogRead(0);  //baca sensor photodioda
                

  String pubString ;

 //JSON yang panjang untuk kirim data ADC ke antares
    pubString +=  F("{");
    pubString += F("\"m2m:rqp\": {");
    pubString += F("\"fr\": \"");
    pubString += String(accessKey) ;
    pubString += F("\",");
    pubString += F("\"to\": \"/antares-cse/antares-id/");
    pubString += String(projDev);
    pubString += F("\",");
    pubString += F("\"op\": 1,");
    pubString += F("\"rqi\": 123456,");
    pubString += F("\"pc\": {");
    pubString += F("\"m2m:cin\": {");
    pubString += F("\"cnf\": \"message\",");
    pubString += F("\"con\": \"{\\\"level\\\":");
    pubString += String(val);
    pubString += F("}\"");
    pubString += F("}");
    pubString += F("},");
    pubString += F("\"ty\": 4");
    pubString += F("}");
    pubString += F("}");
  
  // kirim atau publish ke antares

  SerialMon.println(pubString);
  char message_buff[pubString.length() + 1];
  pubString.toCharArray(message_buff, pubString.length() + 1);
  mqtt.publish(TOPIKPUB, message_buff);

delay(5000);
}
Penjelasan videonya bisa dilihat pada youtube berikut ini :




telkomsel iot, telkomsel, nbiot, ITS surabaya, ITB Bandung, Telkom antares, Telkom University, elektronika, Kementrian kelautan dan perikanan, susi pudjiastuti, eddy prabowo, deddy corbuzier
Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

Site View

Categories

555 (6) 7 segmen (3) adc (4) amplifier (2) analog (10) android (11) antares (3) arduino (14) attiny (1) attiny2313 (17) blog (1) bluetooth (1) cmos (2) crypto (2) dasar (35) display (3) esp8266 (3) gcc (1) iklan (1) infrared (2) Input Output (3) iot (16) jam (6) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (12) komputer (3) komunikasi (1) kontrol (4) lain-lain (8) lcd (2) led (9) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (55) mikrokontroller (7) mikrotik (5) ninmedia (2) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (32) pcb (2) praktek (2) project (33) proyek (1) python (1) radio (3) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (3) signage (1) sms (6) software (18) tachometer (2) telepon (7) televisi (61) television (5) transistor (1) troubleshoot (3) tulisan (58) tutorial (78) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika