買書捐殘盟

2011年11月24日 星期四

Google App Inventor: 亂數產生器

亂數產生器,隨機產生一個或一組數字,在教室情境中很受歡迎。
當老師想要點名,卻又不想流於形式,亂數產生器得到的號碼,讓學生無法得知下一刻是誰被點到,那種急速上升刺激與快感,難以形容。

曾在Market找相關的軟體,卻未盡滿足我的需要,所以心中浮現用app inventor來開發,相信難度不高,且能客製化自己的需要來安排各種功能。

首先,我的軟體介面如下:

(圖1 軟體介面)

圖1中:
1.[亂數範圍]可由使用者自行決定起訖範圍。
2.[剔除不要的號碼]欄位,由使用者自行決定亂數產生時,以不出現此欄位指定的號碼為主。
3.當按下[隨機產生號碼]按鈕,即產生斗大的一個號碼於畫面中。

程式碼:

上述程式中:
1.StartNum及EndNum變數,分別指定為主畫面使用者輸入起訖號碼
2.RndNo變數,由[random integer函式],隨機產生一數字並指定回RndNo,範圍如上述1.
3.RemoveElementNum變數,使用者指定[剔除號碼]後,系統自動統計其個數,並指定給RemoveElementNum
4.for range迴圈:
檢視[隨機產生的數字]是否與[欲剔除的數字]相等?若相等,則重新產生一個新的數字。直至不重複為止。

2011年11月19日 星期六

Hitechnic Color Sensor 測試

一、硬體方面
color sensor 接在nxt主機上的IN_4。
二、軟體方面
根據[Third-party sensors: a review of some Hitechnic’s sensors]一文提到:
The new and totally redesigned HiTechnic Color Sensor Version 2 (V2) operates by using a single white LED (light emitting diode) to illuminate the target and analyses the color components of the light reflected by the target’s surface and calculates a Color Number that is returned to the NXT program.

Sensor Register Layout

AdressTypeContents
42HbyteColor number
43HbyteRed reading
44HbyteGreen reading
45HbyteBlue reading

Procedures are already available in Bricxcc to use the sensor:

  • SetSensorLowspeed() initializes the I2C communication with the sensor.
  • SensorHTColorNum(port) returns the value of Color number.
  • ReadSensorHTRawColor(port, rouge, vert, bleu) returns the RGB readings.
  • ReadSensorHTColor(port, index, rouge, vert, bleu) returns the value of Color number, and the RGB readings. See the code example at the end of the article ...
所以在NXC的程式基本採用的指令,包含二個:
1. SetSensorLowspeed(IN_4)
2. ReadSensorHTColor(IN_4,colorvalue,r,g,b)
其中,IN_4是彩色感應器接向IN_4,而colorvalue是經由color sensor回應的讀值,r,g,b分別為red,green,blue三原色的數值。

三、程式碼
#define ColorSensorPort IN_4

task main()
{

byte r,g,b;
byte colorvalue;
SetSensorLowspeed(ColorSensorPort);

while(true)
{
ReadSensorHTColor(ColorSensorPort, colorvalue,r,g,b);
NumOut(0,LCD_LINE3,colorvalue);
if (colorvalue==0) PlayTone(880,25);
Wait(25);
ClearScreen();
}
}

上述程式是說:
當color sensor讀值(colorvalue)=0,則PlayTone一個短音。
colorvalue=0-->黑色

2011年10月22日 星期六

Google App Inventor - 使用手機的語音控制

如果你的手機支援語音搜尋,那麼應該可以啟用語音辨識的操作。
這個功能可以替代手寫,英語的辨識率還算不錯,但中文辨識率不太高就是了。
(假如假設你發音正確,那麼應該可以顯示將你想說的語音轉成文字)

首先,我在手機介面上,設計如下的簡易畫面來進行測試:

(圖1)手機操作畫面

圖1中,我引用了App inventor的Other stuff中的[Speech recognizer]元件作語音控制。
而[按下後說話]的按鈕,是用來啟用speech recognizer,當你按下後即可說話。
簡單說了一段英文或中文語句,文字將顯示在圖中的Voice2TextResult文字欄位。

-------------------------------
其次,開啟Block Editor,進行程式編輯。
程式設計如下:

(圖2)程式內容

圖2中:
1. SpeechAfterPressedBtn-即按鈕,按下按鈕後,開始說話。
 call SpeechRecognizer1.GetText,呼叫語音辨識,取得文字。
2. When...SpeechRecognizer1.BeforeGettingText-
 當操作者還在說話時,介面上Voice2TextResult文字欄位的內容為空白
3. When...SpeechRecognizer1.AfterGettingText-
 將Voice2TextResult文字欄位指定為SpeechRecognizer1.Result
 即所說的內容,經過語音辨識後將文字呈現在Voice2TextResult文字欄位

--------------------------
有興趣的玩家,可以利用這樣的功能,實現在NXT的藍芽控制,當你說:
Go或是向前、Back或是向後、Left或是向左、Right或是向右,經過語音辨識,再結合
前述[Google App Inventor -手機藍芽遙控Segway]的方法,程式稍微修改一下就可
讓你的機器人用語音控制前進,後退、向左及向右了。

2011年10月15日 星期六

利用手機的指北針感應器,來做方位感測

前幾天利用手機的digital compass sensor (orientation sensor),拿來做為方位的度量。
設計的機構如下:


結果發現,這樣的機構,因為太靠近nxt motor,會產生磁場嚴重的干擾而使度量發生錯誤。
今天再改裝加高鷹架,機構如圖:


尚未測試,也許可以改善。測試的結果待續。

2011年9月20日 星期二

Google App Inventor - 使用手機的LocationSensor讀取經緯資料

現在的手機只要具備GPS的功能,就可以使用Google App Inventor裡的LocationSensor 來讀取
所在位置的經緯度、高度等資料。


(圖1-軟體介面外型)

部分程式:

其中:
1. [value latitude] -->由Location Sensor傳回的緯度數據
2. [value longitude]-->由Location Sensor 傳回的經度數據
3. LatitudeReport.Text --> 將[value latitude]顯示在(圖1)的緯度欄位
4. LongitudeReport.Text-->將[value longitude]顯示在(圖1)的經度欄位
5. AddressReport.Text-->將[LocationSensor1.CurrentAddress]的結果顯示在位址欄位

至於已知兩處AB的經緯度,如何得知A-B間最短的距離?
我利用:

其中:
其中 為大圓距離, 是地球半徑(6371km),而點 1 經度、緯度分別為 ,點 2 的經度、緯度分別為
其實這只是球面三角餘弦公式的推廣,注意經緯度的度數計算時要轉成徑度,才會計算正確。
d算出來的單位為km.

2011年9月14日 星期三

Google App Inventor- 製作找方位軟體

坊間有一些support Compass的軟體,以圖像的方式做出指北針,操作者可由指針朝北定出方位。

筆者試著以Google App inventor製作一簡易型的指北針,只要您的手機有Orientation Sensor就具備數位指北針的支援。


(圖1)

介面說明:
1. [Compass Test]-軟體標題
2. [CurrentDirection]-標籤文字
3. [TextBox]-存放方位感測器(Orientation Sensor)的方位
4. [CheckDirection]- 按鈕每點一次,可搜尋當前方位角
5. 引用OrientationSensor,並設定為[enable]


※使用AppInventor,介面可使用中文字,但Block Editor僅能使用英文字,設計時須注意。

(圖2)

圖2即Block Edit的程式碼。
由appinventor手冊提供的orientation sensor,偵測到的為數值,介於0~359。
其中:
0: 北方
90: 東方
180: 南方
270: 西方

筆者將數值轉化成文字,使操作的時候較易識別。
-------------------------------
※測試時,操作者將手機任意指向一方位,按下[CheckDirection]按鈕,即馬上顯示該方位的方位角,但無角度顯示,僅以16方位之結果顯示之。
即:
東、西、南、北
東南、東北、東南東、南東南、北北東、東北東
西南、西北、西南西、南南西、西北西、北北西

2011年9月4日 星期日

手機藍芽遙控挖土機



這個遙控的原理承襲前述藍芽遙控的方式,技術上大同小異。
bot裝置參考[Lego.com Mindstorms]部分的接法。
機身略有修改。