2011年11月29日 星期二

傾斜感測器

不知道為啥買的brick...。水平的時候透過analogRead()會讀取到最大的值,開始傾斜之後讀取到的值就會變小。
哈!覺得這種玩具比玩圍棋要多花錢很多錢

2011年11月22日 星期二

Ultrasonic Ranging Module - HC-SRO4 + Arduino

超音波距離感測器,我買的是兩顆眼睛、四隻腳的HC-SRO4(正面如下圖)
HC-SRO4正面看由左至右的腳分別是
  • Vcc
  • Trig
  • Echo
  • Gnd
眼前程度體會的重點有兩個,一個是自己透過Trig, Echo完成一個Ping完成一次發送/接收超音波測距的動作,針對Trig送10 microsecond的HIGH訊號出去,然後SRO4就會送出8個40kHz的square wave出去,當訊號回來的時候,我們透過pulseIn()取得Echo pin HIGH pulse的時間;另一個是距離的計算根據datasheet說明的Echo back pulse width(這裡是Echo Pin由LOW -> HIGH -> LOW的時間) microseconds除上58就是距離(cm),除上148就是inch的距離。

Lab 1 - 結果送出Serial Port

/**
 *  Ultrasonic 1: 超音波測距 秀在Serial Port 9600
 */
#define TrigPin 10
#define EchoPin 13

long ping() {
  // PING
  digitalWrite( TrigPin, LOW );
  delayMicroseconds( 2 );
  digitalWrite( TrigPin, HIGH );
  delayMicroseconds( 10 );
  digitalWrite( TrigPin, LOW );
  return pulseIn( EchoPin, HIGH );
}

void setup() {
  pinMode( TrigPin, OUTPUT );
  pinMode( EchoPin, INPUT );
  Serial.begin( 9600 );
}

void loop() {
  long duration, cm;
  String result = "Distance: ";

  duration = ping();
  cm = duration / 58;
  result += cm;
  result += " (cm).";
  Serial.println( result );
  delay( 1500 );
}
終於買了其他顏色的單芯線,那就紅色是高電位、黑色接Gnd、其他顏色就接訊號,還沒想說input/output用啥顏色來區分。
換個角度再照一張

Lab 2 - 結果顯示在16*2 LCD

2011年11月17日 星期四

analogWrite()

因為調整晚上班表,所以昨天只有一項作業,做完之後,看英文之前,踹一下Manning書上這個表的東西。
Table: Arduino analog resolution and pins (from Arduino in Action)
Analog Input Analog Output
Resolution 10 bits (0~1023) 8 bits (0~254)
Votage Range 0~5 (Volts) 0~5 (Volts)
Arduino Pins A0~A5 Digit Pins 3, 5, 6, 9. 10, 11
Arduino Mega Pins A0~A15 Digit Pins 0~13
在做之前的作業中,由Language Documents知道digitWrite(pin, value)第二個參數是HIGH/LOW;analogWrite(pin, value)。然後很無聊的做兩個練習,分別針對digit pin 13/11使用analogWrite()
/**
 * Analog out on Digit Pin 13 test
 */
const int ledPin = 13;

void setup() {
  pinMode( ledPin, OUTPUT );
}

void loop() {
  for( int i=0; i<10; i++ ) {
    analogWrite( ledPin, 54+(i*20) );
    delay( 1000 );
  }
}
可以看到pin 13沒有亮度的差別。接著把線路改成接到digit pin 11和程式ledPin改成11,燒進去之後跑一下看看,就可以看到LED的亮度會變化。

2011年11月16日 星期三

Serial port控制LED發光的作業

使用Serial Port透過Arduino Uno來控制LED的開關的作業。
Listing. Code
/**
 * Serial Library: Read 2 - Control LED
 */
int incomingByte = 0;
const int ledPin = 13;

void setup() {
  pinMode( ledPin, OUTPUT );
  Serial.begin( 9600 );
  Serial.println( "'L' turn on, 'l' turn off" );
}

void loop() {
  if( Serial.available() > 0 ) {
    incomingByte = Serial.read();
    
    // input 'L'
    if( incomingByte == 76 ) {
      Serial.println( "LED on!!" );
      digitalWrite( ledPin, HIGH );
    }
    // inpit 'l'
    if( incomingByte == 108 ) {
      Serial.println( "LED off!!" );
      digitalWrite( ledPin, LOW );
    }
  }
}

2011年11月11日 星期五

新玩具

Arduino Uno

今年的新玩具~~玩不起樂高機器人就先玩這個。自己動手做看得到的東西,即使是簡單的LED, 可變電阻的組合的作業都覺得特別有fu。基礎先玩好,再來玩其他sensor和玩具...Make雜誌真是讚~~

PS. 看了一堆shield之後,覺得玩這個也不便宜 哈