前言:
因為嘗試接案,接觸到使用LabVIEW擷取Wi-Fi感測器的數據(TCP/ IP, DataSocket...etc),不過還是有些問題存在。因為Wi-Fi Module已經還人,為了測試是否正確,於是還是買了遲疑已久的Arduino Wi-Fi Shield。
昨天熱騰騰的剛入手,這兩天先簡易測試了Example中的Connect Network AP, WiFi web Client, WiFi web Server三種測試。使用的Arduino版本是1.0.2 (NOTE: 使用1.0.5在測試Web會有問題,必須將wifi韌體更新)
後來有簡易測試了LabVIEW的部分,不過如預期的沒有抓取到正確的資料,合理的推測必須先在Arduino的部分定義利用Wi-Fi shield送出資料的一些設定(例如IP, Port, Data byte等等)。看起來還是得先搞懂TCP/ IP, UDP, DataSocket等等,還有以上提到的如何在Arduino中寫出符合的程式。
About虛擬&實際
@分享虛擬與實際的世界中所遊玩的心得紀錄,從物理化學到生命科學、從人文藝術到現代科技、從虛擬介面到實際生命體。享受的只是一種學習與體驗。若文章內容有誤,歡迎提出以供修改,對文章的回饋,歡迎寄信給我!一起分享,互相學習成長的環境。
@個人簡介在『關於韃靼』
@我是韃靼~我的信箱:chenyuquan at gmail dot com
2013年12月21日 星期六
2013年7月13日 星期六
Arduino- RH/ Temp sensor with LCD display
前言:
最近一直很想測室內的二氧化碳,自從上次使用Lab的二氧化碳儀器測過一次後就沒機會了。有在詢問二氧化碳感測器的價錢,沒想到還頗貴的,像一氧化碳或硫化物相關的還比較便宜!!我想這跟二氧化碳分子結構有關(所以才需要使用紅外光譜才能偵測)
偏離主題了,之前就有打算將RH/Temp sensor組裝在Arduino上面,趁這次颱風天沒機會出去溜搭,來拼裝一夏。
硬體:
RH/ Temp sensor (HMZ-435CHS1)
LiquidCrystal (16*2 matrix),
potentiometer
電容(10 uf)
電阻(220 & 50k ohm)
程式:
這個部分結合了Arduino project 3 & 11的部分,修改一些參數以及顯示的模式。
然後再將之前在使用LabVIEW project所使用的RH/ Temp 電壓校正曲線即可。
溫度校正曲線:
y = 1.709x2 + 11.428x - 14.54
R2 = 0.9986
濕度校正曲線:
y = 2.164x2 + 26.166x - 13.068
R2 = 0.997
Code:
因為在LCD內要顯示兩個數據,又遇上了數字小數點的顯示問題花了一點時間解決。
目前小數點還沒有更加的解決方式,就暫時以"int"以整數顯示。而LCD顯示部分如下:
lcd.setCursor(0, 0);
lcd.print("RH % / Temp deg.");
lcd.setCursor(0, 1);
lcd.print(RH);
lcd.setCursor(8, 1);
lcd.print(Temp);
其中lcd.setCursor(m, n),m是每列(row)的位置,n是指哪一行(column)。
圖片:
後記:
參考Cookbook有提到字串問題,也許可以將數字定義成字串,然後限制字串的長度。而Arduino網頁以及手邊的書籍好像都沒提到顯示數字位數的資訊,可能我還沒找到!!
再來真正期待的是CO2感測器的加入!!而程式部分則希望加入可以存檔功能(log到電腦內或其他)。
20130714補充
實際的在主臥房測試如下:
修正一些Code計算上的Bug,實際測試,主臥房的溼度果然較工作室低。不過也是預料中,因為開了冷氣!
參考:
Arduino_Project03_Love-o-meter
Arduino_Project11_Crystal Ball
溫濕度感測器_RH & Temperature Sensor
Arduino Cookbook
Arduino Projects Book
Arduino.cc
最近一直很想測室內的二氧化碳,自從上次使用Lab的二氧化碳儀器測過一次後就沒機會了。有在詢問二氧化碳感測器的價錢,沒想到還頗貴的,像一氧化碳或硫化物相關的還比較便宜!!我想這跟二氧化碳分子結構有關(所以才需要使用紅外光譜才能偵測)
偏離主題了,之前就有打算將RH/Temp sensor組裝在Arduino上面,趁這次颱風天沒機會出去溜搭,來拼裝一夏。
硬體:
RH/ Temp sensor (HMZ-435CHS1)
LiquidCrystal (16*2 matrix),
potentiometer
電容(10 uf)
電阻(220 & 50k ohm)
程式:
這個部分結合了Arduino project 3 & 11的部分,修改一些參數以及顯示的模式。
然後再將之前在使用LabVIEW project所使用的RH/ Temp 電壓校正曲線即可。
溫度校正曲線:
y = 1.709x2 + 11.428x - 14.54
R2 = 0.9986
濕度校正曲線:
y = 2.164x2 + 26.166x - 13.068
R2 = 0.997
Code:
因為在LCD內要顯示兩個數據,又遇上了數字小數點的顯示問題花了一點時間解決。
目前小數點還沒有更加的解決方式,就暫時以"int"以整數顯示。而LCD顯示部分如下:
lcd.setCursor(0, 0);
lcd.print("RH % / Temp deg.");
lcd.setCursor(0, 1);
lcd.print(RH);
lcd.setCursor(8, 1);
lcd.print(Temp);
其中lcd.setCursor(m, n),m是每列(row)的位置,n是指哪一行(column)。
圖片:
後記:
參考Cookbook有提到字串問題,也許可以將數字定義成字串,然後限制字串的長度。而Arduino網頁以及手邊的書籍好像都沒提到顯示數字位數的資訊,可能我還沒找到!!
再來真正期待的是CO2感測器的加入!!而程式部分則希望加入可以存檔功能(log到電腦內或其他)。
20130714補充
實際的在主臥房測試如下:
修正一些Code計算上的Bug,實際測試,主臥房的溼度果然較工作室低。不過也是預料中,因為開了冷氣!
參考:
Arduino_Project03_Love-o-meter
Arduino_Project11_Crystal Ball
溫濕度感測器_RH & Temperature Sensor
Arduino Cookbook
Arduino Projects Book
Arduino.cc
2013年7月6日 星期六
Arduino_Project13_Touchy-feely Lamp
前言:
太久沒持續的更新Project了,這一陣子忙了太多雜事,讓自己差點失去方向,接著持續學習Arduino以及Python還有不能荒廢的LabVIEW是一定要跟上的。當然還有更重要的事情在默默的規劃和努力中。
這個專題是針對"電容"特性而改成的電容感測器(Capacitive sensor),使用現成的library來讀取累積在金屬薄片上的電量而觸發Led。
硬體:
LED, 電阻(220 & 1M), metal foil (我用鋁箔紙)
程式:
一開始要先呼叫現成的程式庫,然後設定觸發數值以及LED燈位置。然後讀取Sensor的數值,這邊使用了內建的程式庫指令:capSensor.capacitiveSensor(30)其中30是讀取sensor的數值數量,若設定太少,會出現太多變化的可能,若設定太高,則可能會導致讀取同一數值太多次。
CODE:
CapacitiveSensor capSensor = CapacitiveSensor(4, 2)
(4, 2)定義為:(傳送資料到金屬薄片,讀取資料),資料就是從pin4輸出的電壓。
圖影:
後記:
設定了合適的觸發值後,可以更加精確的控制在哪種接觸下可以開啟LED燈,不過還是屬於0/1的設定,若能搭配類比輸出電壓,也許可以進一步的控制LED燈亮度的改變。
參考:
Arduino Projects Book
太久沒持續的更新Project了,這一陣子忙了太多雜事,讓自己差點失去方向,接著持續學習Arduino以及Python還有不能荒廢的LabVIEW是一定要跟上的。當然還有更重要的事情在默默的規劃和努力中。
這個專題是針對"電容"特性而改成的電容感測器(Capacitive sensor),使用現成的library來讀取累積在金屬薄片上的電量而觸發Led。
硬體:
LED, 電阻(220 & 1M), metal foil (我用鋁箔紙)
程式:
一開始要先呼叫現成的程式庫,然後設定觸發數值以及LED燈位置。然後讀取Sensor的數值,這邊使用了內建的程式庫指令:capSensor.capacitiveSensor(30)其中30是讀取sensor的數值數量,若設定太少,會出現太多變化的可能,若設定太高,則可能會導致讀取同一數值太多次。
CODE:
CapacitiveSensor capSensor = CapacitiveSensor(4, 2)
(4, 2)定義為:(傳送資料到金屬薄片,讀取資料),資料就是從pin4輸出的電壓。
圖影:
乍看下非常的簡陋~><~
後記:
設定了合適的觸發值後,可以更加精確的控制在哪種接觸下可以開啟LED燈,不過還是屬於0/1的設定,若能搭配類比輸出電壓,也許可以進一步的控制LED燈亮度的改變。
參考:
Arduino Projects Book
2013年4月27日 星期六
(轉帖) Arduino Uno vs BeagleBone vs Raspberry Pi
前言:
Make網站提供了一篇好文章在介紹Arduino, BeagleBone以及Raspberry Pi的性能比較,提供想入手的新手(或欲增加新夥伴的老手)一些建議與資訊。最直接有趣的當然是表格的呈現如下:
(資料來源:Makezine.com)
三個產品照片:(來源:RS component, Arduino.cc, BeagleBoard.org)
參考網站:
中文:Arduino Uno、BeagleBone與Raspberry Pi之比較
原文:Arduino Uno vs BeagleBone vs Raspberry Pi
另外自己也備份網頁為PDF檔案,以避免網站失聯。
Make網站提供了一篇好文章在介紹Arduino, BeagleBone以及Raspberry Pi的性能比較,提供想入手的新手(或欲增加新夥伴的老手)一些建議與資訊。最直接有趣的當然是表格的呈現如下:
(資料來源:Makezine.com)
三個產品照片:(來源:RS component, Arduino.cc, BeagleBoard.org)
參考網站:
中文:Arduino Uno、BeagleBone與Raspberry Pi之比較
原文:Arduino Uno vs BeagleBone vs Raspberry Pi
另外自己也備份網頁為PDF檔案,以避免網站失聯。
2013年3月17日 星期日
Arduino_Project12_Knock Lock
前言:
這次的專題計劃是設計可以上鎖的箱子(同樣地,也是先順利完成專題為主)。利用piezo可以反向的作為感測器(震動),敲打震動的次數來解開鎖定(servo motor)。
硬體:
servo motor, piezo, capacity, LED, resistor...etc
程式:
一開始也要先呼叫servo的函數庫(Servo.h),在sketch裡面設定敲打的次數(knock number),以及加入自定義函數來作初始的判斷,判斷piezo是否處在不正確的狀態(例如振動頻率過高或過低)。
Code:
boolean name = true (or false_ 定義"name"的布林參數。
圖片:
後記:
越到後面的專題,難度就越來越高,真是有很多有趣的挑戰性,不過code中的邏輯就更需要去思考為什麼這樣了。也瞭解與學到了如何自定義函數(記錄在後面的補充),雖然好像在之前也有看過的樣子!?~下個專題想必又是令人心動的學習過程。
參考:
Arduino reference
補充:(2013/3/17) 自定義函數(custom function),在這個專題裡面是先出現後,在完成void loop()後才進行“定義”,但是依然會運行在loop裡面!?(這裡還沒搞清楚)!
目前測試下,ㄧ開始按下按鈕後,會變成locked然後在serial monitor會一直出現還需要knock的次數,但是敲得很大力會亮黃燈,但是還需敲打次數依然會減少!?然後滿足敲打數(knock number)後會變成unlocked(開鎖),此時再次按下按鈕,會變成locked(亮紅燈)後馬上就再次變回unlocked(亮綠燈),再按幾次都是如此,是只能進行一次嗎??怪哉!
解決方案:(2013/3/18)
在比較瞭解程式的邏輯後,我發現原本的code本來就只能執行一次,因為在 "numberOfKnocks" 增加後就不會回到起始點(雖然在“setup”有初始化int numberOfKnocks = 0),所以必須在"loop"的結束後加上以下的code就可以重復的使用此程式囉。
Code:
if(numberOfKnocks >=3){
numberOfKnocks = 0;
}
這次的專題計劃是設計可以上鎖的箱子(同樣地,也是先順利完成專題為主)。利用piezo可以反向的作為感測器(震動),敲打震動的次數來解開鎖定(servo motor)。
硬體:
servo motor, piezo, capacity, LED, resistor...etc
程式:
一開始也要先呼叫servo的函數庫(Servo.h),在sketch裡面設定敲打的次數(knock number),以及加入自定義函數來作初始的判斷,判斷piezo是否處在不正確的狀態(例如振動頻率過高或過低)。
Code:
boolean name = true (or false_ 定義"name"的布林參數。
圖片:
後記:
越到後面的專題,難度就越來越高,真是有很多有趣的挑戰性,不過code中的邏輯就更需要去思考為什麼這樣了。也瞭解與學到了如何自定義函數(記錄在後面的補充),雖然好像在之前也有看過的樣子!?~下個專題想必又是令人心動的學習過程。
參考:
Arduino reference
補充:(2013/3/17) 自定義函數(custom function),在這個專題裡面是先出現後,在完成void loop()後才進行“定義”,但是依然會運行在loop裡面!?(這裡還沒搞清楚)!
自定義函數可以有兩種結果:(1)不回傳數值(Value),則宣告此函數為void,類似loop()和setup()函數。(2)回傳數值(Value),則必須宣告數值的形態(int, long, float, etc.),但在這個case裡面是宣告成boolean type(布林形態)
boolean checkForKnock(int value){....:這個自定義函數中的value是輸入數值,在主要函數內則是以knockVal輸入此位置(但是knockVal其實就是等同於analogRead(piezo)所得到的數值)。
目前測試下,ㄧ開始按下按鈕後,會變成locked然後在serial monitor會一直出現還需要knock的次數,但是敲得很大力會亮黃燈,但是還需敲打次數依然會減少!?然後滿足敲打數(knock number)後會變成unlocked(開鎖),此時再次按下按鈕,會變成locked(亮紅燈)後馬上就再次變回unlocked(亮綠燈),再按幾次都是如此,是只能進行一次嗎??怪哉!
解決方案:(2013/3/18)
在比較瞭解程式的邏輯後,我發現原本的code本來就只能執行一次,因為在 "numberOfKnocks" 增加後就不會回到起始點(雖然在“setup”有初始化int numberOfKnocks = 0),所以必須在"loop"的結束後加上以下的code就可以重復的使用此程式囉。
Code:
if(numberOfKnocks >=3){
numberOfKnocks = 0;
}
2013年3月6日 星期三
程式語言的"開始"-by Arduino
前言:
若說LabVIEW是我第一個正式學的程式語言(Programming Languages),MATLAB是第二個(但只剛上手),那麼正式的文字敘述型程式語言大概可以將Arduino的Wiring (Based on C)算是一個吧。不過這幾天又持續的將幾個”程式語言“看了一些新的資訊,例如Ruby, Python...還是在思考到底以哪一個為“開端”,這實在是有點頭大,或許我不應該思考太過複雜才對!
扯遠了的是,通常程式語言好像很喜歡以"Hello, World"為開始作為與電腦互動的起始!?利用Arduino的Wiring也不例外的可以這樣使用,因此我利用了Project 11有用到的LCD顯示器作一個測試,來達到這個小小的卻有象徵意義的程式碼。
硬體:
跟Projectㄧ模一樣,只是改變程式的部分。
程式:
將亂數的部分刪除,只增加很簡單的開始文字敘述與搖晃後的文字敘述而已。
Code:(截取片段)
void loop() {
switchstate = digitalRead(switchPin);
if (switchstate != preswitchstate) {
if (switchstate == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("My dream will");
lcd.setCursor(0, 1);
lcd.print("come true!");
delay (5000);
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("I fucking love");
lcd.setCursor(0, 1);
lcd.print("our world !!");
}
}
圖片:
後記:
我想我會持續的很努力去喜愛這個世界,否則若什麼都不學,什麼都不做的話,實在是活得太無聊了。另外,有關LabVIEW & MATLAB的"Hello World"表示方式說真的挺無趣的,也許現在電腦的人機界面做得太棒了,導致我對於當下所顯示出的資訊還沒有太深入的感動吧!!
參考:
The Hello World Collection
Arduino_Project11_Crystal Ball
若說LabVIEW是我第一個正式學的程式語言(Programming Languages),MATLAB是第二個(但只剛上手),那麼正式的文字敘述型程式語言大概可以將Arduino的Wiring (Based on C)算是一個吧。不過這幾天又持續的將幾個”程式語言“看了一些新的資訊,例如Ruby, Python...還是在思考到底以哪一個為“開端”,這實在是有點頭大,或許我不應該思考太過複雜才對!
扯遠了的是,通常程式語言好像很喜歡以"Hello, World"為開始作為與電腦互動的起始!?利用Arduino的Wiring也不例外的可以這樣使用,因此我利用了Project 11有用到的LCD顯示器作一個測試,來達到這個小小的卻有象徵意義的程式碼。
硬體:
跟Projectㄧ模一樣,只是改變程式的部分。
程式:
將亂數的部分刪除,只增加很簡單的開始文字敘述與搖晃後的文字敘述而已。
Code:(截取片段)
void loop() {
switchstate = digitalRead(switchPin);
if (switchstate != preswitchstate) {
if (switchstate == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("My dream will");
lcd.setCursor(0, 1);
lcd.print("come true!");
delay (5000);
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("I fucking love");
lcd.setCursor(0, 1);
lcd.print("our world !!");
}
}
圖片:
後記:
我想我會持續的很努力去喜愛這個世界,否則若什麼都不學,什麼都不做的話,實在是活得太無聊了。另外,有關LabVIEW & MATLAB的"Hello World"表示方式說真的挺無趣的,也許現在電腦的人機界面做得太棒了,導致我對於當下所顯示出的資訊還沒有太深入的感動吧!!
參考:
The Hello World Collection
Arduino_Project11_Crystal Ball
2013年3月4日 星期一
Arduino_Project11_Crystal Ball
前言:
經過二月的空窗期後,又繼續我的Projects計劃了。以往使用Arduino,若要顯示資訊都是經由Serial monitor,而這次借由LCD顯示器,就可以直接將資訊顯示在實體世界(指除了電腦螢幕以外的顯示元件)。
硬體:
LiquidCrystal (16*2 matrix), potentiometer, tilt switch.
程式:
已經有封包好的LCD library可以使用,只需要呼叫對應的command即可。另外自行建立八種預設答案,每次搖晃tilt switch則使用亂數功能(random)選擇答案。
Code:
random(number)_ selected from number randomly.
LCD library_ control lcd monitor.
switch (case)_ case<use int number>, 傳回所選擇的數字,在此project內,顯示其中之一的答案(文字)(程式碼中建立八種預設答案)
圖片:
後記:
使用了LCD顯示器,則可以直接在實體世界顯示出資訊,例如使用溫濕度感測器,則可以將數值顯示在LCD上面,就不需要透過電腦來達到直覺的方式啊!真是方便,改天就將溫度感測器接上試試看。
另外,LCD的產品說明書是台灣的公司所提供的,真是有趣,還以為都是大陸制的!!
補充:
(2013/03/10) "switch"的這個指令很有趣,為什麼呢?因為之前都常常會打類似的指令-switchPin, switchState...etc,打完前面的switch都會顯示橘紅色(表示為內建指令),還在想為什麼指令會用到switch(那時候不認真,只想快速地先瞭解當下的project內容,所以沒查)。到了今天才瞭解到這個"switch"可以作”任務“的設定,就是先定義"switch(數值)",然後"case x"下一行則是內容,最後加上"break"表示case結束。大致地表示法如下:
switch(number){
case x:
"reply content/ command"
break;
"new case"
....
其中的reply content/ command在project 11裡是輸出string到LCD上面<lcd.print ("text")>。
參考:
Switch(case) statement_ serial input
LCD library
alphanumeric LCD (16X2)
經過二月的空窗期後,又繼續我的Projects計劃了。以往使用Arduino,若要顯示資訊都是經由Serial monitor,而這次借由LCD顯示器,就可以直接將資訊顯示在實體世界(指除了電腦螢幕以外的顯示元件)。
硬體:
LiquidCrystal (16*2 matrix), potentiometer, tilt switch.
程式:
已經有封包好的LCD library可以使用,只需要呼叫對應的command即可。另外自行建立八種預設答案,每次搖晃tilt switch則使用亂數功能(random)選擇答案。
Code:
random(number)_ selected from number randomly.
LCD library_ control lcd monitor.
switch (case)_ case<use int number>, 傳回所選擇的數字,在此project內,顯示其中之一的答案(文字)(程式碼中建立八種預設答案)
圖片:
後記:
使用了LCD顯示器,則可以直接在實體世界顯示出資訊,例如使用溫濕度感測器,則可以將數值顯示在LCD上面,就不需要透過電腦來達到直覺的方式啊!真是方便,改天就將溫度感測器接上試試看。
另外,LCD的產品說明書是台灣的公司所提供的,真是有趣,還以為都是大陸制的!!
補充:
(2013/03/10) "switch"的這個指令很有趣,為什麼呢?因為之前都常常會打類似的指令-switchPin, switchState...etc,打完前面的switch都會顯示橘紅色(表示為內建指令),還在想為什麼指令會用到switch(那時候不認真,只想快速地先瞭解當下的project內容,所以沒查)。到了今天才瞭解到這個"switch"可以作”任務“的設定,就是先定義"switch(數值)",然後"case x"下一行則是內容,最後加上"break"表示case結束。大致地表示法如下:
switch(number){
case x:
"reply content/ command"
break;
"new case"
....
其中的reply content/ command在project 11裡是輸出string到LCD上面<lcd.print ("text")>。
參考:
Switch(case) statement_ serial input
LCD library
alphanumeric LCD (16X2)
2013年2月19日 星期二
Wiring-"not equal" & "inversion operator"
前言:
在進行project 10的時候,出現了之前好像也有見到的“x != y"跟新看到的”x = !x“,議開始以為是一樣的,查了資訊後才知道是完全不一樣的含義。
Code:
x != y_ x is not equal to y;
x = !x_ 後面的x是前面x的反相數(inversion operator),看範例的感覺是針對true與false。
討論:
這點是因為要判斷motor何時要切換與何時要啓動的參考,因此加入了inversion operator。對於習慣眼見為憑的我來說,不實際測試實在是不瞭解呢!!所以寫了ㄧ個簡易的程式來跑跑看,如下:
在進行project 10的時候,出現了之前好像也有見到的“x != y"跟新看到的”x = !x“,議開始以為是一樣的,查了資訊後才知道是完全不一樣的含義。
Code:
x != y_ x is not equal to y;
x = !x_ 後面的x是前面x的反相數(inversion operator),看範例的感覺是針對true與false。
討論:
這點是因為要判斷motor何時要切換與何時要啓動的參考,因此加入了inversion operator。對於習慣眼見為憑的我來說,不實際測試實在是不瞭解呢!!所以寫了ㄧ個簡易的程式來跑跑看,如下:
int x = 0;
void setup(){ Serial.begin(9600);}
void loop(){ x = !x; Serial.println(x); delay(500);}
然後接上Arduino且upload後就可以打開Serial monitor觀看數值,恩,的確如預料中的結果。哈哈~
後記:
摸了Arduino也有快兩個月了,對於Wiring的編輯平台而言,覺得真的挺棒且有趣的。覺得挺棒的是因為簡化了機器語言的複雜,對於還沒辦法非常深入機器語言領域的我來說,是很好的起點。另外有趣的是與同樣是指令式語言的MATLAB比較,很多指令都可以直接在MATLAB內顯示結果,但是Arduino都必須先接上電腦後才能利用Serial Monitor來看運算結果,我想這是因為兩個程式語言根本上就不一樣吧~(哈)
2013年2月17日 星期日
Arduino_Project10_Zoetrope
前言:
Zoetrope是延續前一專題衍生的“強化版”,利用眼睛的視覺暫留(Persistence of Vision, POV),對一連串的圖片產生動畫錯覺,是早期動畫(animation)的開始模式。使用H-bridge可以用來控制馬達的正轉與逆轉,搭配可變電阻來控制zoetrope的旋轉速度。
硬體:
馬達,H-bridge,電阻,可變電阻,9V電池,按鈕等等
程式:
利用button來控制zoetrope是否運轉,以及是否改變旋轉方向。旋轉方向的按鈕邏輯可以控制H-bridge的動作模式,藉此使
Code:
x != y_ x not equal to y
a =!a_ inversion operator, x一開始是0的話,在此條件下會變成1(邏輯運算子)
圖片&影片:
後記:
運轉的有點不是很順暢,尤其是在低轉速下。不過很好奇到底轉速如何,因此我在程式中多加了Serial.begin(9600), Serial.println(value) 從serial monitor即時讀取可變電阻改變時所讀取到的電壓數值,發現低於60的讀數,馬達就有點轉不太動了,是上面的旋轉盤太重了嗎??這就令我費解了,可能改天換個電池再試試看。
參考:
視覺暫留
Zoetrope是延續前一專題衍生的“強化版”,利用眼睛的視覺暫留(Persistence of Vision, POV),對一連串的圖片產生動畫錯覺,是早期動畫(animation)的開始模式。使用H-bridge可以用來控制馬達的正轉與逆轉,搭配可變電阻來控制zoetrope的旋轉速度。
硬體:
馬達,H-bridge,電阻,可變電阻,9V電池,按鈕等等
程式:
利用button來控制zoetrope是否運轉,以及是否改變旋轉方向。旋轉方向的按鈕邏輯可以控制H-bridge的動作模式,藉此使
Code:
x != y_ x not equal to y
a =!a_ inversion operator, x一開始是0的話,在此條件下會變成1(邏輯運算子)
圖片&影片:
後記:
運轉的有點不是很順暢,尤其是在低轉速下。不過很好奇到底轉速如何,因此我在程式中多加了Serial.begin(9600), Serial.println(value) 從serial monitor即時讀取可變電阻改變時所讀取到的電壓數值,發現低於60的讀數,馬達就有點轉不太動了,是上面的旋轉盤太重了嗎??這就令我費解了,可能改天換個電池再試試看。
參考:
視覺暫留
2013年2月2日 星期六
Arduino Cookbook
前言:
(原文章名稱) Arduino Cookbook error content...keep updating
這邊記載了閱讀Arduino cookbook發現的錯誤與有疑惑的地方,給自己做點記錄。
內容:
20130202
p19---圖1-9說有放小型揚聲器卻沒有
p20---code最後的"digitalWrite(ledPin, LOW)應該是“outputPin”,想必也是copy/paste的筆誤。
還不懂不瞭解的地方:
20130203
p26---code: return fabs((a-b) / max(fabs(a), fabs(b))) <= DELTA;......
解決的地方:
(原文章名稱) Arduino Cookbook error content...keep updating
這邊記載了閱讀Arduino cookbook發現的錯誤與有疑惑的地方,給自己做點記錄。
內容:
20130202
p19---圖1-9說有放小型揚聲器卻沒有
p20---code最後的"digitalWrite(
還不懂不瞭解的地方:
20130203
p26---code: return fabs((a-b) / max(fabs(a), fabs(b))) <= DELTA;......
解決的地方:
2013年2月1日 星期五
Arduino_Project09_Motorized Pinwheel
前言:
此專題是使用簡易的方式控制馬達(不是伺服器馬達),由於馬達需要更大的電流控制,因此需要外接電源而且需要設計簡單的電路來避免大電流回傳到Arduino而損壞了。
硬體:
Motor, MOSFET, Diode, 10k Ohm, Push button(switch), 9V battery.
程式:
利用MOSFET作為控制9V電源是否可以通過motor的控制,並判斷按下push button時開通MOSFET。
Code:
沒有新的
圖片:
後記:
設計美學的部分跳過,目前以學習所有專題基礎為主,也來到的第九個專題,還有六個專題可以學習。當這十五個專題結束後,就可以進行Arduino Cookbook的研究了(20130201- 已經同時開始研讀cookbook了)。現在的想法應該是不會將Arduino cookbook全部跑過一次,因為內容非常的精彩又多,我應該會先以之前有的想法做一些實際的應用與設計。
Cookbook會成為我的工具書之一,另外Raspberry Pi也延宕好幾天了,希望趕快抽出空擋先將ssh開通並連上,另外關於時間的部分,有人建議可以外接時間電路,可以自己拼裝也可以買現成(少於兩三張國父即可購入)。可以免除每次開機都要重新設定。(不過若成功接上網路,每次開機連網就可以自行校正時間了。也是可以省錢的方式之一。
此專題是使用簡易的方式控制馬達(不是伺服器馬達),由於馬達需要更大的電流控制,因此需要外接電源而且需要設計簡單的電路來避免大電流回傳到Arduino而損壞了。
硬體:
Motor, MOSFET, Diode, 10k Ohm, Push button(switch), 9V battery.
程式:
利用MOSFET作為控制9V電源是否可以通過motor的控制,並判斷按下push button時開通MOSFET。
Code:
沒有新的
圖片:
後記:
設計美學的部分跳過,目前以學習所有專題基礎為主,也來到的第九個專題,還有六個專題可以學習。
Cookbook會成為我的工具書之一,另外Raspberry Pi也延宕好幾天了,希望趕快抽出空擋先將ssh開通並連上,另外關於時間的部分,有人建議可以外接時間電路,可以自己拼裝也可以買現成(少於兩三張國父即可購入)。可以免除每次開機都要重新設定。(不過若成功接上網路,每次開機連網就可以自行校正時間了。也是可以省錢的方式之一。
2013年1月27日 星期日
Arduino_Project08_Digital Hourglass
前言:
時間沙漏(!?),可以計時的數位沙漏,設定好每個LED的間隔時間後,會持續的亮燈。可以搖晃Tilt switch重新計時。
硬體:
六個LED,六個220 Ohm resistor,tilt switch。
程式:
一開始設定初始時間,然後利用millis()的計時功能與設定的interval做判斷,若超過interval則開啟一顆LED且在LED的計數上自動加一以作為下次開啓的基準。另外是設定currentTime & previousTime,所以當超過interval的時候就將previousTime改變成currentTime,這樣再來的currentTime就繼續與新的previousTime作比較了。(應該就是累進計算比較的方式)。
另外比較意外的小錯誤是我原本想將紅色LED作為時間的最後一個階段,但是卻順序顛倒,因為code的設計是從pin 2開始,所以修改了code中的順序,就改用了"x--"。
Code:
long _32 bit number (include negative & positive number).
unsigned long _ 32 bit number only include positive number.
!= _not equal to
x++/++x _x增加1且傳回舊的x/x增加1且傳回新的x.
圖片與影片:
後記:
比較有點混淆的command是++x/x++的傳回新與舊的數值,如果x++是傳回舊的數值,那第一次是(loop 1)x=2, x++ -> (loop 2) x=3, x++....(第二回圈傳回的是新的數值,也就是加過後的),不過網頁範例用的是如下:
x = 2;
y = ++x; // x now contains 3, y contains 3
y = x--; // x contains 2 again, y still contains 3
仔細思考後,在本project的code中,是如下:
if(switchState != prevSwitchState){
for(int x = 2;x<8;x++){
digitalWrite(x, LOW);
}
led = 2;
previousTime = currentTime;
}
所以傳回舊的x是指新的switchState改變後又從2開始,而不是新的數值!?開始,而不是新的數值!?上面的command都是在if()一個新的判斷所加入的,都在粗體紅字的時候就執行完了,所以跟範例給的應該是不同意思。(範例中就直接在digitalWrite內執行了2~7的數值)還在思考這些小問題........
參考:
Tilt switch information
Command
時間沙漏(!?),可以計時的數位沙漏,設定好每個LED的間隔時間後,會持續的亮燈。可以搖晃Tilt switch重新計時。
硬體:
六個LED,六個220 Ohm resistor,tilt switch。
程式:
一開始設定初始時間,然後利用millis()的計時功能與設定的interval做判斷,若超過interval則開啟一顆LED且在LED的計數上自動加一以作為下次開啓的基準。另外是設定currentTime & previousTime,所以當超過interval的時候就將previousTime改變成currentTime,這樣再來的currentTime就繼續與新的previousTime作比較了。(應該就是累進計算比較的方式)。
另外比較意外的小錯誤是我原本想將紅色LED作為時間的最後一個階段,但是卻順序顛倒,因為code的設計是從pin 2開始,所以修改了code中的順序,就改用了"x--"。
Code:
long _32 bit number (include negative & positive number).
unsigned long _ 32 bit number only include positive number.
!= _not equal to
x++/++x _x增加1且傳回舊的x/x增加1且傳回新的x.
圖片與影片:
後記:
比較有點混淆的command是++x/x++的傳回新與舊的數值,如果x++是傳回舊的數值,那第一次是(loop 1)x=2, x++ -> (loop 2) x=3, x++....(第二回圈傳回的是新的數值,也就是加過後的),不過網頁範例用的是如下:
x = 2;
y = ++x; // x now contains 3, y contains 3
y = x--; // x contains 2 again, y still contains 3
仔細思考後,在本project的code中,是如下:
if(switchState != prevSwitchState){
for(int x = 2;x<8;x++){
digitalWrite(x, LOW);
}
led = 2;
previousTime = currentTime;
}
所以傳回舊的x是指新的switchState改變後又從2開始,而不是新的數值!?開始,而不是新的數值!?上面的command都是在if()一個新的判斷所加入的,都在粗體紅字的時候就執行完了,所以跟範例給的應該是不同意思。(範例中就直接在digitalWrite內執行了2~7的數值)還在思考這些小問題........
參考:
Tilt switch information
Command
2013年1月25日 星期五
用Arduino延伸“偽鋼琴鍵盤”
前言:
在project07學習到了使用按鍵與resistor ladder組合創造出keyboard instrument的樂趣,在想使用更多的組合可以組出基本的音階。
硬體:
switch *8, resistor 數個
程式:
使用if...else, 加上else if 擴充邏輯判斷到八種組合,使用array指令增加輸出的聲音頻率。
電阻與聲音頻率對照表:
其中:Resistor是取用的電阻大小,接地的參考電阻為21600 Ohm(21.6K Ohm),Voltage read是估計值,Real A0是實際上Arduino A0所讀到的區間數值(最後兩格),music frequency是聲音頻率的對照。
圖片&影片
後記:
雖然可以很明顯地聽出不同音階,不過木耳的我還是分辨不出來其實際的差異。記得app有可以簡易判斷樂器音階(!?)的軟體!?改天下載來玩玩看。
參考:
Arduino_Project07_Keyboard Instrument
Physical Music note
在project07學習到了使用按鍵與resistor ladder組合創造出keyboard instrument的樂趣,在想使用更多的組合可以組出基本的音階。
硬體:
switch *8, resistor 數個
程式:
使用if...else, 加上else if 擴充邏輯判斷到八種組合,使用array指令增加輸出的聲音頻率。
電阻與聲音頻率對照表:
其中:Resistor是取用的電阻大小,接地的參考電阻為21600 Ohm(21.6K Ohm),Voltage read是估計值,Real A0是實際上Arduino A0所讀到的區間數值(最後兩格),music frequency是聲音頻率的對照。
圖片&影片
八個按鍵很壯觀,若有更多當然更酷,不過那就更花時間了!!
後記:
雖然可以很明顯地聽出不同音階,不過木耳的我還是分辨不出來其實際的差異。記得app有可以簡易判斷樂器音階(!?)的軟體!?改天下載來玩玩看。
參考:
Arduino_Project07_Keyboard Instrument
Physical Music note
2013年1月24日 星期四
Arduino_Project07_Keyboard Instrument
前言:
經過了上一次的project學到了如何使用光敏電阻與piezo搭配成Theremin,這次緊接著又學到使用”Resistor Ladder“的方式來模擬鍵盤樂器(Keyboard Instrument)。利用resistor ladder可以在類比輸入端模擬出數位輸入的效果。
硬體:
電阻:220, 10K, 1M ohm.
按鈕, Piezo, 還可以自己製作鋼琴鍵盤般的紙板。
程式:
利用resistor ladder的設計,當按下不同位置的按鈕時,通過的電壓也不同。藉由程式設定不同讀取電壓分類來傳出不同的頻率(數位輸出)。這個project模擬了middle C, D, E 以及F(262, 294, 330 and 349 Hz.),也利用了新的指令來宣告一串數列,不需要在每個都設定增加編寫程式的麻煩。
Command:
name[] = {1, 2, 3, 4..., n}_ 定義數列的內容
if()...else==if...else if..else if..else if...else_ 在if...else之間可以插入許多個else if以增加判斷邏輯的數量,可以設定許多種條件。
noTone_ 根據文中的建議是因為一直進行判斷,所以當所有邏輯都不成立的時候,需要將tone()的功能關閉。
圖片&影片:
若有足夠的按鈕以及計算好的電阻,可以排出更多階層的電子樂器按鍵喲
結論:
利用參考資料實際算了一下resistor ladder的電壓分流(因為Uno只有1023的input),若增加恰當與足夠的電阻是可以排出更有豐富的聲音階層。另外tone的功能則可以送出不同頻率來搭配輸入,當然也可以類似project06的模式,改用其他更多不同的感測器(類比輸入,例如搭配超音波_倒車雷達的聲響!)來”玩“聲音。不過這有提到一點就是當使用tone功能時,analogWrite()在pin 3 &11會有被干擾的現象。應該是硬體設計上的問題吧!?再找資料來瞭解瞭解。^^期待下一個project可以學到的東西了。
Arduino Project Books
2013年1月19日 星期六
Wiring-"millis()"
前言:
在Arduino Project06中有用到millis的指令,官網介紹的也蠻詳細的不過給了範例有誤,無法執行。
硬體:
無
程式:
程式碼有少一些command,所以執行會錯誤,少的部分是一些宣告。
Code:
int time = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
time = millis();
//prints time since program started
Serial.println(time);
// wait a second so as not to send massive amounts of data
delay(20);
}
底線的部分就是少的部分,缺了一開始的宣告就會整個有問題,所以真是編寫程式要很注意與細心呢!
後記:
還在思考怎麼怎麼將所學到的Code整理成資訊。最近額外的也在構思我的記帳程式,不過這個部分應該是使用LabVIEW囉。
在Arduino Project06中有用到millis的指令,官網介紹的也蠻詳細的不過給了範例有誤,無法執行。
硬體:
無
程式:
程式碼有少一些command,所以執行會錯誤,少的部分是一些宣告。
Code:
int time = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
time = millis();
//prints time since program started
Serial.println(time);
// wait a second so as not to send massive amounts of data
delay(20);
}
底線的部分就是少的部分,缺了一開始的宣告就會整個有問題,所以真是編寫程式要很注意與細心呢!
後記:
還在思考怎麼怎麼將所學到的Code整理成資訊。最近額外的也在構思我的記帳程式,不過這個部分應該是使用LabVIEW囉。
2013年1月18日 星期五
Arduino_Project06_Light Theremin
前言:
這次的計劃是使用簡單的元件製作出<“光”特雷門>電子樂器,一個光電阻與一個壓電元件(就是可以用來製作麥克風的東西)就可以表演不同的音樂囉。
硬體:
光敏電阻,壓電晶體,電阻
程式:
一樣的先如同計劃書的設計將原件放在應該的位置後,定義數位I/O的位置(用類似PWM的方式產生聲音頻率)。一開始先作個光敏電阻的校正,然後等待五秒結束後開始感應光敏電阻(類比I/O)讀取的電壓變化而從數位I/O輸出不同的頻率。
Command:
int/ const int:定義整數與常數(整數形態)
while(expression):當expression不成立時,迴圈將會停止,否則則一直運行下去。
millis():傳回當“Arduino電源開啓”或者“重置”後的時間(微秒)
tone(pin, value, duration):類似PWM,但是duty cycle都是50% high level以及 50% low level,但是彼此之間的頻率是不同的。
圖片:
結論:
在upload code後要快速的在光敏電阻表面上下移動來做光強度的校正,否則就只會吱吱吱吱叫了....不過聲音單調了些,而且頗刺耳,對於輕度聽力障礙的話,高頻聽起來很不悅耳就是了!但是有趣的是利用光能轉換成聲能,是個很棒,簡易的物理觀念學習呢!類似的狀況例如倒車雷達,當快靠近的時候就會急速的尖叫也是同樣的原理。
參考:
Theremin
tone()
這次的計劃是使用簡單的元件製作出<“光”特雷門>電子樂器,一個光電阻與一個壓電元件(就是可以用來製作麥克風的東西)就可以表演不同的音樂囉。
硬體:
光敏電阻,壓電晶體,電阻
程式:
一樣的先如同計劃書的設計將原件放在應該的位置後,定義數位I/O的位置(用類似PWM的方式產生聲音頻率)。一開始先作個光敏電阻的校正,然後等待五秒結束後開始感應光敏電阻(類比I/O)讀取的電壓變化而從數位I/O輸出不同的頻率。
Command:
int/ const int:定義整數與常數(整數形態)
while(expression):當expression不成立時,迴圈將會停止,否則則一直運行下去。
millis():傳回當“Arduino電源開啓”或者“重置”後的時間(微秒)
tone(pin, value, duration):類似PWM,但是duty cycle都是50% high level以及 50% low level,但是彼此之間的頻率是不同的。
圖片:
Raspberry Pi B"不小心"也入鏡了啊!
結論:
在upload code後要快速的在光敏電阻表面上下移動來做光強度的校正,否則就只會吱吱吱吱叫了....不過聲音單調了些,而且頗刺耳,對於輕度聽力障礙的話,高頻聽起來很不悅耳就是了!但是有趣的是利用光能轉換成聲能,是個很棒,簡易的物理觀念學習呢!類似的狀況例如倒車雷達,當快靠近的時候就會急速的尖叫也是同樣的原理。
參考:
Theremin
tone()
2013年1月12日 星期六
Arduino_Project05_Mood Cue
前言:
拖了幾天才將資訊整理上網,這次的計劃是很有趣的名稱-Mood Cue,若用中文理解大概就是情緒暗示器,不過就很像辦公室外的“請進”,“外出”之類的指示牌吧!另外也是第一次使用伺服器馬達(servo motor)跟一般馬達不一樣的地方式使用PWM去控制(類似Project04所提到)。
元件:
使用了伺服器馬達(Servo Motor),可變電阻(Potentiometer)還有電容(Capacitor, 100 uF)。
程式:
這個Project簡單的地方是因為Servo motor已經有寫好的Library可供使用,只要先呼叫library即可,然後使用內建的指令即可以驅動Servo Motor。
Code:
#include<library name.h>...不需要加“;”(半引號)
library name instance name...定義Object name(物件名稱)
object name.attach(pin#)...定義位置(類比輸出)
object name.write(angle)...
map(value, from low, from high, to low, to high)...有點像是比例換算,從取得的value經過原本的比例(from)轉到另ㄧ個比例(to)
圖片:
結論:
利用現成的Library可以快速地得到控制伺服器馬達的功能,搭配更多馬達則可以做更多的事情,例如機械人,控制裝置等等。另外也想找個時間學學如何不用Library來撰寫控制馬達的程式。
參考:
Servo library website
Arduino Project Book
拖了幾天才將資訊整理上網,這次的計劃是很有趣的名稱-Mood Cue,若用中文理解大概就是情緒暗示器,不過就很像辦公室外的“請進”,“外出”之類的指示牌吧!另外也是第一次使用伺服器馬達(servo motor)跟一般馬達不一樣的地方式使用PWM去控制(類似Project04所提到)。
元件:
使用了伺服器馬達(Servo Motor),可變電阻(Potentiometer)還有電容(Capacitor, 100 uF)。
程式:
這個Project簡單的地方是因為Servo motor已經有寫好的Library可供使用,只要先呼叫library即可,然後使用內建的指令即可以驅動Servo Motor。
Code:
#include<library name.h>...不需要加“;”(半引號)
library name instance name...定義Object name(物件名稱)
object name.attach(pin#)...定義位置(類比輸出)
object name.write(angle)...
map(value, from low, from high, to low, to high)...有點像是比例換算,從取得的value經過原本的比例(from)轉到另ㄧ個比例(to)
圖片:
結論:
利用現成的Library可以快速地得到控制伺服器馬達的功能,搭配更多馬達則可以做更多的事情,例如機械人,控制裝置等等。另外也想找個時間學學如何不用Library來撰寫控制馬達的程式。
參考:
Servo library website
Arduino Project Book
2013年1月5日 星期六
Arduino_Project04_Color Mixing Lamp
前言:
2013年開始了五天,終於又有空閒可以進行projects囉!今天所做的是Project04-Color Mixing Lamp,這是個非常有趣的實驗,藉由控制給予感測器不同顏色的光,就給予LED相對應的發光顏色。
硬體:
光敏電阻_Photoresistor
三色LED_LED
電阻_220 and 10K ohm
電路實際圖如下:
Code:
在此Project新學到的指令有:
\t : 等同於keyboard上的tab按鍵
analogWrite : (pin, value),
value-0 (always off)~255(always on)
其中有將analogRead讀取到的數值除以”4“以縮減到可以輸入analogWrite裡面。(這樣算起來表示analogWrite是8 bit)。而根據手冊有談到是使用PWM(Pulse Width Modulation)來輸出Duty cycle。而有關Duty clcle則是利用數位輸出”模擬“類比輸出電壓的方式而達成,但是另一款版本(DUE)則已經搭配了類比輸出電壓的位置。Duty cycle可以參考Arduino.cc的介紹,描述的簡潔有力。網址
原本我以為會按什麼就遮掉什麼顏色,不過實際上好像不太是(或者還沒有加上書中所介紹的乒乓球嗎?)。用手遮住藍色,LED燈會變得更藍;遮住紅色會變得更紅;但是綠色的變化比較不明顯!而用小型手電筒照光的話,照藍色感測器會使得LED變得更紅,類似遮住的反應。整理以上的描述如下:
光敏電阻____LED
遮住藍色____變更藍色
照光藍色區域__變紅色
另外下面的影片是實際操作圖:
而身為一個不專業的玩家,當然會有三用電表這種玩意,就測量了下當遮住光敏電阻時,相對應PWM輸出的電壓變化,整理如下:
遮住顏色_原本電壓_遮住電壓
綠色___2.55V__1.33V
藍色___2.89V__1.07V
紅色___3.54V__2.40V
從以上資訊來推測看看,當遮住藍色而輸出PWM電壓減少,相對的就是指藍色的Duty cycle是比較小的(小於50% or less)這樣說起來應該LED要變得更不藍(或者說紅色或綠色),跟理論上好像有點不搭。
再次的檢查電路以及程式碼,終於發現書中(P57)提供的有小錯誤:
const int greenLEDPin = 9;
const int redLEDPin =11; --->10
const int blueLEDPin =10; --->11
修改後再次測試,成功!!遮住藍色變紅色發光,藍色區域照光變得更藍!!其它以此類推~圓滿達成!
後記:這個Project是使用光敏電阻,不過也有其他更高階的例如“顏色感測器”已經可以直接針對不同顏色的光做反應,而不需要像此專題還需要使用顏色濾片,當然顏色感測器好像也是針對單色光為主(例如紅藍綠三色)!下次的專題任務就是“MOOD CUE”真是令人期待!!
2013年開始了五天,終於又有空閒可以進行projects囉!今天所做的是Project04-Color Mixing Lamp,這是個非常有趣的實驗,藉由控制給予感測器不同顏色的光,就給予LED相對應的發光顏色。
硬體:
光敏電阻_Photoresistor
三色LED_LED
電阻_220 and 10K ohm
電路實際圖如下:
圖中紅綠藍(RGB)是顏色濾片
Code:
在此Project新學到的指令有:
\t : 等同於keyboard上的tab按鍵
analogWrite : (pin, value),
value-0 (always off)~255(always on)
其中有將analogRead讀取到的數值除以”4“以縮減到可以輸入analogWrite裡面。(這樣算起來表示analogWrite是8 bit)。而根據手冊有談到是使用PWM(Pulse Width Modulation)來輸出Duty cycle。而有關Duty clcle則是利用數位輸出”模擬“類比輸出電壓的方式而達成,但是另一款版本(DUE)則已經搭配了類比輸出電壓的位置。Duty cycle可以參考Arduino.cc的介紹,描述的簡潔有力。網址
原本我以為會按什麼就遮掉什麼顏色,不過實際上好像不太是(或者還沒有加上書中所介紹的乒乓球嗎?)。用手遮住藍色,LED燈會變得更藍;遮住紅色會變得更紅;但是綠色的變化比較不明顯!而用小型手電筒照光的話,照藍色感測器會使得LED變得更紅,類似遮住的反應。整理以上的描述如下:
光敏電阻____LED
遮住藍色____變更藍色
照光藍色區域__變紅色
另外下面的影片是實際操作圖:
而身為一個不專業的玩家,當然會有三用電表這種玩意,就測量了下當遮住光敏電阻時,相對應PWM輸出的電壓變化,整理如下:
遮住顏色_原本電壓_遮住電壓
綠色___2.55V__1.33V
藍色___2.89V__1.07V
紅色___3.54V__2.40V
從以上資訊來推測看看,當遮住藍色而輸出PWM電壓減少,相對的就是指藍色的Duty cycle是比較小的(小於50% or less)這樣說起來應該LED要變得更不藍(或者說紅色或綠色),跟理論上好像有點不搭。
再次的檢查電路以及程式碼,終於發現書中(P57)提供的有小錯誤:
const int greenLEDPin = 9;
const int redLEDPin =
const int blueLEDPin =
修改後再次測試,成功!!遮住藍色變紅色發光,藍色區域照光變得更藍!!其它以此類推~圓滿達成!
後記:這個Project是使用光敏電阻,不過也有其他更高階的例如“顏色感測器”已經可以直接針對不同顏色的光做反應,而不需要像此專題還需要使用顏色濾片,當然顏色感測器好像也是針對單色光為主(例如紅藍綠三色)!下次的專題任務就是“MOOD CUE”真是令人期待!!
2012年12月27日 星期四
Arduino_Project03_Love-o-meter
前言:
進入了Project03,內容是使用溫度感測器搭配LED製作一項可以表示您有多熱情!!其實就是設定好溫度的間距,當溫度不斷上升後,LED也亮的更多了。
硬體:
使用的溫度感測器是TMP(36GZ),有趣的是輸出的電壓會正比於溫度(攝氏),所以在使用上還蠻方便的,不像之前使用Thermocouple還需拼電路與做校正曲線轉換。
計算的方式如:
voltage=(reads[0~1023]/1024)*5V[supply power]
temperature=(voltage-0.5)*100
ex:reads=150; ->volt=0.7324; ->temp=23.24
Code:
在此Project新學到的指令有:
const int- 指定常數項
const float-指定浮點數
進入了Project03,內容是使用溫度感測器搭配LED製作一項可以表示您有多熱情!!其實就是設定好溫度的間距,當溫度不斷上升後,LED也亮的更多了。
硬體:
使用的溫度感測器是TMP(36GZ),有趣的是輸出的電壓會正比於溫度(攝氏),所以在使用上還蠻方便的,不像之前使用Thermocouple還需拼電路與做校正曲線轉換。
計算的方式如:
voltage=(reads[0~1023]/1024)*5V[supply power]
temperature=(voltage-0.5)*100
ex:reads=150; ->volt=0.7324; ->temp=23.24
Code:
在此Project新學到的指令有:
const int- 指定常數項
const float-指定浮點數
Serial.begin-設定傳輸速度(baud rate), bit/second
for ()- for (初始數字; 狀態(比較); 增加量++)
Serial.print(number or "text")-在serial monitor列印出數據或文字
Serial.println()-意義如同上述但是會增加新的一行(類似enter)
analogRead()-讀取類比輸入端的讀數(0~1023/10 bit)
for ()- for (初始數字; 狀態(比較); 增加量++)
Serial.print(number or "text")-在serial monitor列印出數據或文字
Serial.println()-意義如同上述但是會增加新的一行(類似enter)
analogRead()-讀取類比輸入端的讀數(0~1023/10 bit)
學習到的指令越來越多,真是有趣。
一般上書籍都不會附上全部的指令(可能太多了吧!而且其實都有在更新的樣子)。Arduino的官網有放上指令全集,是學習時可以參考的資訊。雖然不擔心網頁會突然消失,但是有時間的話我還是會收集並整理到自己的網頁做個備份。
Language Reference
另外隨著Project的複雜度增加,Sketch的頁面也越來越長,抓圖備份好像不再是個好方法,所以我想程式碼的部分就可以省略,直接以檔案備份或者上傳(txt format),這樣可能是比較節省文章撰寫與排版的好方式之一。
一般上書籍都不會附上全部的指令(可能太多了吧!而且其實都有在更新的樣子)。Arduino的官網有放上指令全集,是學習時可以參考的資訊。雖然不擔心網頁會突然消失,但是有時間的話我還是會收集並整理到自己的網頁做個備份。
Language Reference
另外隨著Project的複雜度增加,Sketch的頁面也越來越長,抓圖備份好像不再是個好方法,所以我想程式碼的部分就可以省略,直接以檔案備份或者上傳(txt format),這樣可能是比較節省文章撰寫與排版的好方式之一。
2012年12月24日 星期一
Arduino_Project02_Spaceship Interface
前言:
今天完成了Project02,spaceship interface是模擬太空梭界面,例如飛彈發射器!?真是有趣。
硬體:
電路部分就用到的數位輸出入(Digital I/O)的部分囉,而硬體部分只用到LED,幾個匹配的電阻跟一個開關即可。
程式:
撰寫了簡單的語法邏輯,除了基本的int, void setup, void loop外,還有設定接腳位置-pinMode; 數位訊號讀取&寫入-digitalRead/ digitalWrite, 最後還有控制loop的迴圈運行速度-delay.
Code:
int 初始狀態名稱命名
pinMode(number, OUTPUT / INPUT)
digitalRead/Write(number, HIGH / LOW)
delay(millisecond)
程式縮圖如下:
完成後將程式upload到Arduino就可以看到綠色LED燈亮了,然後就可以按住開關,紅色與黃色的LED就會交替閃爍。
另外學習了如何閱讀電阻表,話說從開始碰電子電路後,也有六七年了,我都還不會,今天也總算是成功地認識電阻表。
後記:
今天學了基本的幾個指令,這些都可以另用LabVIEW模擬狀況。也許改天可以搭配LabVIEW來作相似的工作,順便瞭解兩種語言之間的程式“邏輯”互換。
今天完成了Project02,spaceship interface是模擬太空梭界面,例如飛彈發射器!?真是有趣。
硬體:
電路部分就用到的數位輸出入(Digital I/O)的部分囉,而硬體部分只用到LED,幾個匹配的電阻跟一個開關即可。
程式:
撰寫了簡單的語法邏輯,除了基本的int, void setup, void loop外,還有設定接腳位置-pinMode; 數位訊號讀取&寫入-digitalRead/ digitalWrite, 最後還有控制loop的迴圈運行速度-delay.
Code:
int 初始狀態名稱命名
pinMode(number, OUTPUT / INPUT)
digitalRead/Write(number, HIGH / LOW)
delay(millisecond)
程式縮圖如下:
完成後將程式upload到Arduino就可以看到綠色LED燈亮了,然後就可以按住開關,紅色與黃色的LED就會交替閃爍。
另外學習了如何閱讀電阻表,話說從開始碰電子電路後,也有六七年了,我都還不會,今天也總算是成功地認識電阻表。
後記:
今天學了基本的幾個指令,這些都可以另用LabVIEW模擬狀況。也許改天可以搭配LabVIEW來作相似的工作,順便瞭解兩種語言之間的程式“邏輯”互換。
訂閱:
文章 (Atom)
























