2014/02/16

Raspberry Pi小玩意兒:Raspbian讓牛說Hello World

接觸Linux也有一段不算短的時日了,但萬萬沒想到居然有這種東西。嘿,學海無涯啊。

首先在Raspbian命令列模式下安裝所需套件:
$ sudo apt-get install cowsay fortune-mod fortunes

其中cowsay能產生牛的ASCII文字圖案與對話框,fortune-mod能亂數給出名言錦句(格言、諷刺、謎題、玩笑),fortunes則是含有更多名言錦句的套件。

試試看吧,讓牛說Hello World:
$ cowsay "Hello World"

還可以加上各種參數(-b -d -g -p -s -t -w -y),改變牛的眼睛與舌頭。若改用指令cowthink則變成思考框。
另外也可以參數-f指定另一隻動物圖案,可用的動物位於/usr/share/cowsay/cows裡。
若使用剛剛安裝的fortune-mod套件,就不需要自己想台詞了,直接執行指令fortune的話,就會亂數隨機給出一段名言錦句,分成許多範疇,譬如computers、linux、people、art、science、education、love、literature、magic等等,執行$ fortune -f可得知。範例是$ fortune computers | cowsay。

2014/02/11

Arduino練習:旋轉編碼器

旋轉編碼器(rotary encoder)可將旋轉位置或旋轉量轉變成訊號(類比或數位),透過某種方式(機械、光學、磁力等),得知轉軸轉動了,發出訊號通知我們。可分為絕對型(absolute)及增量型(incremental)或稱為相對型(relative),絕對型將轉軸的不同位置一一編號,然後根據目前位置輸出編號;增量型編碼器則是當轉軸旋轉時輸出變化,轉軸不動就沒有輸出。

底下是我購買的增量型旋轉編碼器模組,可以一直旋轉,旋轉一整周被分為20小格,正轉逆轉皆可,當轉動時,CLK腳位就會呈低電位,此時可讀取DT資料腳位,若為HIGH代表正轉,LOW代表逆轉;SW則是開關腳位,轉軸可被按下改變此腳位的狀態。另外+需接正電源,GND接地。

這種編碼器屬於機械式,需要對訊號進行去抖動,較不精準、適合低轉速場合;光學式則可用於高轉速或精確度需求較高的地方。

增量型旋轉編碼器會有類似齒輪缺口與感應的機制,以此可有兩個輸出A與B,旋轉時,A與B將輸出不同的訊號,正轉與逆轉可得到不同的一串訊號,如此便可區分正逆轉。
不過我購買的模組已經處理好了,不需要自己偵測A與B作處理與判斷。

我用的板子是Arduino Uno R3,軟體開發環境版本為1.0.5、Windows版。

電路如下:
Arduino腳位2,連接模組的CLK。
Arduino腳位3,連接模組的DT。
Arduino腳位4,連接模組的SW。

草稿碼如下,當偵測到正轉時,就增加全域變數count、並輸出到序列埠,逆轉則減少,按下開關則歸零。

#define SERIAL_BAUDRATE 115200
#define CLK_PIN 2 // 定義連接腳位
#define DT_PIN 3
#define SW_PIN 4

#define interruptA 0 // UNO腳位2是interrupt 0,其他板子請見官方網頁

volatile long count = 0;
unsigned long t = 0;

void setup() {
  Serial.begin(SERIAL_BAUDRATE);
  // 當狀態下降時,代表旋轉編碼器被轉動了
  attachInterrupt(interruptA, rotaryEncoderChanged, FALLING);
  pinMode(CLK_PIN, INPUT_PULLUP); // 輸入模式並啟用內建上拉電阻
  pinMode(DT_PIN, INPUT_PULLUP);
  pinMode(SW_PIN, INPUT_PULLUP);
}
void loop() {
  if(digitalRead(SW_PIN) == LOW){ // 按下開關,歸零
     count = 0; 
     Serial.println("count reset to 0");
     delay(300);
  }
}
void rotaryEncoderChanged(){ // when CLK_PIN is FALLING
  unsigned long temp = millis();
  if(temp - t < 200) // 去彈跳
    return;
  t = temp;
 
  // DT_PIN的狀態代表正轉或逆轉
  count += digitalRead(DT_PIN) == HIGH ? 1 : -1;
  Serial.println(count);
}

執行後,開啟序列埠監控視窗,用手轉動旋轉編碼器,正轉時可看到不斷變大的數字,逆轉則減少。不過有時會出現錯誤,應該加1的情況卻先加1、再減1、再加1,不夠完美。

參考資料:

2014/02/07

Raspberry Pi情報彙整(20)

我將網路上看到的、感興趣的、跟Raspberry Pi相關的資訊收集如下。如果您發現任何新奇驚人的新聞或專案,還請留言告知。

OCR Raspberry Jamboree 27 & 28 February 2014,二月底的Raspberry Pi大聚會,舉行三天,真想去啊。可以看看去年聚會的影片過過乾癮。

PA’s new Raspberry Pi Competition - innovate to help the environment! ,還記得PA 2012/13的Raspberry Pi創作競賽嗎,現在2013/14的競賽開跑囉,不過應該要住在英國、愛爾蘭的學生才能參加。
instructables舉辦的Raspberry Pi Contest專案競賽,上去看看有哪些創意發想吧。
PiTFT Pibow,Adafruit的PiTFT真是不錯,現在也有專屬的保護外殼了。
Lapse-Pi Touch – A Touchscreen Timelapse Controller,Dave Hunt為他的縮時攝影裝備添加了觸控螢幕,真不錯。之前的分享作品還有拍攝水滴掉落聚焦疊加馬達與縮時攝影
The SnapPiCam | A Raspberry Pi Camera,又一個運用Adafruit PiTFT與相機模組的專案,含有鋰電池、充電模組、升降壓器、以及鏡頭,厲害。
Capacitive Touch Potatoes on the Raspberry Pi,arghbox的分享文,加入電容式觸控感測器,就可以把水果蔬菜當做變成敲擊對象,變成類似電子開關的作用,用來製作樂器。
How we built a game called ‘Panflute Hero’,玩過吉他英雄嗎,何不試試自己打造排笛英雄呢,六根竹管分別加上麥克風感測器,透過TCP協定將吹奏事件傳送到電腦上,嘿,然後用Lua寫個小遊戲吧。影片在此
YouTube影片Glockenspiel & Raspberry Pi,撞琴。
Raspberry Pi GPS Helmet Cam,Martin O’Hanlon不只會在Raspberry Pi上玩Minecraft,也會玩玩電子硬體喔,這是一款裝在帽子上的相機,並且疊上GPS位置資訊,嘿,一邊滑雪,一邊記錄軌跡,真是太棒啦。影片在此
LOHAN's handsome young autopilot springs into life,這是自動導航的無人駕駛飛機嗎,真強。
Raspberry Pi: Vocal Intruder Warning System Project,加上PIR動作偵測器,建構聲響警報系統吧,文中提供詳細的步驟與程式碼。
Laika Explorer: what it's like to build a Raspberry Pi accessory startup,Laika去年成功地募集資金,製作rpi的擴充套件,專門控制各種硬體,譬如說機器人需要的零件。這一篇則是創辦人現身說法,講述一路以來的過程,如何生產、測試、等等。
MoPi: Mobile and 24/7 Power for the Raspberry Pi,可攜式行動電池,似乎還不只如此。
Accelerating Fourier transforms using the GPU,哇,Andrew Holme寫了GPU_FFT這套程式庫,運用Pi的GPU(VideoCore IV)進行傅立葉轉換,比用CPU運算快了10倍,真不錯。
8086tiny: a tiny PC emulator/virtual machine,非常小且可移植到各平台的8086模擬器,可在Windows、Linux、Android、iOS(iPhone 5)等運行,當然也包括Raspberry Pi。哇,看到MS-DOS 6.22了,好懷念啊。
Introducing the GrovePi ← GrovePi,Grove是Seeedstudio為Arduino推出的電子積木套件,現在有了GrovePi之後,也能供Raspberry Pi所用囉。