2019年2月28日 星期四

[leetcode][C][python] 53. Maximum Subarray

這題雖然是easy, 但是還是卡了一下,一開始雖然想到大致上O(n)的做法,但是沒有想得很透徹,寫了一堆例外處理卻一直有處理不完的case
後來重新整理一下思緒,終於將架構改得比較完整


[leetcode] 分享leetcode 的解法

最近剛好有一段空閒,想說刷一下leetcode
也順便把有跑過的code放到github上,成績較好或是想法比較有趣的部份就在blog做一下紀錄

以前寫過的部分題目當初皆用C 寫,
現在新刷的部分由於想要快速驗證想法,皆使用python3來做,有空才會再用C 寫一遍

2019年2月25日 星期一

[leetcode][python] 46. Permutations

leetcode 連結:
https://leetcode.com/problems/permutations/



這題是找出一組不重複的集合的所有排列組合


做法很簡單,使用遞迴的方式,輪流從集合內拿出不同的內容放入解答內,直到集合內所有內容被挑完,這樣解答就是其中一種可能性


[leetcode][C] 50. Pow(x, n)


https://leetcode.com/problems/powx-n/



顧名思義,這題是想自己實做pow(x, n)

最簡單的方法當然是直接把x 乘以n次,但這樣時間複雜度就變成O(n),

要加快速度,有一個做法就是重複利用已經乘過的數

舉例來說,pow(2,5) = 2*2*2*2*2 = (2*2)*(2*2不用重算)*2


[leetcode][python] 48. Rotate Image

leetcoded 連結:
https://leetcode.com/problems/rotate-image/


這題基本概念是把矩陣想成是像"回" 字形一樣一圈圈,一次處理一圈


2018年8月7日 星期二

LED 旋轉顯示器

demo 影片

source code: https://github.com/cy-arduino/led_spin_display

載具(開發用):

馬達: 無刷( 2212, 980KV)

電變: 30A

PWM轉速控制: arduino nano


本體

LED:

單色16顆


供電:

電池


傳輸:

無線(BT HS-05, SPP)


轉速偵測:

光遮斷器


開發版:

arduino nano



設定方法: 

透過BT SPP,下command控制LED 顯示內容


範例:

好棒棒.txt 

gogogo.txt

2016年9月5日 星期一

[研究中]naze32(rev5) + FrSky X8R + MinimOSD + Bluetooth


Naze32 rev5
user manual
http://www.abusemark.com/downloads/naze32_rev3.pdf

MinimOSD 設定
https://oscarliang.com/minimosd-micro-setup-naze32-pid-rssi/

Bluetooth 設定 - done

  • 可以使用這個 http://ddddiy.blogspot.com/2014/02/hc-05-bt-module.html
    • baudrate 設定有對應即可正常運作
  • 直接接到版子中央的TX/RX pin(這邊應該就是轉USB port的hardware UART1)
  • 這邊實際使用時發現Naze32 TX RX  是倒過來的,所以跟BT module 是TX-TX, RX-RX,跟一版接法不同

FrSky X8R

  • 控制訊號
    • PWM - done 
      • 直接接channel 1-8
      • 這樣由於pin被佔據,無法使用uart2/softserial/telemetry....
        • https://github.com/cleanflight/cleanflight/blob/master/docs/Blackbox.md
          • Pin RC3 on the side of the board is UART2's Tx pin. If Blackbox is configured on UART2, MSP can still be used on UART1 when the board is armed, which means that the Configurator will continue to work simultaneously with Blackbox logging. Note that inPARALLEL_PWM mode this leaves the board with 6 input channels as RC3 and RC4 pins are used by UART2 as Tx and Rx. Cleanflight automatically shifts logical channel mapping for you when UART2 is enabled in Ports tab so you'll have to shift receiver pins that are connected to Naze32 pins 3 to 6 by two.
    • SBUS - 研究中
      • Naze32 rev5 + FrSky X8R 需要SBUS 反向器,參考
        • https://oscarliang.com/sbus-smartport-telemetry-naze32/
          • 使用電晶體 http://skory.gylcomp.hu/alkatresz/bc547b.pdf
        • 或是直接使用inverter http://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf
    • telemetry - 研究中
      • 需注意要使用SBUS, PWM gpio 被占據無法使用
        • 參考 https://oscarliang.com/sbus-smartport-telemetry-naze32/
    • RSSI- 研究中

2016年8月19日 星期五

Android - Nexus 刷官方image

https://developers.google.com/android/nexus/images


  1. 進入fastboot
    1. adb reboot bootloader
  2. unlock bootloader
    1. fastboot flashing unlock
    2. fastboot oem unlock <==舊裝置用這個
  3. 燒image
    1. 執行flash-all script
  4. lock bootloader
    1. fastboot flashing lock
    2. fastboot oem lock <==舊裝置用這個


Nexus4: occam
目前最新image 為5.1.1 (LMY48T)


2016年8月18日 星期四

碳刷馬達毀損分析


原本50%油門跑了十多條3s電池都沒事
改成100%油門後一條沒跑完就卡死冒煙
原因是漆包線從電刷夾漆包線的地方斷開
這應該算是馬達瑕疵,夾起來的地方有傷到使得線徑變細 導致大電流時在傷到的地方燒斷,馬達被噴出來的漆包線卡死

拆開後可發現馬達的碳刷沒什麼磨損,如果沒意外壽命應該可以很長...








自製小四軸機架

自製機架加上8520馬達,使用F180 機板
總重38.5g







2016年8月8日 星期一

DIY PC 加裝第二電源供應器

應該是高中時做的...
將第二顆電源供應器的啟動/接地與第一顆相連,並改裝放入光碟機的殼內,用來獨立供電給多顆硬碟




DIY 顯示卡改裝渦輪風扇






DIY LAMA 直升機倒飛

這個部分跟一般六動直升機倒飛不同,而是直接將葉片反裝,再修改遙控系各動的正反性來達到(所以沒辦法降落XD)

https://goo.gl/photos/yEcdytLwuHQacgma9

自製電壓測量電路


影片可看到使用可變電阻分壓,轉動可變電阻,LED燈號會隨之變動

https://goo.gl/photos/yEcdytLwuHQacgma9

CASIO P505 改裝

這是之前舊數位相機的改裝,架起來後看起來很厲害

  1. 增加外接行動電源(4*3號充電電池)
  2. 閃光燈遮光罩
  3. 外接廣角/微距鏡
  4. 4.2v定電壓座充






















大型壓克力機械魚

這是老弟在大學時的作品,當時幫忙構想了驅動馬達的部分,使用PWM 控制

自製四軸直升機飛控板

基本上這個架構是自己陸續看一些東西後整理出來的一個大致的架構
目前input 跟output 部分都有經驗了,會等姿態的部分研究差不多後,就可以全部都整合都起來...




考慮到成本與實際上飛行時的載重,應該會採用這台450來當作載具測試
用普通的2212馬達/電變加上紅白機架兩千塊即可打發,撞壞比較不傷荷包



使用gyro + g-sensor 達到姿態控制

這篇文章用來紀錄一下使用sensor取得物體姿態(yaw/row/pitch)的部分
  • g-sensor
    • 在物體靜止不動時,加速度只有固定的地心引力,故可透過此加速度在三軸上的分量來計算姿態
    • 但在物體動作時,除了重力,物體本身改變姿態的加速度會混進去造成失真,以前做的的專題就是只使用g-sensor, 在快速動作時,可看到螢幕上顯示的動作與實際物體動作有一點點落差
  • gyro
    • 輸出單位時間內在某個軸上旋轉的角度(很精確)
    • 時間長會有積分誤差
      • 簡單的使用一軸來舉例
        • 瞬間旋轉10度,此時由於精確度很高,可能量出來誤差只有0.001度,所以此時取得的姿態仍很正確
        • 但隨著時間增加,物體一直動作,每次轉動的誤差會一直累加,造成一段時間後物體的角度跟程式內上看到的角度誤差會越來越大
  • gyro+g-sensor 
    • 結合兩種sensor的優點,去算出一個接近真實姿態的輸出,既可精確表達姿態,又能避免誤差累積
      • 卡爾曼濾波
        • http://ddddiy.blogspot.tw/2014/02/blog-post.html

2016年8月7日 星期日

使用手機實做飛機黑盒子


這是2008年念研究所時跟同學寫的其中一個專題
當初會做這個專案,最主要目的是我為了想個好理由光明正大的來玩遙控飛機,不過做出來似乎效果不錯,出乎意料的在課程上拿了高分...
最近看到照片突然好懷念以前研究所的時光,寫出來紀念一下


整體主要分幾個部分

  1. 手機端(openmoko)
    1. 儲存GPS資料(經緯度與高度)
    2. 讀取g-sensor值
      1. 偵測碰撞後傳簡訊回報GPS坐標<==墜機時可以找到飛機
      2. 透過bluetooth(SPP)及時送出g-sensor的值 <==很炫,但距離短不實用
  2. NB端
    1. 透過bluetooth接收g-sensor 的值
      1. 即時計算姿態
      2. 使用opengl即時顯姿態
    2. offline
      1. 將手機儲存的GPS 紀錄使用google earth reply, 在PC上replay 整個飛行的軌跡