google-sheet2Html

/*! * * Google Sheets To HTML v0.9a * * To use, simply replace the "tq?key=" value in the * URL below with your own unique Google document ID * * The Google document's sharing must be set to public * */ google.load('visualization', '1', { packages: ['table'] }); var visualization; function drawVisualization() { var query = new google.visualization.Query('https://spreadsheets.google.com/tq?key=https://docs.google.com/spreadsheets/d/1-vUEZ9tae5C_OXzSi0dQPWwUrO3H5S-gImB5afFgqDg/edit?usp=sharing'); query.setQuery('SELECT A, B, C, D label A "Duration", B "Song", C "Requested By", D "URL"'); query.send(handleQueryResponse); } function handleQueryResponse(response) { if (response.isError()) { alert('There was a problem with your query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); return; } var data = response.getDataTable(); visualization = new google.visualization.Table(document.getElementById('table')); visualization.draw(data, { legend: 'bottom' }); } google.setOnLoadCallback(drawVisualization);

Wednesday, November 22, 2017

Install Servo Controller Pololu บน Linux



  ติดตั้ง Pololu Maestro Control Center บน Linux






สำหรับผู้ใช้ Linux ให้ไป download และติดตั้งที่  

https://www.pololu.com/product/1350/resources

ในขณะเขียนบทความ (20 พย 2560) ชื่อไฟล์ที download ได้คือ maestro-linux-150116.tar.gz

เมื่อได้ไฟล์มาแล้ว ให้แตกไฟล์ออก ผู้เขียนแตกไฟล์ ที่ Downloads ได้แฟ้มชื่อ maestro-linux


ในfile README.txt  แจ้งว่าการติดตั้งในระบบ ต้องมี่ package ดังนี้

libusb-1.0-0-dev mono-runtime libmono-winforms2.0-cil 


เมื่อทำการติดตั้งโดยใช้คำสั่ง ตามเอกสารใน README.txt 

 $ sudo apt-get install libusb-1.0-0-dev mono-runtime libmono-winforms2.0-cil

จะเกิด error ดังในภาพ


 


คือไม่สามารถหา package ชื่อ libmono-winforms2.0-cil ให้ทำการแก้ไขโดยติดตั้ง mono-reference-assemblies-2.0 mono-devel ทดแทน
ให้ทำการแก้ไขโดยติดตั้งด้วยคำสั่ง

$ sudo apt-get install libusb-1.0-0-dev mono-runtime mono-reference-assemblies-2.0 mono-devel

  
ก็จะทำการติดตั้งได้ ขั้นต่อไป ในTerminal ให้ใช้คำสั่ง cd ไปยังตำแหน่งที่แตกไฟล์ในตัวอย่างแตกไฟล์ที่ Downloads ให้พิมพ์คำสั่ง 

$ cd Downloads/maestro-linux 

 
จะพบไฟล์ชื่อ 99-pololu.rules เพื่อใช้ในการแก้ไขค่า permission ให้กับ users ต้องทำการ copy ไฟล์ 99-pololu.rules ไปยังตำแหน่ง     /etc/udev/rules.d/
ด้วยคำสั่ง

$ sudo cp 99-pololu.rules /etc/udev/rules.d
 

ถ้าหากได้ทำการต่อบอร์ด Pololu Servo Controller ไว้แล้วต้องทำการถอดออกก่อน ทำการเรียกโปรแกรมด้วย

$ ./MaestroControlCenter

ให้สังเกตุ มีเครื่องหมาย จุด หน้า เครื่องหมาย /  ก็จะเปิดโปรแกรม Pololu Maestro Control Center ได้












Monday, August 7, 2017

ควบคุม Arduino ด้วย Processing


ใช้Processing ควบคุมบอร์ดArduino ด้วย Firmata

 



ในกรณีทีต้องการ ควบคุม Arduino ผ่านโปรแกรม Processing ทำได้โดย การ upload firmware ชื่อ Firmata ลงไปบนบอร์ด Arduino 


การติดตั้ง Firmata ลงบน Processing ให้ทำการ download เวอร์ชั่นล่าสุดจาก http://playground.arduino.cc/Interfacing/Processing

โดยเลือกให้ตรงกับเวอร์ชั่น ของ Processing ที่ติดตั้งไว้ ในที่นี้ เป็นตัวอย่างสำหรับ Processing v3 



เลือกดาว์โหลด processing-arduino.zip


 



ทำการแตกไฟล์ จะได้ โฟลเดอร์ arduino ทำการcopy ไปยัง sketchbook ซับโฟลเดอร์ libraries


 
 


เปิดโปรแกรม Arduino เลือก file → Examples → Firmata → StandardFirmata จากนั้นทำการ อัพโหลด ลงบอร์ด 






ในโค้ดตัวอย่างให้เปลี่ยน ค่าระบุชื่อพอร์ทที่ติดตั้งบอร์ด จาก [0] เป็น ttyACM0 (ปรกติจะเป็น ชื่อแรกที่ list ออกมาทาง ด้านล่่าง
 

ตัวอย่างเช่น โค้ดเดิม

arduino = new Arduino(this, Arduino.list()[0], 57600);

ให้แก้ไข เป็น

arduino = new Arduino(this, "/dev/ttyACM0", 57600);


Sunday, July 23, 2017

ติดตั้ง Arduino core สำหรับ ESP32S




ติดตั้ง Arduino core สำหรับ ESP32S


บอร์ด NodeMCU V1.1 ESP32S มีความสามารถน่าสนใจ โดยมี WIFI และ Bluetooth ในตัวทั้ง ความเร็ว และ เมโมรี ก็มากกว่า NodeMCU V2 ESP8266 ลองดูตารางเปรียบเทียบ ภาพจาก เวป

https://www.youtube.com/watch?v=Mq1YhgS5VkY



ติดตั้งArduino core สำหรับ ESP32S ในการ

ติดตั้งบน OS Linux สามารถเข้าไปดูรายละเอียดที่ https://github.com/espressif/arduino-esp32#instructions-for-debianubuntu-linux
โดยใช้คำสั่ง ดังนี้
  หลังจากการติดตั้งให้ restart Arduino IDE จากนั้นไปที่ Tools จะมีชือ บอร์ด ESP32DevModule




รายละเอียดขา Pin Map


ภาพจาก https://github.com/espressif/arduino-esp32#instructions-for-debianubuntu-linux


Saturday, July 22, 2017

แก้ปัญหา NodeMCU ทำการ Upload ข้อมูลไม่ได้


แก้ปัญหา NodeMCU upload ข้อมูลด้วย Arduino IDEไม่ได้





เมื่อทดลองใช้ NodeMCU V2 ด้วย Arduino IDE โดยใช้ OS Linux มีปัญหา อัพโหลด ข้อมูลลงไปยัง บอร์ดไม่ได้ มีข้อความ

An error occurred while uploading the sketch

error: cannot access /dev/ttyUSB0


 

ให้ทำการแก้ไข permissionโดย ใช้คำสั่ง
 
$ sudo usermod -a -G dialout <username>
$ sudo chmod a+rw /dev/ttyUSB0


โดย <username> คือชื่อที่ใช้ในการ ล๊อกอิน ของคอมพิวเตอร์
ข้อมูลจาก

Saturday, July 8, 2017

เล่นกับ Micro:Bit แก้ปัญหา Pair Bluetooth


แก้ปัญหา Pair micor:bit ไม่ได้





ผู้เขียนได้ micor:bit จากร้าน inex



 

เมื่อทดลองเล่น โดยการทดสอบ Pair bluetooth กับ โทรศัพท์ ได้อย่างราบรื่น ลองดูวิธี
https://www.youtube.com/watch?v=L54Sp2DZibA

การเขียน ข้อมูลลงใน micro:bit ทำได้หลายวิธี เช่น JavaScript Block หรือใช้ Micro Python
http://python.microbit.org/editor.html

แล้วทำการทดสอบโปรแกรม บน micor:bit ได้อย่างไม่มีปัญหา ต่อมาได้ทำการ Pair bluetooth อีกครั้งกับ Tablet ปรากฎว่าไม่สามารถทำให้ micor:bit เข้าสู่ mode pair bluetooth ได้พบวิธีแก้ไข โดยสาเหตุมาจากสคริป hex ไฟล์ ที่สร้างด้วย micro python อยู่ทำให้ไม่รองรับการ pair

ข้อมูลจาก






….HEX files compiled form python scripts are not compatible with Bluetooth

วิธีแก้ไข ให้ใช้ ไฟล์ HEX จากการเขียนด้วย Blocks Editor หรือ ดาว์โหลด จาก เวปhttp://microbit.org/en/2017-03-07-javascript-block-resources/

แล้ว ใส่ลงไปใน Micro:Bit จากนั้น เริ่มทำการ pair bluetooth ใหม่ได้







 

Tuesday, February 14, 2017

กู้ไฟล์ USB Drive ที่โดน Format

กู้ไฟล์ บน SD card หรือ USB drive


 วิธีกู้ไฟล์ข้อมูลที่ถูกลบ หรือ format แล้ว มีหลายโปรแกรม แต่ในที่จะใช้โปรแกรมใน Linux ที่ชื่อ photorec   ถ้ายังไม่ได้ติดตั้งให้ใช้ คำสั่ง ติดตั้งดังนี้

 sudo apt-get install testdisk


เมื่อทำการติดตั้งโปรแกรมเสร็จแล้ว ให้เริ่มจาก การหาชื่อของ usb drive ด้วยการกู้ข้อมูล เปิด เทอร์มินอล แล้วพิมพ์คำสั่ง

 lsblk



 จากในภาพ จะทำการกู้ไฟล์ ในตำแหน่ง sdb1
การเรียกใช้โปรแกรม ให้พิมพ์คำสั่ง

sudo photorec /dev/sdb1



เลือก ไดร์ฟ ที่ต้องการจะกู้ข้อมูล โดยใช้ Arrow Key จากนั้นเลือก [Proceed]

หากต้องการกู้ข้อมูล จาก ไดรฟ์ ที่มี หลาย พาร์ติชั่นให้ทำการเลือกตำแหน่งที่ต้องการ ในตัวอย่างเลือกกู้ข้อมูลใน FAT 32 

ให้กด s เพื่อลบรายการทั้งหมด จากนั้นใช้ Arrow Key เลื่อนไปตำแหน่งชนิดไฟล์ที่ต้องการ กด space bar เพื่อทำการเลือก เมื่อเสร็จให้กด b เพื่อบันทึก ในตัวอย่างต้องการกู้รูปภาพ เลือก ชนิด ไฟล์ jpg (หากต้องการ ไฟล์ชนิดอื่นให้ ทำการเลือกเพิ่มเติม) 

เมื่อทำการบันทึกแล้ว จะปรากฎดังภาพ

ต่อไป กด enter เพื่อย้อนกลับไป เมนูก่อนหน้า


เลือก [Search] จะให้เลือกตำแหน่งที่ต้องการบันทึกไฟล์ ที่กู้มาได้ ว่าจะบันทึกไว้ที่ไหน


เลือกตำแหน่งที่ต้องการ ให้ ตรวจสอบ เลือก [ Free] หรือ [ Whole ] ตามที่ต้องการ              
ในตัวอย่างเลือก [ Free ] FAT 32

กำหนดตำแหน่ง ที่จะบันทึก ไฟล์ ที่กู้มาได้ 
 
เมื่อกำหนดตำแหน่งที่ต้องการแล้ว กด C
โปรแกรมจะทำการกู้ไฟล์ ตามที่ต้องการ

  Cr. http://www.tecmint.com/photorec-recover-deleted-lost-files-in-linux/

Thursday, February 2, 2017

ซิมเพล็กซ์ รีพีทเตอร์ simplex repeater

โปรแกรม simplex repeater ทำเองก็ได้

บทความนี้ แสดงวิธีการ สร้างสถานนีทวนสัญญาณ เพื่อศึกษา การเขียนโปรแกรมเท่านั้น โปรดขอคำแนะนำกับ ศูนย์ควบคุมข่าย ประจำจังหวัด ก่อน ทดสอบ ครับ

โปรแกรม ซิเพล็ก รีพีทเตอร์ ในบทความนี้ใช้ ภาษาไพทอน ร่วมกัน sound meter  ถ้าอ่านแล้วไม่เข้าใจ ขอให้ย้อน ไปดู โพสท์ เก่าๆ ก่อน  โปรแกรมนี้ จะเป็นการเรียกใช้ สคริป ให้ทำงานเมื่อมีระดับเสียงดังในระดับที่กำหนด โดยจะทำการ บันทึกเสียง 10 วินาที จากนั้น จะส่ง สัญญาณ จาก Pyserial ควบคุม ปุ่ม PTT ของวิทยุสื่อสาร ออกอากาศ ด้วยเสียงที่บันทึกไว้โดย สคริป ที่ควบคุม ชื่อ repeater.sh มีรายละเอียดังในภาพ


 เมื่อ soundMeter ได้รับสัญญาณ เสียงจาก ไมโครโฟน ดังกว่าระดับที่ตั้งไว้ จะทำการบันทึกเสียงในไฟล์ชื่อ simplex.wav 
โดยทำการบันทึกเสียง แชนแนลเดียว ด้วย คำสั่ง rec -c 1 โดยกำหนดความยาวเป็นเวลา 10 วินาที่ ด้วย พารามิเตอร์ trim 0 10
คำสั่ง sleep 0.5 ให้ หยุด 0.5 วินาที เพื่อ ให้ pyserial ทำงาน แล้วจึง ส่งเสียงออกมาด้วย คำสั่ง play simplex.wav
 
ในการใช้งาน window  กับ linux การเรียกใช้ Pyserial ต่างกันเล็กน้อย ไปดูโพสท์ เก่าๆ แล้วแก้ไข การควบคุมที่ บรรทัด #insert PTT on กับ #insert PTT off

ดูวีดีโอตัวอย่างใช้งาน https://youtu.be/z5jsPE5CeDg





ในส่วน GUI ด้วย Tkinter Python 2 มีรายละเอียดดังนี้
#!/usr/bin/python
# coding: utf-8

#program radio+computer  by HS1ZFK
#last modify 2/02/2560 ConchRepeater#  version 2.0 Sox

import os
from Tkinter import *





def SetSerial():
    print "set usb serial converter"



def RepeaterOn():
    #repeater Start
    print "start repeater"
    #print ( tiggerValue.get())
    tig = str(tiggerValue.get())
    command = "soundmeter --trigger +" + tig +" 1 --action exec-stop --exec repeater.sh"
    print command
    os.system(command)

def About():
    Message(Mwin, text="Simplex Repeater by HSZFK"
            "set Mic noise Levea ""and time then click start", bg="royalblue", fg="ivory",relief=GROOVE).pack(padx=10, pady=10)

Mwin = Tk()  #Main Window

#set Menu bar
menubar = Menu(Mwin)


#create pulldown menu
ModeMenu = Menu(menubar,tearoff=0)
ModeMenu.add_command(label="Exit ", command=Mwin.quit)
menubar.add_command(label="Set up serial port", command=SetSerial)

menubar.add_command(label="Quit!", command=Mwin.quit)
menubar.add_command(label="About", command=About)


#display menu
Mwin.config(menu=menubar, bg="light cyan")

Mwin.geometry("450x350+300+300")        #set size and position of window
Mwin.title('Simplex_Sox v2.0 by HS1ZFK')




tiggerValue = Scale(Mwin, from_=300, to=500, length=600,label="trigger",bg="light cyan", troughcolor="blue", tickinterval=25, orient=HORIZONTAL)
tiggerValue.set(370)
tiggerValue.pack()

# set button
Btn1 = Button(Mwin,text=" Start Repeater ", bg="pale green",command=RepeaterOn)
Btn1.pack()

Mwin.mainloop()     #start the event loop


Thursday, January 26, 2017

โปรแกรม อ่าน ประกาศข่าว ชมรม ออโตเมติก

ประกาศข่าว ชมรม ด้วยคอมพิวเตอร์


   เนื่องด้วย พรบ. คอมพิวเตอร์ฉบับใหม่ ที่ประกาศใช้(25 มค.2560) มีบทกำหนดโทษผู้เผยแพร่ ซอร์ดโค้ด ที่มีผู้อื่นนำไปใช้ในทางผิดกฎหมาย จึงขอประกาศไว้ในที่นี้ว่า ผู้เขียนมีเจตนา สอนการเขียนโปรแกรมเพื่อการศึกษา เท่านั้น

   ในบทความนี้ เป็นการเขียน Python script สำหรับ เรียก CQ ในการแข่งขัน CQ contest หรือ ไปใช้ในการประกาศข่าวสมาคม โดยตั้งเวลาได้ โดยใช้ กราฟฟิก GUI ของ Tkinter

ก่อนทำการเรียกใช้ โปรแกรม
สิ่งที่ต้องเตรียมคือ ไฟล์เสียงนามสกุล wav  ซึ่งเป็นไฟล์ เสียงที่ บันทึกไว้ล่วงหน้า รูปร่างหน้าตาของ โปรแกรม มีดังนี้





แถบ slide bar เพื่อเลือกการตั้งเวลา ให้รอกี่นาที จึงอ่านประกาศ ซึ่งตั้งได้ 30 นาที เมื่อทำการตั้งเวลาแล้ว ให้กดปุ่ม Start
เมื่อครบเวลาที่กำหนด จะ เล่น ไฟล์เสียง ออกทางวิทยุสื่อสาร ดังภาพ


 ภาพด้านล่าง เป็น สคริป




ในการใช้งานจริง ให้แก้ไข ที่ บรรทัด def PlayAudio โดยทำการแทรกโค้ด สังเปิดปิด สวิท ptt ของวิทยุสื่อสาร

และ ให้แก้ไข การนับเวลา ที่ start_timer ซึ่งได้แก้ไว้ให้ เร็วกว่าจริง เพื่อ บันทึกวีดีโอ
 https://youtu.be/yyIs20I4qHo


Monday, January 23, 2017

หาตำแหน่ง QRM ตอนวิธีใช้ SoundMeter

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

หลังจาก เราหาระดับความดังเฉลี่ยของเสียงรบกวนในห้องได้แล้ว เมื่อได้ยินเสียงระดับ RMS ดังกว่าที่กำหนด จะให้สคิปทำงาน ในวีดีโอนี้ จะให้ สคริป พิมพ์ ค่าเวลา ออกมาทางจอภาพ  ด้วยสคริปตั้งชื่อว่าpt.sh

 การใช้งาน soundmeter ด้วยคำสั่ง

$ soundmeter --trigger +350 1 --action exec-stop --exec pt.sh

เป็นคำสั่ง --trigger +350 เป็นการตั้งค่าให้ สคริปทำงานเมื่อ มีค่า RMS ของเสียงเกินกว่า 350

หมายเลข 1 หมายถึงให้ทำตามคำสั่ง 1 ครั้ง
คำสั่ง --action exec-stop หมายถึงให้ทำงานตามสคริป จากนั้นให้หยุดทำงาน 
คำสั่ง --exec pt.sh หมายถึงให้ทำงานตามสคริปชื่อ pt.sh

 ลองดูวีดีโอ คลิป https://www.youtube.com/watch?v=31R_6wcJiPI
 

Friday, January 20, 2017

หาตำแหน่ง QRM

หาตำแหน่ง QRM ด้วย การจับเวลา

เครื่องรับ GPS มีหลักการคำนวนพิกัด โดยคำนวณ จาก ความแตกต่างของเวลาที่สัญญาณที่ส่งจากดาวเทียมแต่ละดวงส่งถึงเครื่องรับ ถ้าเราใช้หลักการเดียวกันนี้ในการหาตำแหน่ง QRM เช่น สมมุติ สถานนีควบคุมข่าย HS1AB และ สถานนี HS1AM ซึ่งทั้ง สองสถานนี เราทราบ พิกัด GPS ต้องการตรวจหาตำแหน่ง QRM โดยการจับเวลา เมื่อได้รับสัญญาณ เสียงจาก ลำโพง (เสียงของ QRM) เอาเวลาที่แตกต่างกัน มาทำการคำนวณ ก็สามารถหาตำแหน่ง QRM ได้เช่นกัน
คลื่น เดินทางได้ 299,792,458เมตร ต่อ วินาที
นั่นคือ ใน 1 นาโน วินาที จะเดินทางได้ 29.9792458 cm

ในการตรวจจับ หาตำแหน่ง QRM ต้อง มีการติดตั้ง โปรแกรมที่ตรวจสอบ เสียงจาก วิทยุสื่อสาร ที่ทำการตั้งโทน สเควร์ เท่ากัน, สายอากาศ ที่มีกำลังขยาย ในระดับเดียวกัน อย่างน้อย 3 สถานนี แล้วนำ ค่าเวลามาคำนวณ


ในบทความนี้ จะใช้ โปรแกรม  Soundmeter 0.1.3 Python Package

ซึ่งเป็น  command line tools สำหรับตรวจวัดระดับเสียงแล้วเมื่อได้ยินเสียงตามระดับความดังที่กำหนด ก็สั่งให้ ทำตามคำสั่งสคริป

ในการใช้งาน ตัวอย่าง เช่น เมื่อได้ยินเสียงทาง ไมโครโฟน
ให้ บันทึกเสียง
หรือ ให้พิมพ์ เวลา เพื่อใช้ในการคำนวนหา QRM
หรือ ให้วิเคราะห์ เสียง  sound recognizer
หรือ เข้ารหัสเสียง เป็น GSM , FSK, codec2 ก่อน ส่งออกอากาศ

วิธีติดตั้ง Dependencies System Packages ก่อน ด้วย คำสั่ง

$ sudo apt-get install portaudio19-dev python-dev alsa-utils





จากนั้นติดตั้ง PyPi packages  ดังนี้
argparse
pyaudio
pydub
python-daemon

 ด้วยการพิมพ์ คำสั่ง

$ sudo -H pip install soundmeter --allow-all-external --allow-unverified pyaudio


หลังจากติดตั้งเสร็จ ให้ทำการ reboot เครื่อง และทดสอบผลการติดตั้งด้วย คำสั่ง
$ soundmeter

จะปรากฎดังในภาพ แสดงว่า ติดตั้ง สมบูรณ์ แล้ว

ก่อนที่จะใช้งาน ต้องทำการหา ค่าเฉลี่ย เสียง รบกวน ในห้องก่อน ในวีดีโอคลิป

 แสดง การตรวจจับ 5 วินาที่ ด้วยคำสั่ง
 https://www.youtube.com/watch?v=7dTLNtQWQTY


$ soundmeter --collect --seconds 5











เมื่อต้องการ เรียกใช้งาน เมื่อมี ระดับ เสียง RMS มากกว่า 317 แล้วให้ สคริป ทำงาน 1 ครั้ง แล้วหยุดทำงาน ตัวอย่างเช่น ต้องการให้ บันทึกเสียงสนทนา เราต้องเตรียม สคริปไว้ก่อน ในตัวอย่างใช้ชื่อว่า record.sh
 ให้พิมพ์ คำสั่ง

$ soundmeter --trigger +317 1 --action exec-stop --exec record.sh

ส่วนรายละเอียด คำสั่งอื่นๆ ลองไป อ่านดูใน
https://pypi.python.org/pypi/soundmeter