買書捐殘盟

2014年12月13日 星期六

從AppInventor2開發產品中,體驗智慧財產的重要

學校自這個學期開始授課App Inventor課程之後,學生普遍的反應還算不錯。
過去國三的電腦課程,通常是上Visual Baic,但對於初次接觸程式設計的孩子來說,一堆抽象的文字語言,數字與字串,或者是運算子,甚至是迴圈的應用,條件式的判斷....光是這些就足以讓孩子們失去學習的信心。

這個學期開始之前,鄭博全老師找我一起商討對於國三學生的課程時談到AppInventor課程,打算在學期中授課,當下我對於這一套軟體並不陌生,因為過去在設計機器人nxt設計時,在進行藍芽連線時,就已經開始使用App Inventor這個軟體作為手機與機器之間的溝通橋樑。

在開始授課的時候,孩子們開始學習圖形化程式設計的操作,崁入式的程式碼建構,相較於傳統的文字程式來說,是淺顯而易懂的。雖然在剛開始還是會排斥著,然而在經過一段時間的學習後,孩子們慢慢地能夠習慣操作,並能慢慢地能夠自己產生一個簡易的軟體。

這個建構的過程並不簡單,因為從零學起,從排斥到接納,雖然是半強迫式的學習,但也消弭了對程式設計的恐懼感。從程式設計中,孩子們除了培養靈活的邏輯設計觀念之外,更從中體驗到:原來開發一個程式軟體,竟是相當不簡單!

一個手機遊戲軟體,人人取得容易。然而一個軟體的生命週期,從玩家對於軟體的精緻程度,將決定喜好的程度。 因此,在建構一個軟體的過程,不斷修飾程式的外觀之外,對於程式的內涵(程式碼)的功能強度,更是考驗一個程式設計者的智慧。

我們從課程中,最後希望帶給孩子們的是:認真看待智慧財產權。在一個產品開發的階段,是如此耗費工夫(時間)的,為了讓產品能永續成長,智慧財產是不容許被侵害的,因為從設計的過程中,既然如此辛苦,就更能體會其他開發產品的原設計者,當時對這個商品的努力程度。

2014年12月12日 星期五

利用matlab,一秒鐘讀取一筆資料

影片結果:https://www.youtube.com/watch?v=JZhv-OIad-8&feature=youtu.be

程式碼:
clear all
clc

data=[100 90 80 60 80 90 75 70 80 100];
n=size(data,2);
sum=0;
average_value=0;

for i=1 :10
 if i==1
  max_value=data(i); 
  min_value=data(i);
 end
 
 sum=sum + data(i);

 if data(i)>max_value
   max_value= data(i);
 end

 if data(i)  min_value=data(i);
 end
 fprintf('第%d筆資料=%d,讀取完畢\n',i,data(i))
 pause(1);
end
fprintf('-------------\n')
average_value=sum/n;
fprintf('平均值=%3.2f\n',average_value)
fprintf('最大值=%d\n',max_value)
fprintf('最大值=%d\n',min_value)

2013年4月14日 星期日

UltraSonicSensor應用-保護眼睛的守護神


NXT ,保護眼睛的守護神!
當超音波偵測到前方人體離電視太近的時候,系統發出Light光線及聲音警告。
   
[機構]

[程式]
 #define sonic_sensor IN_1
#define touch_sensor IN_2
#define light_sensor IN_3
#define touch SENSOR_2
#define MotorOut OUT_B
#define length 150

long tick;


void WaitSEC3()
{
   tick=CurrentTick();
   while(CurrentTick()<(tick+3000))
   {
       PlayTone(880,50);
       Wait(950);
   }
   Wait(1000);
}




task main()
{
    SetSensorTouch(touch_sensor);
    ResetTachoCount(MotorOut);
    SetVolume(4);
    SetSensorLight(light_sensor,false);
    SetSensorLowspeed(sonic_sensor);
    WaitSEC3();
}


task MotorRotateFn()
{
   Follows(main);
   while(touch==0)
   {
      RotateMotorPID(MotorOut,10,90,40,40,90);    //右轉
      Wait(100);
      RotateMotorPID(MotorOut,10,-170,40,40,90);  //左轉
      Wait(100);
      RotateMotorPID(MotorOut,10,80,40,40,90);    //右轉
   }
   Off(MotorOut);
   StopAllTasks();
}

task DetectFn()
{
   Follows(main);
   while(true)
   {
     if(SensorUS(sonic_sensor) <length{
       PlayTone(500,50);
       SetSensorLight(light_sensor,true);
       Wait(50);
       SetSensorLight(light_sensor,false);
       Wait(50);
     }
   }
}
[影片]                                  

2013年4月5日 星期五

齒輪組應用-nxt腳踏車

利用齒輪組原理,組裝的腳踏車。
後輪利用橡皮筋傳動。



齒輪組合可謂千變萬化,我個人設計時,先從後輪開始做起,先把後輪與腳踏傳動軸的橡皮筋先測試連動性。
確認後,再續完成前輪與龍頭等機構的連結。
最後為整合前後輪能藉由nxt馬達轉動,來帶動各部位的轉動,所以藉由齒輪組(三個)來傳遞給前輪及腳踏傳動軸。而腳踏傳動軸得到動能後,藉由橡皮筋的連動,使後輪轉動。

齒輪機構-玩玩

感謝探奇邱老師給予的資料(如參考資料)。
齒輪機構,有趣的地方在於透過齒輪之間的串合,可以有非常多的變化,因此被應用在馬達速度(差速)的變化。

齒輪比,藉由兩個齒輪串合,我們從經驗得知,大齒輪轉一圈,小齒輪轉動n圈,便可以做到差速的轉換。例如圖中:
與馬達串合在一起(同軸)的是8齒的小齒輪,8齒的小齒輪又與40齒的大齒輪咬合在一起。如此共構的齒輪組。我們知道:40齒的大齒輪轉動1圈,同時8齒的小齒輪已跑了5圈。

是以,馬達以150轉/分運轉,假設小齒輪轉150圈,那麼40齒的大齒輪,就是轉了30圈。所以以倍數的關係可知~大齒輪的轉速是30轉/分。

圖中另外一組是8齒小齒輪與24齒小齒輪,該8齒小齒輪與40齒同軸。
 8齒小齒輪與24齒小齒輪的齒輪比=1:3,所以可知8齒小輪轉3圈,24 齒中齒輪轉1圈。

所以整個齒輪組的組合,從馬達的輸入端傳動到24齒輸出端的葉片轉動,呈現轉動比為:
 (1/5)x(1/3)=1/15

換句話說,馬達轉15圈,輸出端的葉片僅轉動1圈,藉此達到轉速的變化!!!!
video

另外,齒輪組改成Worm Gear也很有趣:


參考資料:
1.http://www.education.rec.ri.cmu.edu/roboticscurriculum/curriculum/introductiontogears.htm
2.http://www.education.rec.ri.cmu.edu/roboticscurriculum/curriculum/gearsspeedtorque.htm

2012年7月8日 星期日

撲克牌洗牌機

久違了,好久沒有新的idea,今天寫一篇關於利用NXT做撲克牌發牌機。



基本上,把撲克牌放兩邊,模擬我們人的手洗牌的樣子。
而機構本身利用輪胎來推進撲克牌至中間的凹槽,馬達轉動的速度無需過快,以免撲克牌卡紙而破壞了牌紙。

且程式也止不過幾行,其中主要用以啟動馬達轉動的程式碼:

OnFwd(OUT_AB,50);

以下是洗牌機的影片片段:
video

2012年4月13日 星期五

使用matlab開啟Excel檔案,讀取數據資料

matlab當需要開啟外部資料,例如excel檔案時,使用的指令:
1. importdata('filename') -->filename就是你要指定的檔案名稱,包含副檔名
例如,欲打開一個檔名為data.xls,則指令為importdata('data.xls')
2. xlsread('filename')-->filename是你要指定的檔案名稱,副檔名預設為xls


有時操作者在程式執行期間,想切換開啟不同的xls檔案名稱,而不想重新啟動程式,可以使用input指令。下列為部分片段程式:
file_name=input('Open filename:')
file_data=xlsread(int2str(file_name))


如此,即可由操作者自行輸入檔案名稱,如果檔名以數字命名,記得做轉換為文字。