Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

  • 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

  • Ayo Migrasi TV Digital

    Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel

  • 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

  • Node Red - Kontrol Industri 4.0

    Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red

Tampilkan postingan dengan label arduino. Tampilkan semua postingan
Tampilkan postingan dengan label arduino. Tampilkan semua postingan

Rabu, 25 Mei 2022

LoRaWan - Antares id "Hello World" dengan SX1276 / RFM95 di Frekuensi AS923-2

 


Lora bukanlah barang yang asing bagi saya karena telah cukup lama mengenal modul modem RF nya kira-kira 7 tahun yang lalu, dan berhasil mengirimkan data text / terminal serial antar 2 modul lora (point to point) yang saya letakkan dari ujung ke ujung jembatan Suramadu. Kala itu modul yang digunakan masih menggunakan frekuensi 433 Mhz yang cukup terjangkau harganya,  namun setelah praktek sederhana ini saya merasa tak ada yg spesial dari sekedar kirim-kiriman data jarak jauh. Kemudian ketika konsep IOT saya sudah lumayan mendapatkan pencerahan dan lebih memilih wifi sebagai koneksi paling murah meriah, maka modul ini jadi terlupakan dan entah terselip dimana. Apalagi kemudian pemerintah baru men-standarkan dan meregulasi frekuensi lora sesuai dengan pembagian regional ITU - Lora aliance yaitu di 923Mhz pada tahun 2019.

Ketiadaan gateway lora pada tahun dimana saya mencoba lora juga menjadi kendala untuk oprek-oprek, dan saat itu pernah membantu seorang mahasiswa menyeting GW Lora dragino yang ternyata harganya sangat memberatkan kantong mahasiswa. Baik TTN ( the things network) maupun Lora alliance tidak muncul juga gatewaynya saat saya getol2nya mengoprek modul lora 433Mhz. Sampai suatu ketika saya mendapatkan request pembaca untuk menengok perkembangan gateway LoraWan yang dipasang telkom bersama mitratel. Lalu meluncurlah saya ke websitenya Telkom iot dan mendapatkan Lorawan nya ternyata telah di deploy dan memancar dilokasi yang tak jauh dari kediaman saya.


 





Peta diatas terasa sangat familiar bagi saya, perasaan de-ja-vu pun muncul...yahh karena telkom surabaya adalah mantan terindah buat saya. Cieee...cieee....ya iyalah hampir 9 tahun saya berkutat dengan map dan coverage persis dengan gambar diatas. Dan benar saja lingkaran merah yang menyatakan sinyal Lorawan nya besar, itu berada pada titik lokasi STO Telkom yang memiliki tower BTS / Radio. Yahhh..kenangan mantan memang menyakitkan, namun saya harus MOVE ON dan segera mencari modul Lora dengan frekuensi sesuai standar di Indonesia.



  

Banyak modul Lora yang beredar di pasaran online, dan saya sangat berhati-hati agar tidak salah membeli karena dana sedang tipis-tipisnya. Apalagi ada yg memberitahu saya kalau modul lora berbasis esp32 TTG / LilyGo sedang kosong dipasaran. Pilihan datang ke breakout board Lora berbasis SX1276 atau RFM95 yang lumayan terjangkau, namun belum siap pakai karena harus melakukan penyesuaian ke microcontroller yang digunakan. Namun setelah diyakinkan oleh seller online nya dan seharian membaca di internet, saya memutuskan untuk membelinya dan menyandingkannya dengan Arduino nano yang teronggok tak terpakai di gudang. Rangkaian / skematik yg saya gunakan kira-kira tak jauh dari yang bisa didapatkan di internet.



Library yang pertama saya gunakan adalah library LoraId milik antares yang tersedia di sketch arduino, maupun library lainnya yang terdapat pada modul training di website antares. Sesuai pengalaman sebelumnya saat saya membahas library Antares, muncul keraguan kalau library ini tidak bisa langsung pakai dan harus saya oprek terlebih dahulu. Dan benar saja modul lora yang sukses saya koneksikan ke arduino, ternyata tidak mengirimkan data ke console web antares. 



  

Bahkan saya harus berkeliling kota, nostalgia pekerjaan 10 tahun yang lalu yaitu mencari sinyal sesuai peta coverage yang diberikan Telkom. Namun tetap saja hasilnya zonk ! Saya menggunakan script example yang ada pada librarynya Lora-antares, namun kenapa gagal ya ?



Pulang dengan tangan hampa dan wajah terbakar panasnya matahari Surabaya, saya teringat bagaimana proses yg saya lakukan ketika dulu, saya pernah menemukan bug pada library antares yang pernah saya bahas disini.  Saya menggunakan mode koneksi ke gateway secara ABP (Activation by Personalization) sehingga id dan key saya tetap gak berubah, dibanding saya harus menggunakan Autentifikasi lewat OTAA. Jadi kira-kira analisa saya, kenapa tidak bisa terhubung ke gateway antares,  seperti ini:


  1. NwkSkey, ApkSkey dan DevAdress kemungkinan salah format
  2. Frekuensi yang digunakan tidak tepat
  3. Library nya kacau ayuk diubah aja


Berdasarkan tutorial dari librarynya antares, key dan id dari device lora di console antares, mirip dengan yang diajarkan sebelumnya untuk library lainnya, yaitu seperti script ini :


  // Put Antares Key and DevAddress here
  lora.setAccessKey("your Access Key");
  lora.setDeviceId("your Device Id");


Lalu menurut contoh pada modul tutorial, setAccessKey didapatkan dengan melihat pair key dari id userkey di console antares yang berformat : 1111111111111111:2222222222222222 . Jadi 16karakter:16karakter. Namun saat di jalankan maka dilihat pada debug terminal, format dari  NwkSkey dan ApkSkey sesuai dengan literatur yang saya baca yaitu 128bit atau 32 karakter. Sedangkan format device ID nya benar.




Kecurigaan muncul dari saat proses ADD DEVICE lalu SETLORA. Ternyata sudah disediakan NwkSkey dan ApkSkey namun tidak ditampilkan pada console. Dilalahnya pair userkey bukanlah seperti key 128 bit yang ditampilkan pada layar.



Kacau bukan ? Apakah tebakan saya benar dan berhasil mengirimkan pesan ke Gateway? Oooo..tentu tidak semudah itu kawan! Ternyata masih zonk dan kemudian saya melanjutkan kecurigaan dengan frekuensi. Benar saja ada perbedaan tabel frekuensi antara library pada sketch arduino dan tutorial web antares. Dan menurut keputusan kominfo, frekuensi gateway telkom ada pada rentang 921.2 Mhz - 922.6 Mhz dengan jarak tiap channel 200kHz. Ahhh pusing banget harus oprek librarynya antares dan saya kemudian beralih ke 2 library yang saya temukan di Internet yaitu :

  1. Lorawan Packet  by Ricaun disini
  2. Arduino-LoRa by Sandeep Mistry disini


Jadi saya install ke dua library diatas yang saling  berhubungan, dan script testingnya pun sangat mudah dipahami seperti berikut :




#include <SPI.h>
#include <LoRa.h>

#include <LoRaWanPacket.h>
// sesuaikan pin yang dipakai
const int csPin = 10;
const int resetPin = 9;
const int irqPin = 2; // DIO0
//sesuaikan key dan address device lora antares
const char *devAddr = "xxxxxxxx";
const char *nwkSKey = "11111111111111110000000000000000";
const char *appSKey = "00000000000000002222222222222222";

unsigned int counter = 1; 

struct LoRa_config
{
  long Frequency;
  int SpreadingFactor;
  long SignalBandwidth;
  int CodingRate4;
  bool enableCrc;
  bool invertIQ;
  int SyncWord;
  int PreambleLength;
};
//frekuensi  SF BW dan sebagainya
static LoRa_config txLoRa = {922000000, 10, 125000, 5, true, false, 0x34, 8};

void LoRa_setConfig(struct LoRa_config config)
{
  LoRa.setFrequency(config.Frequency);
  LoRa.setSpreadingFactor(config.SpreadingFactor);
  LoRa.setSignalBandwidth(config.SignalBandwidth);
  LoRa.setCodingRate4(config.CodingRate4);
  if (config.enableCrc)
    LoRa.enableCrc();
  else
    LoRa.disableCrc();
  if (config.invertIQ)
    LoRa.enableInvertIQ();
  else
    LoRa.disableInvertIQ();
  LoRa.setSyncWord(config.SyncWord);
  LoRa.setPreambleLength(config.PreambleLength);
}

void LoRa_TxMode()
{
  LoRa_setConfig(txLoRa);
  LoRa.idle();
}

void setup()
{
  Serial.begin(115200);
  while (!Serial);

  LoRaWanPacket.personalize(devAddr, nwkSKey, appSKey);

  LoRa.setPins(csPin, resetPin, irqPin);

  if (!LoRa.begin(txLoRa.Frequency)) {
    Serial.println("LoRa init failed. Check your connections.");
    while (true);
  }

  Serial.println("LoRa init succeeded.");
  Serial.println();

  LoRa_sendMessage();
}

void loop() {
  if (runEvery(10000)) {

    LoRa_sendMessage();
    counter++;
    Serial.println("Send Message!");
  }
}

void LoRa_sendMessage()
{
  LoRa_TxMode();
  LoRaWanPacket.clear();
  LoRaWanPacket.print("Hello World");
  LoRaWanPacket.print(" data ke-");
  LoRaWanPacket.print(String(counter));
  if (LoRaWanPacket.encode()) 
  {
    LoRa.beginPacket();
    LoRa.write(LoRaWanPacket.buffer(), LoRaWanPacket.length());
    LoRa.endPacket();
  }
}

boolean runEvery(unsigned long interval)
{
  static unsigned long previousMillis = 0;
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval)
  {
    previousMillis = currentMillis;
    return true;
  }
  return false;
}

Hasilnya diluar dugaan saya dapat mengirim pesan ke gateway dengan lancar. Saya menggunakan frekuensi yang FIX sesuai dengan tabel frekuensi yang digunakan oleh gateway Lora nya Telkom.




Lalu bagaimana dengan librarynya telkom antares? Kalau ini sih saya gak akan bagikan disini karena sangat membingungkan untuk dijelaskan melalui tulisan. Namun intinya dapat saya ceritakan kalau library nya telkom antares / LoraId kurang bagus saat TX dibandingkan dengan  library lorawan packet. Ada pesan yang tidak nyantol ke antares jika menggunakan library bawaan, ketimbang lorawan packet yang selalu sukses. Namun dengan oprekan tambal sulam yg saya lakukan di library LoRa antares, saya dapat mengirimkan pesan downlink secara MQTT menuju arduino saya melalui LORA GATEWAY. Jarak lokasi rumah dengan titik BTS Gateway LoraWAN di telkom sekitar 1 km.





Wahh..jadi gatel nihh pengen lanjut cek sinyal lora keliling Surabaya...tunggu episode berikutnya yaa...







Share:

Rabu, 18 Agustus 2021

Wemos Esp8622 - Part 1 - Hello World !

 

WeMos-D1R2 adalah kit mikrokontroller berkemampuan WiFi berbasis ESP8266-12 yang kompatibel dengan kit Arduino-UNO. Itu berarti papan circuitnya didesain sama dan berfungsi (layaknya) seperti UNO. Tampaknya beberapa shield, sensor, dan perangkat I/O yang dibuat untuk platform Arduino akan bekerja pada WeMos-D1R2 dengan keuntungan sudah tersedia modul WiFi bawaan.


Ada dua produk WeMos yg beredar di pasaran online dan rata-rata merupakan clone ( KW ) namun harganya terjangkau. Yang pertama adalah WeMos-D1 R2 seperti penjelasan diatas, jangan sampai beli versi jadulnya ya. Sedangkan versi mungilnya D1 mini yg menyediakan versi " siap launching " semisal anda mau menjual kontrol elektronik yg packingnya lebih sederhana. D1 R2 memiliki level tegangan I/O 3.3 - 5Volt, sedangkan D1 mini umumnya menggunakan level logic 3,3 volt. Namun anda tidak perlu dipusingkan dengan level logic karena modul siap pakai yg beredar umumnya mampu menghandel logic ini, kecuali menggunakan tambahan IC TTL jadul maka harus menggunakan logic 5 volt 


Saya akan berfokus pada D1 R2 karena sudah tersolder dan siap pakai. Jadi dalam praktek hello World kali ini perlu disiapkan perangkat tambahan :


DHT11 / DHT22





Kabel Jumper Male Female untuk koneksi ke komponen lainnya




Sebelum instalasi pada komputer maka butuh sesuatu untuk menghubungkan wemos ke komputer berupa kabel data micro usb, yg pasti anda temui di charger hp jaman now. Untuk power supply tegangan dari Wemos D1 R2 cukup menggunakan catuan PC dari kabel data micro USB itu juga, jadi tanpa butuh adaptor atau power supply lagi. 

Wemos D1 R2 memiliki chipset USB to serial jenis ch340, sehingga butuh mendapatkan driver yg sesuai, bisa diunduh untuk berbagai jenis OS komputer disini . Jika sukses maka akan muncul com portnya seperti gambar dibawah.







Sedangkan untuk software IDE yg digunakan adalah sketch milik Arduino yang berbasis java. Jadi kalau windows mungkin akan memakan memory namun untuk linux dapat dikatakan lebih cepat eksekusinya. Unduh saja di websitenya : https://www.arduino.cc/en/software






Karena kita akan menggunakan boards yg merupakan bukan boards asli arduino, maka langkah pertama setelah instalasi selesai adalah memberikan library/packages untuk board wemos. Pilih menu preferences pada gambar.




Lalu masukkan pada additional boards : 

http://arduino.esp8266.com/stable/package_esp8266com_index.json 






Jika OK maka pada menu boards manager maka akan dapat menambahkan boards microcontroller berbasis ESP8266 seperti wemos dan sejenis.






Tunggu sebentar untuk loading daftar boards dan ketika sudah loading semua, pilihlah yg paling bawah seperti pada gambar berikut :




Lanjutkan install boards berbasis esp8266, jika selesai lanjutkan dengan memilih board wemos D1 R2 pada menu boards.





Langkah selanjutnya hanya meilih PORT COM yang sesuai, dan kemudian buka sketch dan tambahkan script hello world seperti berikut :



void setup() {
 Serial.begin(9600);

}

void loop() {
  Serial.println("Hello World");
  delay(1000);

}

Script singkat diatas akan mengirimkan "hello world" ke serial com di PC kamu dengan baud rate 9600.






Serial monitor pada pojok kanan atas sketch arduino merupakan alat debugging paling powerful terutama saat melihat output pada suatu kejadian atau perubahan variabel.

Lalu bagaimana dengan sensor suhu kelembaban DHT 11? Untuk praktek ini kita perlu menginstall library  unified sensor "adafruit" dan library  DHT. Pilih tools => Manage libraries dan ikuti gambar dibawah.





Selanjutnya hubungkan DHT11 dengan header female, (+) (Out) (-) , sedangkan male nya colokkan ke wemos dengan pin (+) ke 5V, (-) ke GND dan kabel jumper (Out) masukkan ke pin D3 (cari label atau tulisan di atas board) . Script contohnya sebagai berikut :




#include "DHT.h"

#define DHTPIN D3     
#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHT HELLO WORLD!"));
  
  dht.begin();
}

void loop() {
  
  delay(2000);

  //read kelembaban
  float h = dht.readHumidity();
  // Read temperatur celcius
  float t = dht.readTemperature();
 

  // Check error
  if (isnan(h) || isnan(t) ) {
    Serial.println(F("Gagal Terhubung Sensor DHT!"));
    return;
  }

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.println(F("°C "));
}



Hasilnya sebagai berikut :






Dibagian selanjutnya kita akan mulai menghubungkan wemos ke WiFi dan berkomunikasi secara TCP ke perangkat lainnya.

Share:

Attiny2313 vs Arduino Library, bagaimana solusinya agar tidak habis memorynya ?

 



Seperti yang saya sudah kira sebelumnya kalau platform bernama arduino ini,  memang dirancang untuk IC AVR dengan memory baik flash maupun RAM yang ukurannya berlimpah. Sekelas board arduino UNO menggunakan ATmega328 dengan kapasitas flas 32Mb dan memory SRAM sebanyak 2Kb. Jadi para pembuat library lumayan leluasa untuk berkreasi. Bagaimana dengan Attiny2313 yg hanya flash 2Kb dan memory ram 128 bytes? Ya lihat saja gambar diatas, untuk melakukan pengiriman serial pun sudah menghabiskan memory ram 70% dan ini dijamin akan membuat proses tidak berjalan.

Solusi yang diperlukan untuk mengatasi masalah ini adalah kembali ke model bit banging pada register yg khusus berhubungan dengan komunikasi serial, yang pada attiny2313 berada pada bagian  :

  1. UCSR A/B/C
  2. UBRR L/H
Selengkapnya bisa dilihat pada datasheet dan saya sarankan bisa baca pada project pengenalan USART atau komunikasi serial disini : https://www.aisi555.com/2013/06/tutorial-komunikasi-serial-pada.html .

Jika anda menggunakan  USART atau komunikasi serial pada ATtiny 2313 maka butuh clock yang akan mudah dibagi dengan baudrate umum semisal 9600. Jadi karena dengan adanya DIV8 pada Fusebit ATtiny, maka butuh mengubah setting clock div8 agar attiny menggunakan clok internal 8Mhz. Caranya seperti pada gambar berikut ini :




Mungkin hal ini lebih mudah dilakukan jika kamu menggunakan programmer / dowloader AVR ISP MK2 yg bisa langsung merubah fusebit di atmel studio, seperti yg pernah dibahas disini : https://www.aisi555.com/2013/02/pejelasan-mengenai-fusebit-dari-avr.html . Jadi karena kita menggunakan USBasp maka diingat nilai yg didapat pada kalkulator fusebit tadi yaitu : 

  • LOW = 0xE4
  • HIGH = 0xDF
  • Extended = 0xFF
Lalu bisa dilanjutkan pada Avrdude versi Gui yang lebih gampang dan menghindari kesalahan saat melakukan setting fusebit.





Selanjutnya dengan memasukkan script pada pelajaran komunikasi serial sebelumnya, maka kirim-kiriman serial attiny menggunakan sketch arduino dapat berlangsung dengan lancar.


#define USART_BAUDRATE 9600  // baudrate 9600 bps
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
void init_usart(void)

{

  UCSRB |= (1 << TXEN);   // kirim aja
  UCSRC |= (1 << UCSZ0) | (1 << UCSZ1);
  UBRRL = BAUD_PRESCALE;
  UBRRH = (BAUD_PRESCALE >> 8);

}

void USART_Tx(unsigned char data)

{
  
  while (!(UCSRA & (1<<UDRE)));{} // wait till transmit Data register is empty
  UDR = data; // Send data to the computer


}


void setup() {
  init_usart();


}

void loop() {
  USART_Tx('h');USART_Tx('a');USART_Tx('l');USART_Tx('0');USART_Tx('\n');
  delay(1000);

}





Lalu apa bedanya dengan programming atau koding pada atmel studio ? Ya begitulah tak ada kemewahan library pada chip microcontroller versi mungil seperti attiny, jadi butuh kembali ke dasar pemahaman mengenai register dan proses geser-geser bit, yang akan kita dalami kembali di bagian berikutnya saat attiny akan dicoba mengirim data serial berupa pembacaan sensor DHT11.

Share:

Selasa, 17 Agustus 2021

USB ASP vs Arduino Sketch - Mampu nggak ya ? Kita gunakan packages ATTinyCore

Saat arduino muncul dengan library opensource nya yg beragam dan kemudahan kodingnya, inilah menjadi awal keengganan orang elektro menggunakan IC microcontroller dasar. Padahal fungsi yang sama dengan arduino dapat diraih dengan penggunaan resource ( memori flash dan RAM ) yang lebih irit. Namun ketika IC cloning Atmel 328 muncul dari produsen negara api, semua kemudahan itu menjadi pilihan para mahasiswa yg belajar mikrokontroller.



Lalu bagaimana dengan nasib pencinta IC AVR dasar yang menginginkan kemudahan koding pada sketch arduino? Ternyata diluar sana ada github yg khusus menyediakan platform penerjemah sketch ke avr sekelas attiny yaitu : https://github.com/SpenceKonde/ATTinyCore . Gambar diatas merupakan penerjemahan port I/O yg biasa dikenal di arduino menjadi port pada attiny 2313. Lalu langkah instalasi packagenya bagaimana ?


1. Ubah board manager tambahan dengan pilihan preferences seperti pada gambar 



Pada Additional board tambahkan : http://drazzy.com/package_drazzy.com_index.json 


2.  Pilih Boards manager  




3. Install boards bernama ATTinyCore



4. Pastikan sketch Arduino kamu sudah paling terbaru, sehingga menu boards attiny core muncul seperti gambar 



Ic avr yg kita gunakan adalah ATTiny 2313 A , jadi pilih pada menu yang benar.



5. Hubungkan USB ASP dan pilih jenis programmer yang digunakan 




6. Kita coba scriptnya, dengan Led pada #B0 atau I/O # 9 dan Tombol pull up pada port #B1 atau  I/0 # 10 .



int ledPin = 9; // pin untuk LED
int inPin = 10;   // input pin (tombol)
int val = 0;     // var pin status



void setup() {
  pinMode(ledPin, OUTPUT);  // LED sebagai output
  pinMode(inPin, INPUT);    // tombolsebagai input
  digitalWrite(ledPin, LOW);
}

void loop()
{

val = digitalRead(inPin);  // read input value

  if (val == HIGH) {         // cek tombol
    digitalWrite(ledPin, LOW);  // LED OFF
  } 
  else {
    digitalWrite(ledPin, HIGH);  //  LED ON
  }
}

7. Compile pada arduino scketch dan bisa di unduh menuju attiny melalui usbasp, baik menggunakan sketch langsung atau menggunakan avrdude.



Walau muncul warning seperti diatas, jangan khawatir karena ini merupakan missmatch firmware  saat perintah merubah clock USBasp. Warning ini muncul juga kok di penjelasan sebelumnya  : https://www.aisi555.com/2021/08/usb-asp-avrdude-cara-flash-ic.html


Untuk script lainnya kita bisa gunakan mode tombol toogle terhadap LED.



int ledPin = 9; // pin untuk LED
int inPin = 10;   // input pin (tombol)
int val = 0;     // var pin status
bool nyala = false; // status toogle


void setup() {
  pinMode(ledPin, OUTPUT);  // LED sebagai output
  pinMode(inPin, INPUT);    // tombolsebagai input
  digitalWrite(ledPin, LOW);
}

void loop()
{

val = digitalRead(inPin);  // read input value

 if (val == LOW && nyala == false) {     //toogle
    digitalWrite(ledPin, HIGH);  // LED ON
    nyala=true;
    delay(50);
  } 
  else if (val == LOW && nyala == true){
    digitalWrite(ledPin, LOW);  //  LED OFF
    nyala=false;
    delay(50);
  }
}

Perlu diingat bahwa sketch arduino sangat bergantung pada library yang sangat memakan memory, sedangkan attiny merupakan ic yg minimalis. Jadi penggunaan library sangat dihindari agar mengatasi error akibat memori habis, terutama RAM.

Pada penjelasan selanjutnya akan kita coba membaca DHT11 tanpa library pada attiny 2313.


Share:

Rabu, 07 Juli 2021

Atlet dan Wartawan di Olimpiade Tokyo Akan di Lacak Melalui GPS - Bikin Sendiri Yuk Dari Barang Bekas !

(bisnis.com) Penyelenggara Olimpiade Tokyo akan memantau pergerakan atlet menggunakan GPS seperti yang dilakukan kepada media asing. CEO Komite Penyelenggara Tokyo 2020, Toshiro Muto, mengatakan mengatakan sistem pemantauan akan digunakan tidak untuk melacak setiap gerakan peserta Olimpiade tetapi untuk melacak mereka secara retroaktif jika muncul masalah. 




Tokyo akan menjadi tuan rumah Olimpiade Musim Panas 2020 yang telah satu tahun ditunda dan akan dimulai 23 Juli, di tengah kekhawatiran bahwa acara global itu akan menambah beban sistem medis yang telah terbebani akibat pandemi virus corona. Penyelenggara Tokyo 2020, Selasa, mengatakan jurnalis luar negeri yang meliput Olimpiade Tokyo akan dilacak pergerakannya dengan GPS, dan terancam tidak dapat meliput jika melanggar aturan.




Setahun lalu saya ingat pernah belajar Coding Python yang berhubungan GeoPy ( baca dulu disini ) dan pengolahan data lokasi, dan saya bahas mengenai Hardware GPS receiver yg umum ada pasaran elektronika di olshop. Dan saya buka kotak perkakas di gudang dan teringat nostalgia kembali ke 15 tahun yang lalu ketika saya bekerja di salah satu vendor perangkat telekomunukasi CDMA. Jadi saat itu salah satu cara membedakan BTS CDMA dengan GSM adalah mencari antena berbentuk setengah bola atau kerucut yg diletakkan tidak terlalu tinggi dekat dengan shelter BTS.




Terbayang masa-masa proyek memasang antena GPS di atas tower, dimana saat itu pekerjaan ini dihargai tinggi,bisa untuk beli HP baru lho ! Belum lagi sisa kabel yang panjang, kualitas jerman yg laku keras di loak...ahhhh sudahlahh...namun kini, yang menjadi warisan di saya hanya sebuah receiver GPS USB yang dulunya digunakan  untuk referensi lokasi saat melakukan drive test sinyal. Dan saat saya colokkan port USB nya ke komputer  terdeteksi sebagai Usb to serial converter. Wahh ini dalemannya pasti masih berupa UART dan bisa  di interfacing ke arduino !




Jadi makin semangat nih buat menyambungkannya ke Arduino. Tapi sebelumnya ada baiknya mencari referensi tentang data yg dikirim oleh si receiver. Sial nya si pembuat modul telah bangkrut dan sedikit yg bisa saya dapatkan digoogle tapi cukuplah informasi yg di dapat bahwa receiver ini berbasis NMEA yg masih umum digunakan. Dengan terminal putty dan serial baudrate 4800 layar menangkap seperti ini :


Buset dah..banyak amat tuh tulisan yg harus diparsing, dan dari yg saya baca di standar NMEA receiver ini lumayan lengkap karena bisa membaca berbagai standar GPS , jadi ada $GPRSV dan $GPRSA untuk melihat informasi satelit dan $GPGGA dan $GPRMC untuk membaca koordiat, waktu, kecepatan, ketinggian dsb. Wah saya mumet ini kalau membaca parsingan segitu banyak, dan pilihan tertuju ke google dan saya cari ada gak software gratis untuk membaca parsingan NMEA seperti diatas...dan ternyata banyak loo..ayo kita coba dan bawa keruangan terbuka agar sinyal satelitnya lebih bagus.




Pilihan saya tertuju ke software yg pertama dimana terpampang jelas parsingan NMEA nya sehingga dari data serial yg didapat seperti ini :


$GPRMC,040503.246,A,0719.6784,S,11243.4344,E,0.00,0.00,220520,,*1B


Artinya kira-kira :

040503.246       =  Jam 04 , Menit 05, Detik 03.246 (UTC)
A                             = Data Benar ( V jika datanya salah )
0719.6784,S     = Latitude 7' 19.6784 " South
11243.4344,E   = Longitude 112' 43.4344 " East
220520        = Tanggal 22 Bulan 05 Tahun 20

Nah sudah siap nih...ayo kita siapkan bahan-bahan dan mulai menyolder modul receiver GPSnya agar bisa dihubungkan ke Arduino.



Skematik tidak akan saya bahas karena sangat gampang dicari apalagi cara koneksi LCD ke Arduino seperti apa pasti para pembaca sudah tahu, dan kalau belum ya tinggal googling aja bagaimana cara menyambungkan LCD ke arduino. Microcontroller yg pas ada disaya adalah wemos d1 r1  yang memiliki wifi berbasis ESP8266 dan nantinya akan saya proogram untuk membaca GPS secara serial dan DHT11 sebagai tambahan sensor agar sedikit berbau IOT. Tujuan akhir dari praktek ini adalah mengirimkan data sensor suhu/kelembaban beserta dengan data GPS dan nama lokasi pembacaan yg akan dikolaborasikan dengan Mqtt serta Geopy phyton. Pada part 1 ini akan difokuskan pembahasan mengenai pembacaan GPS ke LCD.


Pertanyaan besarnya adalah bagaimana cara parsing text serial secara efektif? Apakah manual saja? Secara tukang solder ini memiliki pengalaman buruk dengan parsing serial ! Teringat bahwa modul GPS receiver banyak dijual sebagai interfacing Arduino dan pastinya ada Library jadinya, dan benar saja beberapa library terpampang di sketch dan stelah mencoba beberapa kali akhirnya diputuskan untuk menggunakan library TinyGps++ . Kenapa? Karena dengan script examplenya (ada di folder lib nya) alat saya  sukses membaca data GPS dengan bagus. Mari kita berkreasi dengan cara copy paste ala tukang solder ini.



#include <TinyGPS++.h>
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>

static const int RXPin = 0, TXPin = 15; 
//pake RX aja hanya baca data !

static const uint32_t GPSBaud = 4800;



Seperti biasanya menggunakan board arduino versi kecil maka serial portnya harus dengan software serial. Baudrate disesuaikan yaitu 4800




// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

LiquidCrystal lcd(16, 5, 4, 14, 12, 13);



Inisialisai LCD seperti biasa simple aja dan harus diperhatikan Wemos D1 R1 memiliki GPIO yang agak loncat loncat, jadi sesuaikan penamaan portnya jangan sampe salah. Gunakan Google Search jika salah.



void setup()
  Serial.begin(9600);
  ss.begin(GPSBaud);
  lcd.begin(20, 4);

  Serial.println(F("Coba-Coba GPS"));
  Serial.println(F("Menggunakan  TinyGPS++ Dan GPS module"));
  Serial.print(F("Testing TinyGPS++ library v. ")); 
  Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println(F("by ahocool with respect to Lib creator  Mikal Hart"));
  Serial.println();
}


Function setup menyatakan bahwa serial dari wemos akan digunakan sebagai console juga untuk melihat hasil pembacaan GPS selain di LCD. keuntungan lainnya adalah memudahkan untuk debugging.


void displayInfo()
{
  Serial.print(F("Location: ")); 
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
    lcd.setCursor(0,0);
    lcd.print(" ---- GPS VALID ----");
    lcd.setCursor(0,1);
    lcd.print("LAT :");
    lcd.print(gps.location.lat(), 6);
    lcd.setCursor(0,2);
    lcd.print("LONG:");
    lcd.print(gps.location.lng(), 6);    
  
  }
  else
  {
    Serial.print(F("INVALID"));
    lcd.setCursor(0,0);
    lcd.print(" ---GPS INVALID --- ");
  }

  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid())
  {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.println();
  
}


Pada sript diatas berfungsi sebagai tampilan GPS ke Serial dan LCD, secara umumnya dapat dilihat class yg umum digunakan :


gps.location.isValid()
gps.location.lat()
gps.location.lng()
gps.date.isValid()
gps.time.hour()
gps.time.minute()
gps.time.second()
gps.time.second()


Untuk loop utama seperti dibawah ini :


void loop()
{
  // Data ditampilkan hanya setelah data selesai di olah 
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayInfo();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("GPSMU pedot brooo! cek kabelmu."));
    while(true);
  }


}


Hasilnya ketika saya jalankan diluar ruangan sangat akurat apalagi saat cuaca ternag dan LED dari GPS rceiver tidak berkedip yg artinya FULLY LOCKED TO 3 SATELLITES.






Tidak terlalu sulit jika kita sudah mengetahui langkah-langkah "googling" yang sesuai untuk meng "oprek" arduino. Untung saja saya punya receiver GPS jadul kalau tidak harus keluar duit 200rb an untuk membeli modul GPS Ublox Neo.

Untuk praktek keliling ke seputaran kompleks perumahan dan mengolah datanya ke database dapat dibaca disini :  https://www.aisi555.com/2020/05/praktek-iot-bermain-dengan-alat-gps.html
Share:

Jumat, 02 Juli 2021

LED VU Meter Menggunakan WS2812B dan Controler SP107E - Bluetooth music

Kali ini saya ingin melampiaskan ke galauan saya yang tergelitik oleh video youtube seorang pecinta per-Led-an : Omank Kacau,  dimana saya sangat salut kepada pendekatan tutorial pada videonya yg sangat santai pembawaannya dan penjelasannya yg sangat mudah dimengerti. Penulis yg sejak tahun 1994 sudah berkutat dengan LED-555-4017 dari flip flop 2 transistor dan running LED IC 4017 menjadi 'jealous' dengan anak jaman now yg dihadirkan modul siap pakai yg sangat menarik untuk dicoba.




Yang menjadi kekaguman berlanjut kekaguman saya adalah ketika saya menelusuri apa sih jenis LED Strip yg digunakan ? Wow ternyata bukan LED strip biasa, namun merupakan LED canggih yg memiliki controller RGB dan jalur komunikasi data didalamnya. LED Strip ini ber type WS2812B dan harga satu gulungnya sekitar 120 rb-an di online shop.




Jadi didalam LED tersebut bisa kamu sambungkan sesuai keinginan, bentuknya mau lurus, meliuk ataupun kamu potong - potong dan susun kembali  asal benar koneksinya seperti dibawah ini :



Jadi LED ini di cascade sampai panjang yg mungkin tak berhingga (bohong kalau ini saya) dan selanjutnya untuk mudahnya bisa membeli controller LED + VU Music dengan komunikasi Bluetooh SP107E dengan harga yah kisaran  200 ribuan.





Jadi seperti yg dilakukan Omank Kacau dalam videonya, dia cukup memotong LED, menyambungnya dengan konektor 3 pin, lalu menyusunnya ditembok. Ya semudah itu dan kemudian ambil smartphone install di playstore aplikasi VU meter yg sesuai, beres deh !






Lalu bagaimana sih jeroan coding untuk LED strip WS2812B ini jika mau belajar konsepnya ? Dari sumber internet saya dapatkan seperti berikut.




Bagaimana Cara Kerja  LED WS2812B 


Mari kita mulai dengan melihat lebih dekat pada strip LED. Ini terdiri dari LED RGB tipe 5050 di mana IC driver LED WS2812B yang sangat kompak terintegrasi.

Apa yang hebat tentang LED strip ini adalah kita dapat mengontrol bahkan seluruh strip LED hanya dengan satu pin dari Arduino / microcontroller kita. Setiap LED memiliki tiga konektor di setiap ujungnya, dua untuk daya dan satu untuk data. Panah menunjukkan arah aliran data. Panel output data dari LED sebelumnya terhubung ke panel Input Data dari LED berikutnya. Kita dapat memotong strip ke ukuran yang kita inginkan, serta mengatur jarak LED hanya dengan menggunakan beberapa kabel.





Adapun daya mereka bekerja pada 5V dan masing-masing LED Merah, Hijau dan Biru menarik sekitar 20mA, atau total 60mA untuk setiap LED pada kecerahan penuh. Perhatikan bahwa ketika Arduino diberi daya melalui USB, pin 5V hanya dapat menangani sekitar 400 mA. Jadi gunakan power supply yg ampernya lebih gede aja biar nyalanya tidak mengecewakan.


Jika Anda menggunakan lebih banyak LED dan jumlah arus yang akan ditarik melebihi batas yang disebutkan di atas, Anda harus menggunakan catu daya 5V yang terpisah. Dalam kasus seperti itu, Anda juga perlu menghubungkan dua garis Ground satu sama lain. Selain itu, disarankan untuk menggunakan resistor sekitar 330 Ohm antara Arduino dan pin data strip LED untuk mengurangi kebisingan/noise pada saluran itu, serta kapasitor sekitar 100uF di seluruh 5V dan Ground untuk memperlancar catu daya. .


Contoh Arduino dan LED WS2812B


Sekarang sebagai contoh saya akan menggunakan 20 LED strip panjang, terhubung ke Arduino melalui resistor 330 Ohm dan ditenagai dengan catu daya 5V terpisah, seperti yang dijelaskan di atas. Untuk memprogram Arduino, kami akan menggunakan library:  FastLED. Ini adalah library yang sangat baik dan terdokumentasi dengan baik yang memungkinkan kontrol yang mudah dari LED WS2812B.



#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 20
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
leds[0] = CRGB(255, 0, 0);
FastLED.show();
delay(500);
leds[1] = CRGB(0, 255, 0);
FastLED.show();
delay(500);
leds[2] = CRGB(0, 0, 255);
FastLED.show();
delay(500);
leds[5] = CRGB(150, 0, 255);
FastLED.show();
delay(500);
leds[9] = CRGB(255, 200, 20);
FastLED.show();
delay(500);
leds[14] = CRGB(85, 60, 180);
FastLED.show();
delay(500);
leds[19] = CRGB(50, 255, 20);
FastLED.show();
delay(500);
}




Penjelasan: Jadi pertama-tama kita perlu menyertakan library FastLED, menentukan pin yang menghubungkan data strip LED, menentukan jumlah LED, serta menentukan array tipe CRGB. Jenis ini berisi LED, dengan tiga anggota data satu byte untuk masing-masing dari tiga saluran warna Merah, Hijau dan Biru.





Di bagian pengaturan kita hanya perlu menginisialisasi FastLED dengan parameter yang ditentukan di atas. Sekarang loop utama kita dapat mengontrol LED kita sesuka kita. Menggunakan fungsi CRGB, kita dapat mengatur LED apa pun ke warna apa pun menggunakan tiga parameter warna Merah, Hijau, dan Biru. Untuk membuat perubahan terjadi pada LED kita perlu memanggil fungsi FastLED.show().


Lalu contoh kedua akan dibuat animasi sederhana pada LED Strip.



#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 20
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
for (int i = 0; i <= 19; i++) {
leds[i] = CRGB ( 0, 0, 255);
FastLED.show();
delay(40);
}
for (int i = 19; i >= 0; i--) {
leds[i] = CRGB ( 255, 0, 0);
FastLED.show();
delay(40);
}
}




Di sini loop "untuk" pertama menyalakan semua 20 LED dengan warna biru, dari LED pertama hingga terakhir dengan penundaan 40 milidetik. Loop "untuk" berikutnya menyala lagi semua 20 LED, tetapi kali ini dalam warna merah dan dalam urutan terbalik, dari LED terakhir ke LED pertama.







Library FastLED memiliki banyak fungsi lain yang dapat digunakan untuk membuat animasi dan pertunjukan cahaya yang sangat menarik, jadi terserah imajinasi Anda untuk membuat proyek LED berikutnya menyala seperti bagaimana.


Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (6) arduino (22) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) cmos (2) crypto (2) dasar (46) digital (11) display (3) esp8266 (25) euro2020 (13) gcc (1) iklan (1) infrared (2) Input Output (3) iot (50) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (4) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroller (13) mikrotik (5) modbus (7) mqtt (3) ninmedia (4) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (86) pcb (2) power (1) praktek (2) project (33) proyek (1) python (5) radio (15) 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) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (166) television (28) transistor (2) troubleshoot (3) tulisan (90) tutorial (94) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika