2018年5月4日 星期五

為什麼我看好特斯拉(有強烈特粉徧見,理性勿入)

首先這不是一個客觀分析,也沒有大量數據做為支持的文章。這篇文章的目的僅供個人自娛與記錄之用。

特斯拉是我第一個主動因為看好其產品,並認為其產品設計與理念讓我有心動的公司。但它不是第一個讓我有這樣感受的產品。第一個讓我有這樣感受的公司是Apple,當初在iPhone 出現的幾年前,當我看到Mac OS X與其產品時,我的心裡就發出"哇!這樣的作業系統,這樣的電腦真棒的感嘆!"但在那個年代,我只是初出社會的年輕人。沒有什錢與能力進行投資(投資要趁早,沒錢不是借口)。記得那時Apple的股價好像是30元美金,沒去研究以為美股和台股一樣一次要買一千股,也沒有管道可以買美股,就因此做罷。從事後諸葛的角度來看自己痛失了一次成功投資的機會。數年之後看到了特斯拉,心裡又發出了同樣的感受。不過因為年齡的增長,對於特斯拉做了一些個人的調查。
    首先特斯拉的主導人是馬斯克,電動車 Model 系列會出現是他個人意志的實現。我進場的時機是在2017年的三月,Model 3表定開始量在七月。所以我不是很早期就進場的投資人(目前處於套牢階段)。對於特斯拉,我第一個思考的問題是"馬思克是不是在嚎洨?!",雖然他們的電動車的設計和性能讓人覺得他們是電動車的領先者,但要真要投錢,還是會有些怕怕。要為這個問題尋求答案,自己的參考點是,1. Space X 的成功。2. 超級充電站的廣佈。Space X如果有股票,我會先買Space X的股票,但可惜沒得買。從Space X的成功讓我覺得馬思克是有能力實現他在特斯拉想做的事情,即使從目前的結果來看他在跌跌撞撞,但他仍在不斷地向他的目標前進。Space X可做為能力的檢驗,而超級充電站的廣設則是我做為他實現決心的參考。電動車最大的二個限制,一是巡航里程;二、是充電的時間與便利性。特斯拉真的投錢在處理這二個問題,而不像其他車廠一樣做壁上觀。如果只是要削錢,太多項目和東西可以削,不用這麼苦幹實幹。確認了他們有決心有能力後,接下來是看他們的產品有多少的優勢與競爭力。
    對於特斯拉比較深入的分析好像不容易找到,我只是一個素人,也拿不到研究機構的文獻,所以只能利用google大神找得到的資料來做判斷。首先,繁體中文的資料與報導,既稀少又錯誤百出。所以只好用國中的英文程度努力去理解英文的報導與網站資料。以下是自己列出來的問與答。

特斯拉電動車與其他"傳統"車廠的優勢與劣勢?
     a. 巡航哩程與充電便利性
          電動車的二大問題基本上已經被解決一大部份。只剩Super charge 要三十分鐘滿電的條件,但在家可以自行充電。雖然對於台灣大多數住公寓來說,是很難在停車位牽電,但對於透天有車位的家庭來說,還可能比油車方便。而且特斯拉在造車的同時也在不斷地增加超級充電站的數量。相較其他車廠與電池與自動駕駛系統等項目,這個項目是明顯超前最多的。

    b. 電池是電動車主要的成本佔比,電池的品質、與效能和其他車廠相較有何優勢
        我不是電池專家,初步的判斷是,
          1、特斯拉的電池可以使用super charger, 目前沒有一家市售車可以相比。
          2、特斯拉的巡航距離較遠
       ( 參考連結 https://evobsession.com/10-electric-cars-range-new/ )。

         3、電池性能穩定( https://news.cnyes.com/news/id/4096283 )其他車廠沒有數據可以比較。

     c. Autopilot 是否領先其他競爭者
         我記得之前有研究說 Tesla 在自動駕駛這個領域上沒有技術上的領先( http://www.siliconbeat.com/2017/04/03/ford-winning-self-driving-car-race-uber-lags-behind-new-study-says/)。起初我有些驚呀細看了領先的廠商又有點又氣又好笑,因為領先的全是美國汽車大廠,連google 的自駕車都輸給他們。如果他們這麼前衛,那為啥不拿比較低階的主動安全來提昇現在使用者的駕車安全。但再進一步了解之後發現,如果從自動駕使的等級上來說,確實是沒有領先。但有個重要的論點值得參考,那就是如果特斯拉利用他們的 autopilot 系統進行線上資料收集與訓練,那他們就是擁有最多資料的公司。要進到全自動駕駛,這些資料會成為訓練系統的關鍵因素。即使那些傳統車廠己經在進行全自動駕駛的研發,但從我個人的角度來看他們是不可能能領google 和特斯拉的,因為他們沒有在進行資料的收集,怎麼可能訓練和研發出好的系統呢?!
   

   其他綜合的部份可以參考以下影片的內容做判斷(https://youtu.be/CpCrkO1x-Qo)。影片內容很長,以我破弱的英文來理解,片中的超強阿伯,他拆過很多車,特斯拉的電池模組與電控電路是阿伯十分稱讚的。阿伯雖然很客氣說自己熟悉的機械領域是恐龍科技是老古董,但他對於Model 3 在機械的設計與組裝品質的評價應該十分專業與客觀的。文中對於電池的看法也符合我查找的資料。目前全球最大的電池工廠沒有別家,就是Tesla 的gigafacotry。特斯拉在電池的部份是和Panasonic 合作的,他們的合作應該有排除其他車廠,所以其他車廠只能和韓國的電池廠合作。(但我不確定日系的車廠也是否如此)我猜想,除了模組電池電控的領先之外,電池的配方在成本與能量密度上也是領先韓國電池廠的。另外還有一個潛在的背景因素是其他車廠與電池廠所沒有也可能忽略的。這個是影片中阿伯一直讚嘆特斯拉電路設計時讓我覺得這可能是在電路與電池設計上領先的重要因素。那就是Space X的技術與設定概念。特斯拉的行車電腦的電路設計對於電子產品的生產來說 ,技術上沒有太大的難度,目前手機的電路複雜性也不惶多讓。但真的困難的地方是如何讓這些精密的電路保持穩定性?!我猜想,他們一定有引用航太工業的電路設計方式來處理中控電腦與電池電路與電池封裝的方式。
今天有點累了,先寫到這,昨天馬思克的電話會議引起股價跌了7%,要查看看發生了什麼事!


2018年4月23日 星期一

How to add new patterns to tesseract (create new traineddata)


Environment
jTessBoxEditorFX-2.0-Beta / tesseract 4.0.0-alpha.20180109
download url
https://jaist.dl.sourceforge.net/project/vietocr/jTessBoxEditor/jTessBoxEditorFX-2.0-Beta.zip


The zip file already includes tesseract 4.0, it doesn't download.

Process steps
1. Build the private patterns with paint. The file name must be followed the example, other wise the process might cannot work well. The file name is temp.font.exp0.tif
2.  Using tesseract to build the box file as following command line.
          tesseract temp.font.exp0.tif temp.font.exp0 batch.nochop makebox
3.  Using jTessBoxEditor to adjust the .box file to make sure the mapping between letter and images are correct.
4. build font_properites.txt file for bat file to use.
5. Execute the bat file to build the  temp.traineddata for emug to use.

The following is the content of the bat file.
============START OF BAT===================
echo Run Tesseract for Training..
..\tesseract.exe temp.font.exp0.tif temp.font.exp0 nobatch box.train

echo Compute the Character Set..
..\unicharset_extractor.exe temp.font.exp0.box
..\shapeclustering.exe -F font_properties.txt -U unicharset temp.font.exp0.tr
..\mftraining.exe -F font_properties.txt -U unicharset temp.font.exp0.tr

echo Clustering..
..\cntraining.exe temp.font.exp0.tr

echo Rename Files..
rename normproto temp.normproto
rename inttemp temp.inttemp
rename pffmtable temp.pffmtable
rename shapetable temp.shapetable
rename unicharset temp.unicharset

..\combine_tessdata.exe temp.
==========END OF BAT======================

2018年4月22日 星期日

如何加入自己的模版 How to add the patterns to Tesseract OCR

環境
jTessBoxEditorFX-2.0-Beta / tesseract 4.0.0-alpha.20180109

下載連結
https://jaist.dl.sourceforge.net/project/vietocr/jTessBoxEditor/jTessBoxEditorFX-2.0-Beta.zip

連結下載的壓縮檔已內含 tesseract 的執行環境,不須另外下載。

操作步驟
1. 建立模版圖檔,檔名的格式似乎有特別的結構需要遵從。檔名取名為temp.font.exp0.tif 如果沒有把握能正確完成,請使用這個檔名。
2. 使用tesseract 將模版圖檔處理後產生 temp.font.exp0.box 檔。產生.box  檔案的命令為
 
          tesseract temp.font.exp0.tif temp.font.exp0 batch.nochop makebox

3. 使用jTessBoxEditor 調整 .box 檔案 以確保模版與字元的對應是正確的。
4. 建立font_properties.txt 檔案以供後需.bat 檔案使用
5. 執行以下.bat 檔案中的命令,以產生最後emgu可以使用的 temp.traineddata.

以下是.bat file 的內容
The following is the content of the bat file.
============START OF BAT===================
echo Run Tesseract for Training..
..\tesseract.exe temp.font.exp0.tif temp.font.exp0 nobatch box.train

echo Compute the Character Set..
..\unicharset_extractor.exe temp.font.exp0.box
..\shapeclustering.exe -F font_properties.txt -U unicharset temp.font.exp0.tr
..\mftraining.exe -F font_properties.txt -U unicharset temp.font.exp0.tr

echo Clustering..
..\cntraining.exe temp.font.exp0.tr

echo Rename Files..
rename normproto temp.normproto
rename inttemp temp.inttemp
rename pffmtable temp.pffmtable
rename shapetable temp.shapetable
rename unicharset temp.unicharset

..\combine_tessdata.exe temp.
==========END OF BAT======================



2018年3月30日 星期五

Arduino+L298N+high toque stepper motor speed control mechanism 步進馬達控速 (240RPM to 45RPM)

    控制電路可以讓步進馬達不使用減速齒輪組的條件下,在二個不同的轉速之間切換(240~180RPM與90~30RPM之間)進行變速以避免L298N過熱與降低轉速時的震動,控制電路使用可變電阻與控制duty cycle的方式進行調速。控制電路使用一個Arduino UNO,一個L298N 馬達控制模組,一個電驛模組搭配組成開迴路的馬達轉速控制。使用12DCV與5DCV做為步進馬達的供電電壓。步進馬達的型號是PKP266D28A 東方馬達公司製造。這個變速方式的限制是,馬達軸上不能有反轉矩的力量。否則會因為馬達未激磁時沒有力量可以抵消反轉矩,這樣會造成反轉與劇烈震動的情況。另外這個程式的功能很單純只進行馬達的轉動控制。如果要處理器同時要處理其他的工作例如通訊等其他較為耗時的運算時,用來控制duty cycle 的機制也要進行改動與調整。熟悉Arduino 與步進馬達控制的人可以直接參考以下的電路與程式碼。

     Using relay to switch the motor supply voltage can be more easy to switch RPM in two ranges. using this method can avoid the L298N over heat and reduce the shaking when motor was under the low speed. The RPM of the stepper motor can be fine turn with a variable resistor and a ADC input. The control circuit is assemble by an Arduino UNO, a L298N motor driver, a single relay module, and a +5VDC/+12VDC dual output switching power.The part number of stepper motor is PKP266D28A. The following code is used to implement low RPM setting.

 在調速的部份與Arduino IDE 內建的example 不同的地方在於加入了Delay以及使用關閉電源的方式來降低馬達的平均驅動電流,以避免L298N過熱的狀況發生。程式中設定Delay 7ms 是為了讓馬達在90RPM的轉速設定下能夠完成2個steps的驅動,約需時6.6ms。

要降低馬達的轉速只需要增加iDelayTime的數值。馬達需要轉動2steps的時間增加等於馬達的轉速降低。

依程式的設定最低的轉速可以降至 100cycle * 57 ms = 5.7sec/rotate 約等於 60sec/5.7sec=10.52 rpm。

// set the motor speed:
digitalWrite(3,LOW);          // turn off the relay to supply +5VDC to stepper motor. myStepper.setSpeed(90);  // step 1/100 of a revolution:
myStepper.step(-stepsPerRevolution/100 );
// tow steps will take 1sec/(90rpm/60second*200steps) is about 3.3 ms per step. 
delay(7);         // Time windows for driving the motor for two steps 
// turn off the stepper motor supply power 
digitalWrite(8,LOW); 
digitalWrite(9,LOW); 
digitalWrite(10,LOW); 
digitalWrite(11,LOW);
int iDelaytime = map(iADCRead, 0, 1000, 1, 50);
delay(iDelaytime); // turn off duty time

2018年2月26日 星期一

c# retrieve datetime field from sqlite when you have an error "String was not recognized as a valid DateTime."

"String was not recognized as a valid DateTime." This error is caused by the data string which you save in the database with wrong formate. for solving this error, you just need to adjust you data string to follow the formate as "yyyy-mm-dd HH:MM:SS" or "yyyy-mm-dd HH:MM:SS.sssss" if you have ms information need to save. 發生錯誤 "String was not recognized as a valid DateTime." 是因為在sqlite 資料庫中的時間資料字串格式無法讓C#的物件解讀造成的。所以只要將存入的資料,修改成符合C#需要的時間格式即可順利運作。符合的資料格式為"yyyy-mm-dd HH:MM:SS" or "yyyy-mm-dd HH:MM:SS.sssss" 如果你有ms的時間資訊需要填入。

2016年6月29日 星期三

為一個精確的ADC提供一個簡易可靠的參考電壓 (A simple and reliable reference voltage for an accurate ADC) TL431



因為使用Arduion 做為電池容量測試的工具並以電腦做為長期資料收集的後端。因為Arduino 吃電腦USB的電,所以Arduino無法使用內部的參考電位做為ADC的參考電壓。必須要額外使用一個穩定和足夠精準的參考電壓,來做為ADC 的校正。這樣才能保證ADC計算出來的電池電壓值的精確度在一定的範圍內。便宜方便的做法是使用一顆TL431,它的2.5V的電壓輸出,做為ADC自我校正的參考電位。其電路如下圖所示:

這個參考電壓電路只要一顆TL431與一顆電阻的組成,就可以得到一個穩定的2.5V的參考電壓。input 接Arduino的VCC, Vka就接到ADC的輸入做為校正電壓。


The circuit on Figure 1 is used to get a reliable and stable reference voltage. Usually the ADC will not be accurate when Arduino connected to PC via USB. If we want an accurate ADC/voltage mapping, we will need an accurate and reliable reference voltage to calibrate AD value. The figure 1 is a sample solution. The VKA is a stable  2.5 voltage output. The MCU can use it to calibrate the ACD/Voltage mapping.




2016年4月24日 星期日

按鈕或開關彈跳的問題 (Button Debounce)


今天找到一個更好的解決方法,網址如下:

https://electrosome.com/switch-debouncing/


I think the best solution is "Hardware" solution, if there is no limitation of dimension.  I use a sample RC circuit (shows as below) which can be found on Internet easily. The resister and capacitor values which I used are 250K ohm and 0.1 uF. The basic rule to choose the value of R and C are, small C can be discharged quickly when switch closed, and high value of R will charge slowly. I think the limitation of this debounce circuit is that this circuit can not handle the high frequency switch action. Regarding the values of RC, it will take about 0.125 second to charge capacitor from 0 V to 5 V. The RC value can be calculated in fact. 5 * R * C is time of C charge to 5V, and discharge time will be 5 * C (assumed the resistor in switch is 1 ohm). and the rule is discharged time is sorter than bounce cycle time, and charge time much longer than bounce cycle time. Regarding measurement, the bounce cycle time of the switch is about 50 us.

如果沒有硬體空間限制的問題的話,我想採用硬體的對策是最好的消除彈跳的方法。我這次使用的數值是250K歐姆的電阻,以及0.1uF的電容器。電路如下圖所示。我想這個電路的限制是,無法使用在高速切換的開關電路上,因為充電的時間比較長。依照電容充放電的特性,與所選的數值。在開關打開後約須0.125秒的時間,電容器才能充電到5伏特。電阻電容值事實上可以通過計算決定。5 *R*C為充電時間,5*C為放電的時間(假設開關電路阻抗為1歐姆)。充電的時間必須要比跳跳訊號的週期長,而放電的時間則是要比彈跳的週期短。依據視波器的量測,彈跳週期約為50 us。






Bounce signal when R C values are not good enough.