Search This Blog

Friday, December 28, 2018

Curve Plotting with C++

C++ program တွေမှာ curve plotting လုပ်ဖို့ လိုလာရင် သုံးလို့ ရမယ့် နည်းလမ်း တချို့ကို ဆွေးနွေး ချင်ပါတယ်။ သုံးကြည့်မယ့် tools တွေက
တို့ ဖြစ်ပါတယ်။

Gnuplot

Gnuplot ကို Ubuntu ပေါ်မှာ install လုပ်ဖို့ အတွက် အောက်က command တွေကို သုံးနိုင် ပါတယ်။

$ sudo apt update
$ sudo apt install gnuplot


Install လုပ်ပြီး တဲ့ အခါ gnuplot ကို အောက်ပါ အတိုင်း စနိုင် ပါတယ်။

$ gnuplot


ပြီးတဲ့ အခါ လက်ရှိ ဗားရှင်း စတဲ့ အချက်အလက် တွေပေါ်လာ ပြီးတဲ့ အခါ gnuplot ရဲ့ prompt ကို ရောက်သွား ပါမယ်။ နမူနာ အနေနဲ့ sin(x) ကို plot လုပ်ကြည့်ပြီး၊ cos2(x) ကို ပါ အောက်က အတိုင်း ထပ် plot လုပ်ကြည့် လိုက်ရင် Figure. 1 မှာ ပြထား သလို တွေ့ရ ပါလိမ့်မယ် [Mig18]။ Gnuplot ကနေ ထွက်ဖို့ အတွက် q ကို ရိုက်ထည့် နိုင် ပါတယ်။

> plot sin(x)
> replot cos(x)**2
> q



Figure 1. Plotting sin(x) and cos2(x) to test gnuplot.


Friday, November 23, 2018

Using Parallel Port on Linux with C++

Linux ပေါ်မှာ Paraller port ကို digital input output တွေ အနေနဲ့ အသုံးပြု ဖို့ [Lin15a,Coo08a] C++ class နဲ့ နမူနာ ပရိုဂရမ် တွေကို အောက်က link မှာ တွေ့နိုင် ပါတယ်။

https://github.com/yan9a/parallel-port


Figure 1. wxWidgets example using paraller port as digital output and input.


Thursday, November 22, 2018

MySQL Connector/ODBC 8.0 on Linux

Microsoft ရဲ့ MsSQL server ကို ODBC driver သုံးပြီး C++ နဲ့ သုံးခဲ့ သလိုပဲ Oracle ရဲ့ MySQL server ကို လည်း MySQL Connector/ODBC 8.0 driver ကို တပ်ဆင်ပြီး အသုံးပြု နိုင်ပါတယ်။ ကောင်းတဲ့ အချက်က တော့ C++ program တွေကို ဘာမှ ပြောင်းစရာ မလိုပဲ DSN ကို ပဲ ပြောင်းပြီး သုံးလိုက် ရုံပါပဲ။

SBC အမျိုးမျိုး၊ Platforms အမျိုးမျိုးမှာ သုံးချင်တာမို့ MySQL Connector/ODBC 8.0 ကို source ကနေ build လုပ်ပြီး တပ်ဆင် အသုံးပြု တဲ့ အကြောင်း ဆွေးနွေး ပါမယ်။ စစခြင်း အောက်က tools တွေကို စက်ထဲမှာ တပ်ဆင်ထားဖို့ လိုပါတယ်။
sudo apt install mysql-client libmysqlclient-dev
sudo apt install unixodbc unixodbc-dev
sudo apt install libgtk-3-dev cmake
sudo apt install libssl-dev

Friday, October 5, 2018

Using MS SQL Server from C++ with wxWidgets

MS SQL server ကို ODBC API နဲ့ C++ ပရိုဂရမ် ရေးပြီး ဆက်သွယ် အသုံးပြု တဲ့ အကြောင်း ဆွေးနွေး ပါမယ် [Eas18]။ အဲဒီနောက် Class module တစ်ခု ဖန်တီးပြီး wxWidgets GUI application တွေမှာ SQL server တွေကို သုံးတဲ့ နမူနာ တစ်ခုကို ဆက်လက် ဖော်ပြ ပါမယ်။ Unix နဲ့ Linux စက်တွေ အတွက်တော့ အောက်က လင့်ခ်

Using Microsoft SQL Server from Linux Machines with ODBC & FreeTDS
(http://coolemerald.blogspot.com/2018/10/using-microsoft-sql-server-from-linux.html)


မှာ ဖော်ပြ ထားတဲ့ အတိုင်း FreeTDS နဲ့ ODBC ကို တပ်ဆင် ထားဖို့ လို ပါတယ်။

Using Microsoft SQL Server from Linux Machines with ODBC & FreeTDS

FreeTDS က Unix နဲ့ Linux စက်တွေ အတွက် Microsoft SQL Server နဲ့ Sybase databases တွေကို ဆက်သွယ် အသုံးပြု ရတဲ့ လိုင်ဘရီ တွေ ဖြစ်ပါတယ် [Fre16]။ FreeTDS C libraries တွေက free, opensource ဖြစ်ပြီး GNU LGPL လိုင်စင် ဖြစ်ပါတယ်။ ဒီ အပိုင်း မှာ Windows စက် တစ်ခု ခု မှာရှိတဲ့ mixed mode authentication နဲ့ တပ်ဆင် ထားတဲ့ MS SQL server ကို Linux စက် ကနေ FreeTDS နဲ့ ဆက်သွယ် အသုံးပြု တဲ့ အကြောင်း ဆွေးနွေး ပါမယ်။ MS SQL server က TCP/IP နဲ့ remote ဆက်သွယ်မှု ကို ခွင့်ပြု ထားပြီး၊ username နဲ့ password ကို အသုံးပြုပြီး ဆက်သွယ် နိုင်ဖို့ လိုပါတယ်။

MS SQL server က Microsoft နဲ့ Sybase တို့ ပူးပေါင်း ဆောက်ရွက်မှု ကနေ မွေးဖွား လာတာ ဖြစ်ပါ တယ်။ ဒါကြောင့် သူ့တို့ ရဲ့ SQL server တွေက ဆင်တူ ကြပြီး၊ client တွေက နေလှမ်း ဆက်သွယ် အသုံးပြု တဲ့ communication protocol က စ ထပ်တူ နီးပါး တူညီ ပါတယ်။ အဲဒီ protocol ကို Tabular Data Stream (TDS) လို့ ခေါ်ပါတယ်။ TDS ကို open source အနေနဲ့ implementation လုပ်တဲ့ project ကို Brian Bruns စတင်ခဲ့ ပြီး၊ FreeTDS လို့ နာမည် ပေးခဲ့ တာပါ။

Thursday, October 4, 2018

MySQL Connector C++ 8.0 with wxWidgets

MySQL Connector C++ 8.0 ကို wxWidgets နဲ့ တွဲသုံး တဲ့ နမူနာ တစ်ခု ကို ဖော်ပြ ချင် ပါတယ်။ wxWidgets ထည့်သွင်း အသုံးပြုပုံ နဲ့ MySQL server, MySQL Connector C++ 8.0 တို့ တပ်ဆင် အသုံးပြု ပုံ အသေး စိတ်တွေ ကို အောက်က လင့်ခ် တွေမှာ ဖော်ပြ ထားတဲ့ အရင်ပို့စ် တွေ မှာ တွေ့နိုင် ပါတယ်။

ceMySQL.h Cross-platform C++ programming with wxWidgets

Using MySQL Database with C++ on Various Platforms Including ARM Single Board Computers

အဲဒီ အတွက် ဆက်သွယ် အသုံးပြု မယ့် MySQL server မှာ mytest ဆိုတဲ့ database နဲ့၊ အထဲမှာ mytable ဆိုတဲ့ table ကို Figure 1 မှာ ပြထား တဲ့ အတိုင်း MySQL Workbench နဲ့ ဖန်တီး ထားလိုက် ပါမယ်။


Figure 1. Creating a database 'mytest' and a table 'mytable' using MySQL Workbench.


Wednesday, September 19, 2018

Safe and easy DIY Home Energy Monitor Using Current Transformer with Arduino, Raspberry Pi, or Beaglebone Black

အိမ်မှာ ရှိတဲ့ လျှပ်စစ် အသုံး အဆောင် တွေရဲ့ စွမ်းအင် အသုံး ပြုမှု ကို စီစစ် တိုင်းတာ ဖို့ အတွက် ရိုးရှင်း ပြီး၊ အခြေခံ ကျတဲ့ energy monitor တစ်ခု ကို လုပ်ကြည့် ပါမယ်။ တိုင်းတာ အသုံး ပြုတဲ့ နည်း အများကြီး ရှိပေ မယ့် သင်ယူ လေ့လာမှု အတွက် အထောက် အကူ ဖြစ်ဖို့ ရော၊ အန္တရာယ် ကင်းဖို့ အတွက်ပါ သင့်တော်မှု ရှိမယ် ထင်တဲ့ YHDC Current Transformer SCT-013-000 [YHD18] ကို သုံးဖို့ ရွေးချယ် လိုက်ပါ တယ်။ သူက split-core ဖြစ်ပြီး တိုင်းတာ ချင်တဲ့ ဗို့အား မြင့် ဝါယာ လိုင်း တွေကို ဘာမှ ဖြုတ် စရာ မလိုပဲ ဝါယာ ပေါ်ကို ပတ်ပြီး ကလစ် တပ်လိုက် ဖို့ပဲ လိုတာမို့ non-invasive ဖြစ်ပြီး၊ အန္တရာယ် လည်းကင်း၊ အသုံးပြုဖို့လည်း လွယ်ကူ ပါတယ်။ အဲဒီ လို ပတ်တဲ့ အခါ Figure 1 ရဲ့ ညာဖက် ဆုံးမှာ ပြထား သလို ဝါယာ တစ်စ ကိုပဲ ပတ်ရ မှာဖြစ် ပါတယ်။


Figure 1. (ဘယ်ဘက်) SCT-013 က split core ဖြစ်တဲ့ အတွက် ကလစ်ကို ဖွင့်ပြီး ဝါယာ ပေါ်ကို အလွယ် တကူ တပ်ဆင်နိုင် ပါတယ်။ (အလယ်) ဝါယာ အကုန်လုံးကို ပတ်လိုက်ရင် အဝင် နဲ့ အထွက် ပြန်ကြေပြီး core ထဲမှာ ဖြတ်စီး တဲ့ စုစုပေါင်း current က သုည ဖြစ်သွား တဲ့ အတွက် တိုင်းလို့ မရ ပါဘူး။ (ညာဖက်) ဝါယာ တစ်စ ကို ပဲ core ထဲမှာ ပတ်ဖို့ လိုပါတယ်။


Friday, August 10, 2018

DIY Programmable Function Generator Using Arduino Uno

Arduino Uno ကို function generator အနေ နဲ့ သုံးပြီး လိုချင် တဲ့ low frequency waveform တွေကို စိတ်ကြိုက် ထုတ်နိုင် ပါတယ်။ သူ့ရဲ့ အားသာချက် က လိုသလို ပရိုဂရမ် ရေးပြီး စိတ်ကြိုက် customize အမျိုးမျိုး ထုတ်နိုင်၊ အချိန် အလိုက် ပြောင်းနိုင် တာဖြစ်ပြီး၊ အားနည်း ချက်ကတော့ အရမ်း မြင့်တဲ့ frequency တွေကို ထုတ် မပေးနိုင် တာ ဖြစ်ပါတယ်။ Arduino ရဲ့ analog output က pwm သုံးထား တာမို့ ရလဒ် ပိုကောင်းအောင်၊ pwm frequency ကို 8 kHz လောက် ပြောင်းထား ပါတယ်။ ဒီထက် ရလဒ် ပိုကောင်း ချင်ရင် DAC နဲ့ တွဲသုံး လို့လည်း ရပါတယ်။


Figure. Arduino function generator ၏ အထွက်ကို oscilloscope ဖြင့် တိုင်းတာ ရရှိပုံ။


Wednesday, August 1, 2018

Using MySQL Database with C++ on Various Platforms Including ARM Single Board Computers

Database server တွေကို ဆက်သွယ် အသုံးပြု တဲ့ C++ application တွေ ရေးသား တဲ့ အကြောင်း ဆွေးနွေး ပါမယ်။ MySQL (မိုင် အက်စ် ကျူ အယ်) က Oracle ရဲ့ open source ဖြစ်တဲ့ database management system တစ်ခု ဖြစ် ပါတယ်။ သူက free ရနိုင်ပြီး၊ robust ဖြစ်ရုံ မက ပဲ platforms တော်တော် များများ ပေါ်မှာ အလုပ်လုပ် ပါတယ်။ Odroid လို 32 bit armv7 achitecture SBC လေးတွေ ပေါ်မှာ တောင် source ကနေ build လုပ်ပြီး run နိုင်ပြီး၊ functionality တွေ စုံသလို၊ user interface မျိုးစုံ ရှိတာ မို့ နမူနာ အနေနဲ့ MySQL database serser ကို ဆက်သွယ် အသုံးပြု ပါမယ်။

MySQL server ကို traditional အတိုင်း relational database ပုံစံ နဲ့ သုံးလို့ ရသလို၊ schema ကို အသေ သတ်မှတ် စရာ မလိုတဲ့၊ NoSQL လို့လည်း ခေါ်ကြတဲ့ document store အနေနဲ့ လည်း သုံးလို့ ရပါတယ်။ Relational database မှာ သိမ်းမယ့် table ရဲ့ column အားလုံး ကြိုသိ ပြီး schema ကြိုသတ်မှတ် ဖို့ လိုပေမယ့်၊ document store ကတော့ schema flexible ဖြစ်ပြီး JSON object နဲ့ ကိုယ်စားပြု ဖော်ပြ ပါတယ်။ ဒီ နေရာမှာ relational model ရဲ့ power နဲ့ document store ရဲ့ flexibility ကို ပေါင်းစပ် အသုံးပြု လို့ ရအောင် X DevAPI ကို သုံးပြီး application တွေ ပြုလုပ် တဲ့ အကြောင်း ဆွေးနွေး ပါမယ်။

Monday, May 14, 2018

MCP3008 - Analog to Digital Converter with SPI Interface

MCP3008 က Microchip က ထုတ်တဲ့ 8-channel, 10-bit analog to digital converter ဖြစ်ပါတယ်။


Figure. MCP3008 ၏ pin များ။


သူ့ကို single ended analog input အနေနဲ့ ရှစ်ခု သုံးလို့ ရပြီး၊ differential input pair အနေနဲ့ ဆို လေးစုံ သုံးလို့ ရပါတယ်။ Power supply ဗို့ 2.7 V ကနေ 5 V အထိ သုံးလို့ ရပြီး၊ အပူချိန် -40 °C ကနေ +85 °C အထိ ခံနိုင် ပါတယ်။ SPI interface ဖြစ်ပြီး mode 0 ဒါမှ မဟုတ် mode 3 နဲ့ သုံးနိုင် ပါတယ်။

Friday, March 9, 2018

DIY Smart Surveillance Camera Using Raspberry Pi Camera and C++

RPi ကို သုံးပြီး smart surveillance ကင်မရာ တစ်ခု ကို ကိုယ်တိုင် ပြုလုပ် ဖန်တီး ကြည့် ပါမယ်။ ပုံမှန် ဘာမှ ထူးခြားမှု မရှိတဲ့ အချိန်မှာ 5x speed နဲ့ နေ့စဉ်၊ ဒါမှ မဟုတ် နာရီ အလိုက် ဗွီဒီယို ဖိုင်တွေ ခွဲပြီး record လုပ်ပေး နိုင် အောင် လုပ်ပါမယ်။ ဖမ်းယူ ရရှိတဲ့ ပုံရိပ် တွေကို analysis လုပ်နေပြီး လူ့ ကိုယ်ခန္ဓာ တွေကို တွေ့တာ နဲ့ ပုံမှာ အစိမ်းရောင် စတုဂံ နဲ့ ဘောင်ခတ် ပြပြီး၊ ပုံမှန် speed နဲ့ ပြောင်းပြီး record လုပ် ပါမယ်။ Passive infrared sensor (PIR sensor) ကိုပါ သုံးပြီး sensor က လူရိပ် ကို အာရုံခံ မိရင် လည်း၊ ပုံရိပ် မှာ အနီရောင် indicator ပြပြီး၊ ပုံမှန် နှုန်းနဲ့ ပြောင်း record လုပ်နိုင် ပါမယ်။

ဒီ နမူနာ ပရိုဂရမ် မှာ လုပ်လို့ ရတဲ့ အကြောင်း ကုဒ် အကြမ်း ရေးကြည့် ရုံ ဖြစ်ပြီး၊ တစ်ခုခု ထူးခြားရင် ကိုယ့်ရဲ့ အီးမေးလ် ကို လှမ်းပို့ တာ၊ အိမ်က လူတွေ ရဲ့ မျက်နှာကို မှတ်မိတာ၊ သတ်မှတ် ထားတဲ့ အချိန် အပိုင်း အခြား အလိုက် လိုသလို record လုပ်တာ စတာ တွေကို စိတ်ကူး ရှိရင် ရှိသလို ထပ်ဖြည့် နိုင် ပါတယ်။

Figure. PIR sensor ကို ချိတ်ဆက်ခြင်း။


Monday, January 22, 2018

UDP/TCP Socket Programming with wxWidgets

  1. နိဒါန်း
  2. UDP
  3. TCP
  4. အကိုးအကားများ

နိဒါန်း

wxWidgets နဲ့ UDP ၊ TCP တို့ကို သုံးပြီး network ပေါ်မှာ ဒေတာ အပြန် အလှန် ပေးပို့ ဆက်သွယ် တဲ့ အကြောင်း ဆွေးနွေး ချင် ပါတယ်။ အဲဒီ အတွက် wxWidgets ကို တပ်ဆင် ထားဖို့ လိုပါ တယ်။ သူ့ကို platform အမျိုးမျိုး အတွက် တပ်ဆင်တဲ့ အကြောင်း တွေကို အောက်က လင့်ခ် မှာ ဖတ်နိုင် ပါတယ်။
အင်တာနက် စတဲ့ network တွေ ပေါ်မှာ TCP ဒါမှမဟုတ် UDP တွေသုံးပြီး စက်တစ်ခု နဲ့ တစ်ခု ဒေတာ တွေ အပြန်အလှန် ပို့ဖို့ အတွက် socket တွေကို အသုံးပြု နိုင် ပါတယ်။ ခေတ်ပေါ် operating system တွေ အားလုံးက socket layer ကို အထောက် အပံ့ ပေးကြ ပေမယ့် platform ပေါ်မူ တည်ပြီး socket ကို အသုံး ပြုရတဲ့ ပုံစံ တွေက အမျိုးမျိုး ကွဲပြား နိုင်ပါတယ်။ wxWidgets မှာ အောက်ခံ platform အတွက် ပူစရာ မလိုပဲ အလွယ် တကူ အသုံးပြုနိုင်တဲ့ socket class ပါ ပါတယ်။ အဲဒီ class ကို မတူညီတဲ့ ပုံစံ နည်းလမ်း အမျိုးမျိုး နဲ့ အသုံးပြုနိုင်ပြီး၊ အသုံးပြုပုံ နမူနာ တချို့ကို အောက်မှာ ဆက်ပြီး ဖော်ပြထား ပါတယ်။