2018年3月6日 星期二

關於及arduino的一些瑣碎小事

  • 使用arduino IDE的範例程式Fade, 使用D13作為LED。
    • arduino nano只會顯示亮暗, 沒有漸進變化過程
    • arduino micro能以on-board LED顯示漸亮漸暗
    • 原因分析:
      nano 的 D13 不支援PWM
      micro 的 D13支援PWM
  • arduino接上ubs電源時, on-board LED 一直快速閃爍, 線路連接的電子零件沒有通電運作
    • 這是透過USB供電時, 短路防護的信號
    • 但要留意, 若是透過RAW供電時, 則沒有短路防護。
  • 使用Serial.printf("%4.2f", floatVar) 得到結果為 ?
    • 原因分析:
      arduino IDE只支援C語法, 但是不支援float的格式語法, 必須另外寫程式來格式化輸出
    • 我的解決方法: (可以放在setup段來測試)
        Serial.begin(9600);
        //sprintf format test loop
        float celsius=-55.25;
        float fahrenheit;
        while(celsius<=155){
       
          fahrenheit = celsius * 1.8 + 32.0;
          Serial.print(celsius);Serial.print(" ");
          Serial.print(fahrenheit);Serial.print("  ");

          char *numC=(char *)"000.00C ";
          char *numF=(char *)"000.00F ";
          //arduino的printf format不支援float, double的格式, ex: %4.2f , 輸出會出現?
          //Serial.printf("%4.2fC  %4.2fF", celsius, fahrenheit);
          sprintf(numC, "%4i.%02i", int(celsius), int(abs(celsius-int(celsius))*100));
          sprintf(numF, "%4i.%02i", int(fahrenheit), int(abs(fahrenheit-int(fahrenheit))*100));
          Serial.print(numC);Serial.print(" ");Serial.print(numF);Serial.println(" ");
          celsius+=3.97;
        }
       
  • 在LCD上, 以單一字元顯示 ℃ 或 ℉
    • 定義℃ 或℉ 符號
    • 在LCD上印出自定符號
    • //在程式宣告段
      byte degC[8] = {
        B01000,
        B10100,
        B01000,
        B00011,
        B00100,
        B00100,
        B00011,
      };
      byte degF[8] = {
        B01000,
        B10100,
        B01000,
        B00111,
        B00100,
        B00111,
        B00100,
      };

      //在setup()段,
        lcd.createChar(0, degC);
        lcd.createChar(1, degF);

      //要印出字元時
      lcd.write(byte(0));  //印出 ℃
      lcd.write(byte(1));  //印出 ℉

2017年6月13日 星期二

GPS以uart與樹莓派Raspberry Pi 3連接使用紀錄

使用材料:
  1. 樹莓派Raspberry Pi 3 (以下簡稱為RasPi3)
  2. GPS Receiver - LS20031 5Hz (66 Channel),
    https://www.sparkfun.com/products/8975 
    1. 預先焊接針腳, 使用4條雙母杜邦線與樹莓派連接
      可參閱SparkFun網頁上的Connection Tutorial
    2. 留意GPS模組使用電壓3.3V
    3. GPS模組的TX連接到RasPi3的GPIO Pin10(RXD)、
      RX連接到RasPi3的GPIO Pin8(TXD)。
      詳細的RasPi3 GPIO針腳定義請參閱: https://pinout.xyz/#

樹莓派的作業系統, 我是以AiGO 2017 v1為架構, 再新增軟體套件
$ sudo apt-get update && sudo apt-get upgrade -y
$ sudo apt-get install build-essential gpsd gpsd-clients python-gps joe
$ sudo reboot



其中joe是我個人在linux系統下慣用的文字編輯器, 作業系統內建有nano 或 vi可以使用。

針對GPS使用RasPi3的UART連線, 作業系統要新增設定/boot/config.txt,
$ sudo joe /boot/config.txt
在文件的最後一行加入
enable_uart=1
存檔後, 重新開機
$ sudo reboot 

在RaspPi3的系統中, 是以/dev/ttyAMA0與 UART0連線的, 所以啟動gpsd時, 要指向這個裝置

$ sudo gpsd /dev/ttyAMA0 -n -F /var/run/gpsd.sock
$ cgps  -s


參考網頁都是像上面寫的指令一樣, 但是我一直無法在cgps中看到gps傳資料進來, 因此我執行cgps時, 不加-s參數, 可以監視GPS模組的訊息是否傳入。
後來發來gpsd有一支程式gpscat, 也可以直接讀取gps模組傳入的訊息, 使用方式如下:
$ gpscat -s 57600 /dev/ttyAMA0
其中 -s 57600是傳輸速率(baud rate), 我試過57600 bps是這款gps模組的上限。

令我疑惑的是, 若我沒有執行 "gpscat -s 57600 /dev/ttyAMA0" 則 cgps 無法正常讀取GPS模組的訊息, 因此我推論是沒有設定 /dev/ttyAMA0 的傳輸速率所致。
最後在gpsd的faq網頁中, 查到可以使用 "stty speed 57600 < /dev/ttyAMA0" 來設定傳輸速率。其餘的執行程序如下:
sudo systemctl stop gpsd.socket
sudo systemctl disable gpsd.socket
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
sudo killall gpsd
stty speed 57600 < /dev/ttyAMA0

sudo gpsd -n /dev/ttyAMA0 -F /var/run/gpsd.sock
cgps

終於可以從 cgps 讀到GPS模組的定位資訊。
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqklqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x    Time:       2017-06-12T15:52:14.000Z   xxPRN:   Elev:  Azim:  SNR:  Used: x
x    Latitude:    24.XXXXXX N               xx 193    66    048    26      Y   x
x    Longitude:  120.XXXXXX E               xx  15    63    277    00      N   x
x    Altitude:   167.7 ft                   xx  13    62    019    33      Y   x
x    Speed:      0.5 mph                    xx 129    54    138    26      N   x
x    Heading:    192.6 deg (true)           xx  20    50    343    23      N   x
x    Climb:      0.0 ft/min                 xx   5    40    056    39      Y   x
x    Status:     3D FIX (266 secs)          xx   2    39    141    24      Y   x
x    Longitude Err:   +/- 46 ft             xx  29    36    254    19      Y   x
x    Latitude Err:    +/- 67 ft             xx  24    27    182    00      N   x
x    Altitude Err:    +/- 73 ft             xx  21    17    320    15      N   x
x    Course Err:      n/a                   xx  30    10    044    00      N   x
x    Speed Err:       +/- 92 mph            xx  18    03    290    00      N   x
x    Time offset:     -872.718              xx                                 x
x    Grid Square:     PL04gc                xx                                 x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj



參考資料
  1. https://medium.com/@phutidus/%E7%94%A8-raspberry-pi-gps-%E6%A8%A1%E7%B5%84%E5%BB%BA%E7%AB%8B-stratum-1-%E7%9A%84-ntp-server-cb1b501a5f91 
  2. http://www.catb.org/gpsd/faq.html
  3. http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3
  4. https://learn.adafruit.com/adafruit-ultimate-gps-on-the-raspberry-pi/using-uart-instead-of-usb 

2015年11月13日 星期五

幫Time Capsule (Apple)更換新硬碟

幫Time Capsule (Apple)更換新硬碟

上一回幫自己的Time Capsule更換新硬碟, 好像沒留下任何記錄, 昨天第2次更換Time Capsule的硬碟, 把過程紀下來。以下步驟只是個人的過程紀錄, 僅供網友們參考, 實際更換步驟, 請自行斟酌, 恕不負任何責任。

  1. 先將Time Capsule的設定備份到電腦端, 以免更換後設定被清除掉...
  2. 關閉所有電腦端的Time Machine的還原機制。
  3. 關閉Time Capsule電源, 其實就只是移除電源線和網路線。
  4. 拆開Time Capsule, 取出舊硬碟, 更換新硬碟。(請自行參閱:Apple Time Capsule Model A1302 Hard Drive Replacement- https://www.ifixit.com/Guide/Apple+Time+Capsule+Model+A1302+Hard+Drive+Replacement/2750)
  5. Time Capsule重新開機, 由AirPort工具程式進入Time Capsule系統, 將新硬碟清除(重新格式化), 設定好磁碟名稱和檔案共享。
  6. Time Capsule會將硬碟分割成3個磁區: APconfig、APswap(前2個為系統內部用的, 不用理會)和資料分割區(名稱是在Time Capsule磁碟中設定的)。我們只需要將資料分割區, 由舊硬碟複製到新硬碟。
  7. 將舊硬碟複製到新硬碟中, 有兩種方法:
    1. 將舊硬碟以外接盒與電腦連接, 透過網路(會很慢), 將檔案複製到Time Capsule的新硬碟中。我這次是因為手上沒有可以讀取4TB硬碟的外接盒或外接線, 因此用這個方法, 將近2TB的資料透過Giga bits網路傳輸花了1天多的時間複製資料。
    2. 我想還有另外一個更快的方法: 關閉Time Capsule電源, 取出新硬碟, 將這兩顆硬碟分別接上外接盒。舊硬碟有3個分割區, 我們只需要將資料分割區的所有檔案, 由舊硬碟複製到新硬碟。
    3. 但上述的2個方法, 無論是那一種, 若硬碟中有Time Machine的電腦備份檔案, 則須留意複製的方法, 請參閱:ime Machine:如何將備份檔從目前的備份磁碟傳送到新的備份磁碟- https://support.apple.com/zh-tw/HT202380

2015年8月23日 星期日

Openoffice.org Writer 如何整批壓縮文件內的圖檔解析度

身為Openoffice.org Writer愛用者,一直以來被這個問題困擾:文件要插入大量的圖片時,總是要先縮小解析度,再來插入文件內。萬一忘記了,就麻煩了。
 今天請出google大神,找到另外一篇介紹如何將Impress簡報圖片壓縮的文章,步驟為:

  1. 開啟 Impress/工具/擴充軟體管理程式
  2. 以線上方式取得更多擴充軟體,開啟網頁找Oracle Presentation Minimizer,下載。
  3. 在擴充軟體管理程式中,增加/將下載的.oxt檔案新增/為所有使用者/溜覽全部合約/接受。
  4. 重啟 Impress 。會在工具中出現/最小化工具。
  5. 但是這是給Impress用的,那Writer呢?
方法有了,再來就是找合用的擴充軟體,來壓縮Writer文件中的圖片囉~
  1. http://extensions.services.openoffice.org/en/search網站中,找到PixCompress,下載[Download extension]。
  2. 在Openoffice.org Writer/工具/擴充軟體管理程式
  3. 在擴充軟體管理程式中,增加/將下載的.pixcompress.1.x.x.oxt檔案新增/為所有使用者/溜覽全部合約/接受。
  4. 重啟 Writer 。會在工具中出現/Minimize pictures。
  5. 執行 工具/Minimize pictures,出現PixCompress對話框/按一下[All pictures],將所有圖片最小化。
  6. 存檔前請三思,一旦存檔後,所有圖片就無法恢復原來的尺寸。
  7. 若是反悔的話,要按很多次的Ctrl+Z,回復到圖片縮小前的狀態;或者直接關閉檔案不要存檔。

2015年8月22日 星期六

Windty 數值模擬預報

沒想到資料開放,網頁技術神速的進步,現在也有數值天氣預報的網站可以使用。
https://www.windyty.com
而且還很大放的給你使用鑲嵌網頁的功能:https://embed.windyty.com/embedmake.html



可以鑲嵌在網頁中,呈現某區某固定時間的預報資料,例如2015/08/25 00:00台灣附近海拔1500公尺: