2016年5月30日 星期一

Arduino UNO學習262.螢幕轉接板IIC/I2C



Arduino UNO學習262.螢幕轉接板IIC/I2C

在學習260261使用了1602螢幕,會發現佔用了太多的Arduino接口,
而且接線易接觸不良,文字亮度不易控制等等問題,
所以有業者開發了IIC(I2C)螢幕轉接板,來串接多達16Pin的螢幕,
有內建的電位器來調整亮度,另有跳腳可開關背光,
最重要的是接上Arduino16針腳縮減為4,

硬體除了接上5VGND,2腳的SDASCL直接在Arduin上左的腳位,
SDASCL,如圖 ,由於類比腳A4A5也相通於該2腳位,因此也可接於A4A5,, SDA=A4,,SCL=A5
 

軟體需先安裝I2C資料庫,以下連結擇一下載解壓後安裝到Arduino\libraries
https://drive.google.com/open?id=0B_hzaKBiDSLgQ1I4NURadUV2WTA
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

完成軟硬體安裝後執行Arduino程式,在範例裡會多出NewliquidCrystal,
在此學習不使用該範例,

回到編寫視窗上將程式貼上後上傳

#include <Wire.h>
#include <LiquidCrystal_I2C.h> //務必先安裝資料庫

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //設定位址

void setup() {
  Serial.begin(9600); //監控視窗通訊速率
  lcd.begin(16, 2); //初始化16字元2

  for(int i = 0; i < 3; i++) {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); //閃爍三次後點亮背光

  lcd.setCursor(0, 0); //第一行顯示
  lcd.print("Hello, world!");
  lcd.setCursor(0, 1); //第二行顯示
  lcd.print("www.ee543.com");
}

//開啟監控視窗輸入文字顯示在外接螢幕上
void loop() {
  if (Serial.available()) {
    delay(100);
    lcd.clear();
    while (Serial.available() > 0) {
      lcd.write(Serial.read());
    }
  }
}



若一切正常螢幕會先閃爍三下,然後顯示文字如上圖,若只看到黑塊,則取十字起子,調整背面的電位器,若還是沒有,請查看手上的外接板的通信位址,修改第三行的0x3F,調整為0x270x200x38外接板指定的通信位址,再重新上傳,若無誤,打開Arduino的監控視窗,輸入文字試試,目前的軟硬體都不支援中文字碼,相關大神網址參考,
http://arduino-info.wikispaces.com/LCD-Blue-I2C



2016年5月25日 星期三

Arduino學習250.超音波倒車雷達電子尺



Arduino學習250.超音波倒車雷達

此篇運用超音波模組HC-SR04,來量測距離監控顯示,並由蜂鳴器警示,
準備硬體
超音波模組HC-SR04
有源蜂鳴器5V
利用音波每秒346公尺,由發射端Trig發出人耳聽不到的波頻,
碰到物品回聲由Echo接收端接收波頻,再將來回時間透過計算距離,
 


由模塊接腳分別接上線,及加上蜂鳴器,
HC-SR04腳位
Arduino對應
Vcc
+5V
Trig
D2
Echo
D3
GND
GND



超音波模組在ArduBlock有內建模組,依版本不同積木顏色及位置會不同,
將測得的距離數距設定為變數SR,將其顯示在監控視窗,單位為公分,
並套用在蜂鳴器的間斷時間,使距離長斷音長,距離短斷音時間就短,
上傳後記得打開監控視窗



unsigned long _ABVAR_1_SR = 0UL ;
int ardublockUltrasonicSensorCodeAutoGeneratedReturnCM(int trigPin, int echoPin)
{
  long duration;
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(20);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  duration = duration / 59;
  if ((duration < 2) || (duration > 300)) return false;
  return duration;
}


void setup()
{
  digitalWrite( 2 , LOW );

  Serial.begin(9600);
  pinMode( 7 , OUTPUT);
}

void loop()
{
  _ABVAR_1_SR =      ardublockUltrasonicSensorCodeAutoGeneratedReturnCM( 2 , 3 ) ;
  Serial.print(_ABVAR_1_SR);
  Serial.print(" ");
  Serial.println();
  delay( 100 );
  digitalWrite(7 , LOW);
  delay( _ABVAR_1_SR );
  digitalWrite(7 , HIGH);
}


打開監控視窗,可將收到的訊號透過內建程式直接顯示測到的距離CM公分,
超音波模組除了用在倒車雷達警示外,也可用在智慧車,電子尺等等運