วันศุกร์ที่ 5 สิงหาคม พ.ศ. 2559

Get data from google spreadsheet in Unity 5.x

ช่วงนี้ได้มาเขียนเกมโดยใช้ unity ก็สนุกดี ใช้ง่ายดี

มันมีเรื่องอยู่ว่าเวลาทำเกมมันต้องมีเนื้อหา
ผมเบื่อที่ต้องใส่ข้อมูลพวกนั้นใน unity (ก็ช่องมันเล็ก)

เมื่อเบื่อก็เลยต้องหาตัวช่วย ผมเลยไปเรียกพี่ rutcreate บอกพี่ๆ ทำ lib sync ข้อมูลจาก google spreadsheet ให้หน่อย

ก็เลยเป็นที่มาของ lib Google Sheets Sync

ง่าย สบาย จบ ไม่ต้องทำเอง 55555

lib นี้ทำมา sync ตอนเป็น editor นะครับ ไม่ได้ทำมาให้โหลดข้อมูลตอน runtime

นี้พึ่ง pull request readme ไป

ถ้าใครสนใจเอาไปลองใช้ได้ตามต้องการครับ

ถ้าติด bug หรือใช้ไม่ได้ก็บอกกันได้ครับ

วันอาทิตย์ที่ 15 กุมภาพันธ์ พ.ศ. 2558

Magnetic levitation with arduino

สวัสดีครับ ผมณัฐ ครั้งนี้จะมาสอนวิธีการทำแม่เหล็กลอย (Magnetic levitation) ครับ

ดูผลลัพท์กันก่อนเลย

มาต้องอะไรมากมาย มาเริ่มกันเลยครับ



สิ่งที่ต้องเตรียม

  1. ฐานตั้ง
  2. Arduino
  3. Hall Effect Sensor A1302
  4. Mosfet irf540n
  5. แม่เหล็ก
  6. แท่งเหล็ก
  7. สายทองแดง
  8. สายไฟ
  9. หัวแปลงไฟ 12v


การประกอบ

การสร้างมอเตอร์แม่เหล็ก
ในการพันสายทองแดงจะพันสายสายทองแดงเข้ากับแท่งเหล็กครับ
ผมใช้สว่านในการช่วยพันครับ
และการที่เราจะพันสายทองแดงกี่รอบนั้น ขึ้นอยู่กับว่าเราอยากได้ความต้านทานเท่าไหร่ครับ

Tip ก่อนที่จะพันสายไฟ ให้หากระดาษแข็งหรืออุปกรณ์ที่หนาพอมาเป็นฐานเริ่มของมอเตอร์ครับ ในรูปจะใช้อะคริลิค

ระบบนี้ผมจะใช้ความต้านทานคือ 10 ohm ครับ

วิธีการวัดว่าตอนนี้เราพันสายทองแดงได้ความต้านทานเท่าไหร่ ก็วัดได้จากการ ohm meter ครับ
ใช้ ohm meter ด้านหนึ่งจับปลายของสายทองแดง ส่วนอีกด้านต่อกับคัทเตอร์ซึ่งกดไปที่ปลายสายทองแดงอีกด้านเพื่อที่จะตัดปลอกหุ้มครับ
ระวัง อย่ากดแรงจนสายขาดนะครับ


การวาง Hall Effect Sensor A1302

เราจะวาง Hall Effect Sensor ไว้ต่ำกว่าตัวเมอเตอประมาณ 1.5 - 2 เซ็นติเมตรครับ
เวลาติดให้ติดให้เป็นระนาบเดียวกับฐานเรา และอยู่ตรงกลางของมอเตอร์ครับ




การต่อสาย

Hall Effect Sensor A1302 Pin 1 < == > Arduino Vcc 5v
Hall Effect Sensor A1302 Pin 2 < == > Arduino Pin A0
Hall Effect Sensor A1302 Pin 3 < == > Arduino Ground

ต่อไฟ 12v เข้าด้านหนึ่งสองสายทองแดง
จากนั้นทำสายทองแดงอีกด้านต่อเข้ากับ Mosfet irf540n Source


Mosfet irf540n Drain    < == > ต่อลง Ground
Mosfet irf540n Gate  < == > ต่อกับ Arduino Pin 5

http://pdf1.alldatasheet.com/datasheet-pdf/view/67486/INTERSIL/IRF540N.html



เมื่อเสร็จแล้ว
จะออกมาเป็นแบบนี้ครับ





การควบคุม

วิธีการควบคุมให้แม่เหล็กลอยนั้น เราใช้ PID ในการควบคุมครับ

PID คือวิธีการควบคุมระบบครับ

รายละเอียดของ PID นั้นจะไม่พูดถึงละกันครับ


code ของ arduino อยู่ที่นี่ครับ
wasin wongkum เป็นคนเขียน

 https://github.com/cmmakerclub/Magnetic-Levitation-System-with-Arduino/blob/master/Magnet_levitation/Magnet_levitation.ino



ตอนที่ผมทำขึ้นมานั้นก็มี wasin เป็นคนแนะนำทุกขึ้นตอนเลยครับ
สำหรับการทำแม่เหล็กลอยก็จบลงเพียงเท่านี้ครับ



วันพฤหัสบดีที่ 9 ตุลาคม พ.ศ. 2557

Realtime Thermal printer?

สวัสดีครับ

เมื่อไม่นานมานี้ผมและชมรม Chiang Mai Maker Club

ได้ร่วมกันสร้างสิ่งประดิษฐ์ขึ้นมาหนึ่งอย่าง

นั่นก็คือ (เปิดเพลง) ตึง ตึ่ง ตึ้ง

Thermal printer ที่ print ได้ผ่าน Internet ณ ที่นี้ก็คือ website


Thermal printer ที่ทำกันมานี้ก็ได้เอาไปแสดงที่งาน TEDx Chiang Mai ครับ กับบูทของ Chiang Mai Maker Club


Thermal printer ตาม dict ใน internet ก็แปลได้ว่า เครื่องพิมพ์แบบใช้ความร้อน  นั่นคือเครื่องที่ให้ใช้ร้อนลงไปกระดาษนั่นเองครับครับ


Thermal printer เราก็อาจจะเห็นได้ทั่วไปตามร้านอาหารต่างๆ
แล้ว Thermal printer  ที่ทำกันไปเนี้ยมันพิเศษยังไง


แน่นอนครับว่าปริ้นออกมาได้คล้ายกันนะแหล่ะ ก็เครื่องปริ้นนะเนอะ มันจะต่างอะไรกัน(ฮา)

ที่แตกต่างคือกระบวนการบางอย่างที่ทำให้การปริ้นเกิดขึ้นครับ

เพราะ Thermal printer ของเรานี้ไม่ว่าใครก็สามารถมาสั่งปริ้นได้เลย

งงม่ะ ลง driver ก็ไม่ได้ลง จะปริ้นได้ไงบ้าป่าว
อ่ะอ่ะ มาอ่านบทความใช่ไหม แสดงว่าใช้ internet ใช่ไหม มี broswer ก็แน่นอนอยู่แล้ว


งั้นเข้าไปที่ https://radiant-fire-8395.firebaseapp.com/#/ เลยนะ (ตอนนี้ใช้ได้แต่อาจจะไม่ได้ปริ้นนะ ไม่ได้ต่อเครื่องปริ้นเป็นบางเวลาน่ะ (〒ó〒) )

เว็บจาก link ด้านบนนี้จะทำการส่งข้อมูลไปยังคอมพิวเตอร์ (ณ ที่นี้คือ raspberry pi) แล้วจะส่งคำสั่งไปยังเครื่องปริ้นอีกที

ที่นี้เราก็จะสามารถปริ้นได้แล้วววววว ปริ้นรูปกะ bar code ได้ด้วยนะจะบอกให้


มาดูโครงสร้างกันบ้างดีกว่า กว่าจะมาถึงจุดๆนี้ผ่านอะไรมาบ้าง






Front end ที่เราใช้คือ Angularjs โดยที Firebase เป็น database และ pubnub เป็นตัว push data ไปยัง raspberry pi

Client จะส่งข้อมูลที่อยากปริ้นมา
เมื่อได้ข้อมูลมา Firebase จะเก็บข้อมูลและ push ให้เราระดับนึง (แจ่มนะ แต่ถ้าใช้จริงแพงหน่อย)
ส่วน Pubnub จะ push data ที่จะทำการปริ้นไปให้ raspberry pi จากนั้นก็จะส่งต่อไปยัง Arduino ที่เชี่อมกับ raspberry pi อีกทีนึง


ทุกกระบวนท่าจะทำงานผ่าน internet


Code ที่ใช้ใน arduino ที่เชี่ยมต่อกับ Thermal printer
https://github.com/cmmakerclub/arduino-thermal-printer-over-serial-port

Code ที่ใช้รับข้อมูลจาก Pubnub (ใช้ nodejs)
https://github.com/cmmakerclub/thermal-printer-by-pubnub/blob/master/thermal_printer.js

Code ฝั่งเว็บ (ใช้ Angularjs deploy บน firebase push data ไปยัง Pubnub)
https://github.com/allfake/AStatus



เป็นไงกันบ้างเอ่ย ถ้าอ่านมาถึงจุดๆนี้ได้ก็แสดงว่าเข้าใจกันแล้วนะ \(*T▽T*)/

ส่วนงานที่น่าจะสนใจอื่นก็มีอีกเยอะเลยแหล่ะ

ติดตามกันต่อที่ Chiang Mai Maker Club นะ

ขอบคุณที่อ่านจนเหนื่อยนะ
สุดยอดมาก


วันศุกร์ที่ 19 กันยายน พ.ศ. 2557

สร้างและใช้ package manager ใน python

ลง pip ก่อน จากนั้นสร้าง package manager โดย

pip freeze > requirements.txt
install package manager
pip install -r requirements.txt

upgrade drupal core ควรจะทำอะไรบ้าง

อัพเกรดมือ
https://www.drupal.org/node/1223018
https://www.drupal.org/node/1494290
อัพเกรดด้วย drush
https://www.drupal.org/node/1494290#comment-6882712
หลักการคือ
  • backup ทุกอย่าง (files, database mysql)
  • เก็บ .htaccess และ robots.txt ไว้ก่อน
  • เปิด maintenance
  • ลบทุกอย่างที่ไม่ได้อยู่ใน site หรือ folder พิเศษออกให้หมด
  • โหลด drupal version ล่าสุดมาวาง
  • นำ .htaccess และ robots.txt ที่เก็บไว้มาทับ
  • login administrator
  • รัน update.php โดยเข้าที่ http://ชื่อโดเมน/update.php
  • ปิด maintenance
  • ตรวจสอบความถูกต้อง
อัพเกรดด้วย drush
  • backup ทุกอย่าง (files, database mysql)
  • เก็บ .htaccess และ robots.txt ไว้ก่อน
  • drush vset --always-set maintenance_mode 1
  • drush cache-clear all
  • drush up drupal
  • drush vset --always-set maintenance_mode 0
  • drush cache-clear all
  • ตรวจสอบความถูกต้อง
  • drush เองก็จะทำ backupให้เราอยู่ที่ ~/drush-backups/
อย่าลิมตรวจ site status ด้วย
ถ้าลง module calendar systems (ซึ่งก็ลงเกือบทุกเว็บ) อย่าลืม patch core ด้วย

วันพฤหัสบดีที่ 14 พฤศจิกายน พ.ศ. 2556

How to use at command, use bluetooth HC-05

http://robopoly.epfl.ch/files/content/sites/robopoly/files/Tutoriels/bluetooth/hc-05-at_command_set.pdf
http://taktak.co.uk/2013/bluetooth-module-hc-05-bt_board-1-5-configuration/

minicom program
http://pbxbook.com/other/mac-tty.html


*linux use similar way, I think linux can find the way ^^

For Mac os

Use terminal

Connect computer with bluetooth by
USB to Serial TTL
http://yourduino.com/sunshop2/index.php?l=product_detail&p=164
(eg.)

Wiring
USB                Bluetooth
tx                     tx
rx                     rx
3.3v                 key
3.3v                 vcc
gnd                  gnd

* Importent
pin key need to powering before powering the bluetooth.
bluetooth light will slow blink, if not try again.
 Do not cross tx, rx pin.

Necessary program
minicom (this case use version 2.2)
http://pbxbook.com/other/mac-tty.html#minicom
After install set path
sudo vi /private/etc/paths
Add line /opt/minicom/2.2/bin at the end of file.
Restart terminal.

Download Silicon Labs in above link (http://pbxbook.com/other/mac-tty.html)
install 
After install need restart.

Use command
ls /dev/tty.*
Plug usb that wiring bluetooth to computer.

Use command
ls /dev/tty.*
See the add thing.
eg. /dev/tty.*

tty.SLAB_USBtoUART

Use command
minicom -s

Control program by key pad
Go to Serial port setup
Change "Serial Device" type "a" change to "/dev/tty.SLAB_USBtoUART" or your new serial
Change "Bps/Par/Bits" type "e", "g", "l", "q", "w", "v" -> change to 38400 8N1 
Change "Screen and keyboard" type "q" -> Local echo : YES.
Note that in "Screen and keyboard", "Flow Control" must set to No.

Select Save setup as dfl 
Select "exit" to start or "Exit from Minicom" for exit program
If you want program have color your should select "Exit from Minicom"

Use command
minicom -c on
Type AT 
Your will receive OK. 

/***********************************************************/

http://robopoly.epfl.ch/files/content/sites/robopoly/files/Tutoriels/bluetooth/hc-05-at_command_set.pdf
http://taktak.co.uk/2013/bluetooth-module-hc-05-bt_board-1-5-configuration/

minicom program
http://pbxbook.com/other/mac-tty.html


*linux ใช้วิธีคล้ายๆแต่บางคำสั่งไม่เหมือน คนใช้ linux คงหาวิธีได้ ^^

Mac os นะ
ใช้ terminal แทบทั้งหมดในการใช้งาน

ต่อ computer กับ bluetooth ใช้
USB to Serial TTL
http://yourduino.com/sunshop2/index.php?l=product_detail&p=164
(ตัวอย่าง)

วิธีการต่อ
USB                Bluetooth
tx                     tx
rx                     rx
3.3v                 key
3.3v                 vcc
gnd                  gnd

* สำคัญมาก
pin key จำเป็นต้องต่อไฟก่อนที่จะจ่ายพลังให้ bluetooth ไฟ bluetooth จะกระพริบช้า ถ้าไฟกระพริบเร็วให้ลองใหม่ (เร็วต่อ หลายครั้งต่อ 1 วินาที)
 tx, rx ไม่ได้ต่อสลับเหมือนตอนนำไปใช้ปกติ

โปรแกรมที่จำเป็น
minicom (กรณีนี้ใช้ version 2.2)
http://pbxbook.com/other/mac-tty.html#minicom
ติดตั้งแล้ว set path
sudo vi /private/etc/paths
เพิ่มบรรทัด /opt/minicom/2.2/bin เข้าไป
restart terminal

ดาวโหลด Silicon Labs มีใน link ด้านบน http://pbxbook.com/other/mac-tty.html
ลงโปรแกรม
จำเป็นต้อง restart

ใช้คำสั่ง
ls /dev/tty.*
เสียบ usb ที่ต่อกับ bluetooth เข้าคอมพิวเตอร์

ใช้คำสั่ง
ls /dev/tty.*
จะเห็นสิ่งที่เพิ่มเข้ามา 
เช่น /dev/tty.*
สิ่งที่เพิ่มเข้ามา
tty.SLAB_USBtoUART

ใช้คำสั่ง
minicom -s

บังคับโดยใข้ลูกศรได้
เข้าไปที่ Serial port setup
แก้ Serial Device โดย พิมพ์ a เปลี่ยนเป็น /dev/tty.SLAB_USBtoUART หรือ serial ที่เพื่มเข้ามา
แก้ Bps/Par/Bits โดยพิมพ์ e , g, l, q, w, v -> แก้ให้เป็น 38400 8N1 
แก้ Screen and keyboard โดยพิมพ์ q -> Local echo : YES
ดูด้วยว่า Flow Control ต้องถูก set เป็น no

เลือก Save setup as dfl 
จะกด exit เพื่อเริ่มหรือ Exit from Minicom เพื่อออก
ถ้าอยากให้มีสีให้ออกก่อน

ใช้คำสั่ง
minicom -c on
พิมพ์ AT 
จะได้รับ OK กลับมา

วันพุธที่ 13 พฤศจิกายน พ.ศ. 2556

example ntf24l01


vendors claims it work until 100m
He test and get 30m if payload 16
Decrease payload to 8 get 80m

lower payload size = higher range

Wiring nrf24 to arduino and rasberry pi
http://conoroneill.net/arduino-and-raspberry-pi-communicating-over-2-4ghz-with-cheap-nrf24l01-modules/

code rf24 and example C++ and C (arduino)
https://github.com/stanleyseow/RF24

install (must enable spi)
http://arduino-for-beginners.blogspot.com/2013/02/setup-nordic-nrf24l01-rf-modules-to.html?goback=%2Egde_1268377_member_217339050#%21
http://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/

how to enable spi
http://allfakeplus.blogspot.com/2013/11/raspberry-pi-enable-spi.html

In example code shoud config pin before run;
Find this line
RF24 radio(8,9); -> (CE, CSN)
CE pin 8
CSN pin 9
CE is Module Pin 3
CSN is Module Pin 4

git clone https://github.com/stanleyseow/RF24.git

It's ok to leave lcd variable in example code (It's not break the code)
outBuffer variable is data that will send

example of ardruno code locate at ./RF24/examples/
eg. ./RF24/examples/nRF24_sendto_hub/

Install in raspberry pi
code เป็นภาษา c++
ต้องเปิดใช้ spi ก่อนนะ

You must install git first

git clone https://github.com/stanleyseow/RF24.git (like above)
cd RF24/ibrf24-rpi/librf24
make
sudo make install
cd ../examples/
make

Now we get example code
 ls for see all program
 run programs
 sudo ./[name]

 eg.
 sudo ./rpi-hub


If log show RX_ADDR_P0-a is all 0 You should check your wiring again

/*********************************************************/

ระยะประมาณ 100m ตามคู่มือ
ไป test มาบอกว่าได้ 30 เมตรถ้า payload 16
ลด payload เหลือ 8 ได้ 80 เมตร
ชนกำแพงระยะก็ลดลง

lower payload size = higher range

ต่อไฟตามนี้
http://conoroneill.net/arduino-and-raspberry-pi-communicating-over-2-4ghz-with-cheap-nrf24l01-modules/

code rf24 and example
https://github.com/stanleyseow/RF24

install (ต้องลงเปิดใช้ spi ก่อน)
http://arduino-for-beginners.blogspot.com/2013/02/setup-nordic-nrf24l01-rf-modules-to.html?goback=%2Egde_1268377_member_217339050#%21
http://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/

วิธีการเปิดใช้ spi
http://allfakeplus.blogspot.com/2013/11/raspberry-pi-enable-spi.html

ใน code ตัวอย่างจะเจอ config pin จะไม่เหมือนกัน
เช่น
RF24 radio(8,9); -> (CE, CSN)
CE pin 8
CSN pin 9

Led ไม่มีก็ไม่เป็นไร code ไม่พัง
ตัวแปร outBuffer คือข้อมูลที่จะส่ง

ตัวอย่าง ardruno อยู่ที่ ./RF24/examples/
เช่น ./RF24/examples/nRF24_sendto_hub/

วิธีการลงของ raspberry pi
code เป็นภาษา c++
ต้องเปิดใช้ spi ก่อนนะ

ลง git ก่อนนะ

git clone https://github.com/stanleyseow/RF24.git
cd RF24/ibrf24-rpi/librf24
make
sudo make install
cd ../examples/
make

จะได้โปรแกรมตัวอย่างมา
 ls เพื่อดูว่ามีตัวอย่างอะไรบ้าง
 run programs
 sudo ./[name]

 เช่น
 sudo ./rpi-hub

 ถ้า log ขึ้น RX_ADDR_P0-a เป็น 0 ทั้งหมด ให้ตรวจสอบสายที่ต่ออีกรอบ