針對查詢「IIC」依關聯性排序顯示文章。依日期排序 顯示所有文章
針對查詢「IIC」依關聯性排序顯示文章。依日期排序 顯示所有文章

2016年5月30日 星期一

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



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

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

硬體除了接上5V及GND,另2腳的SDA及SCL直接在Arduin上左的腳位,
SDA和SCL,如圖 ↓,由於類比腳A4和A5也相通於該2腳位,因此也可接於A4和A5,, 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,調整為0x27或0x20或0x38外接板指定的通信位址,再重新上傳,若無誤,打開Arduino的監控視窗,輸入文字試試,目前的軟硬體都不支援中文字碼,相關大神網址參考,
http://arduino-info.wikispaces.com/LCD-Blue-I2C



2018年5月5日 星期六

UNO學習18042.自製電子尺

UNO學習18042.自製電子尺

請參考及學習250超音波倒車雷達電子尺
及學習262螢幕轉接板IIC/I2C

準備以下硬體並安裝
Arduino UNO
超音波模組HC-SR04
IIC1602螢幕
7~12V電池或5v移動電源接方USB
雷射頭-非必要
接線

硬體連接如下↓
UNO的A4接螢幕轉接板SDA
UNO的A5接螢幕轉接板SCL
UNO的P2接超音波模塊Trig
UNO的P3接超音波模塊Echo


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

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //設定位址或0x27或0x20
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 > 400)) return false;
  return duration;
}

void setup()
{
  Serial.begin(9600); //通訊速率
  lcd.begin(16, 2); //初始化16字元2行
  lcd.backlight();
}

void loop()
{
  _ABVAR_1_SR = ardublockUltrasonicSensorCodeAutoGeneratedReturnCM( 2 , 3 ) ;
  Serial.println(_ABVAR_1_SR); //在電腦監控視窗顯示
  lcd.clear();
  lcd.print(_ABVAR_1_SR); //在IIC螢幕顯示
  delay( 1000 ); //每秒取一次數據顯示
}


注意該超音波模組HC-SR04最大量測距離為400公分,超過顯示0,
IIC1602螢幕若無法顯示則需再確認該模組的通訊位址,
測試OK後要裝成移動式,但麵包板太大,又想裝上紅雷射來定位,
此時發現SMD貼片板本的CH340機板,有提供2個5V和1個3.3V的接口,
因此移裝到該機板,如此就不需要麵包板了↓


測試OK要開始安裝,又發現超音波模塊的安裝孔太小,需再加大,
並把紅雷射頭裝在底下,各部分螺絲及支架等組裝完成↓
窮則變,變則通,世界不斷變化前進,唯一不變的只有變
www.ee543.com

2016年12月2日 星期五

Arduino UNO學習610.照度計模塊GY-30

Arduino UNO學習610.照度計模塊GY-30

對”光”的感應元件多是用光敏電阻,但光敏電阻的感應範圍較窄,
當要接收強光時,就需要BH1750這類的晶片,最亮可接收到60000以上的Lx,
Lux勒克斯Lx是一種光的亮度單位,請自上網搜知,此處不作解釋,
此模塊GY30便搭載了BH1750晶片,並使用3-5V電力
 
準備以下硬體並安裝↓
Arduino UNO R3
照度計模塊GY-30
接線

.VCC=電源正輸入
.SCL=IIC時脈
.SDA=IIC數據
.ADD=驅動位址,可不接或接地
.GND=低平電源共端


需先安裝資料庫到libraries中,參考下載點
下載目錄安裝到C:\Program Files\arduino\libraries
再開啟arduino程式,於範例中會多個BH1750,選擇BH1750test上傳, ↓
 
  以下測試環境為Win7+Arduino1.6.7版本+硬體Arduino Uno R3↓
#include <Wire.h>
#include <BH1750.h>

BH1750 lightMeter;

void setup(){
  Serial.begin(9600);
  lightMeter.begin();
  Serial.println("Running...");
}

void loop() {
  uint16_t lux = lightMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);
}

完成上傳後打開監控視窗,開始回傳顯示亮度數據↓

大神網址參考
www.homautomation.org/2014/06/15/measure-light-with-arduino-and-bh1750-module


在WinXP測試時有編譯錯誤的情況,換了主機及Arduino IDE軟體版本有些可以,
原因是XP部分程式與Arduino版本的相容問題,目前還找不到簡單的處理方式,
 建議使用Win7上傳,
 



2017年5月15日 星期一

Arduino170513.對射式光電感應模塊FC33測馬達轉速計數器

學習170513.對射式光電感應模塊FC33測馬達轉速計數器

在學習按鍵計數器完成後,要搭配光電感應模塊來測馬達電機轉速,
此模塊主晶片為LM393,響應時間約10uS,腳位為訊號/GND/VCC,
內建帶燈,在有物件遮蔽時輸出高電位內建燈熄,
反之無遮蔽時輸出低電位內建燈亮↓


準備以下硬體並安裝↓
Arduino UNO R3
對射式光電感應模塊FC33
公對母杜邦線
馬達(最好RPM1000以下,此篇安裝TT馬達)
光柵輪盤或風扇片



此篇單純測試轉速,所以馬達另外供電啟動,和Arduino無直接連接↓


和學習"按鍵計數器"一樣的拼圖程式,將閃燈去除,時間修改為10ms,
此模塊反應時間為10us,而1000000us=1秒,即1秒可達100000次,
理論上應可測試RPM60萬轉速,但需Arduino及程式等搭配,
在網上有許多換算過直接顯示RPM的程式,但每個程式測試後的誤差很大,

所以此用簡單的計數程式,不換算轉速,用手動計時的方式,減少UNO板的計算負擔↓

bool _ABVAR_1_BTS= false ;
bool _ABVAR_2_BTL= false ;
int _ABVAR_3_count = 0 ;

void setup()
{
  pinMode( 2 , INPUT);
  Serial.begin(9600);
}

void loop()
{
  _ABVAR_1_BTS = digitalRead(2) ;
  if (( ( _ABVAR_1_BTS ) != ( _ABVAR_2_BTL ) ))
  {
    if (( ( _ABVAR_1_BTS ) == ( HIGH ) ))
    {
      _ABVAR_3_count = ( _ABVAR_3_count + 1 ) ;
      Serial.print(_ABVAR_3_count);
      Serial.println();
    }
  }
  _ABVAR_2_BTL = _ABVAR_1_BTS ;
  delay( 10 );
}


上傳後打開電腦的監視小窗,啟動馬達就會開始計數,除以20格後約180RPM,
為了測試模塊反應時間,將光柵輪盤換成了風扇片,由20格降低為3次,
並接上外接顯示LED,另參考學習螢幕轉接板IIC/I2C↓


因Block積木沒有完美對應外接I2C螢幕,所以手寫修改程式↓

#include <Wire.h>
#include <LiquidCrystal_I2C.h> //務必先安裝資料庫
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //注意0x3F螢幕位址

bool _ABVAR_1_BTS= false ;
bool _ABVAR_2_BTL= false ;
int _ABVAR_3_count = 0 ;

void setup()
{
  pinMode( 2 , INPUT);
  Serial.begin(9600);
  lcd.begin(16, 2); //初始化16字元2行

  for(int i = 0; i < 2; i++) {
    lcd.backlight();
    delay(200);
    lcd.noBacklight();
    delay(200);
  }
  lcd.backlight(); //閃爍2次後點亮背光
  lcd.setCursor(0, 0); //第一行顯示
  lcd.print("0");
}

void loop()
{
  _ABVAR_1_BTS = digitalRead(2) ;
  if (( ( _ABVAR_1_BTS ) != ( _ABVAR_2_BTL ) ))
  {
    if (( ( _ABVAR_1_BTS ) == ( HIGH ) ))
    {
      _ABVAR_3_count = ( _ABVAR_3_count + 1 ) ;
      Serial.print(_ABVAR_3_count);
      Serial.println();
      lcd.clear();
      lcd.print(_ABVAR_3_count);
    }
  }
  _ABVAR_2_BTL = _ABVAR_1_BTS ;
  delay( 5 );
}

經過測試20格的光柵輪盤或3葉風扇片,換算為RPM後誤差不大,
而外接I2C螢幕後計數變慢了,誤差變大,
所以建議還是用電腦監視小窗會較理想,不要再增加程式的負擔,
影片


測試過幾種不同馬達後發現,由於Arduimo的通信速率為9600,
1分鐘為60秒=60000ms/9600=6.25ms,
因此只要快於該速度回傳到電腦監控螢幕就會漏數,
若要測高轉速馬達,建議過減速齒輪或減少轉盤空格,
或是修改程式不要每次高低訊號都回傳電腦螢幕,



www.ee543.com