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

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



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

2020年9月16日 星期三

測試馬達轉速與繞線關係

測試馬達轉速與繞線關係
 
此不說明馬達轉動的原理,但需知道電力與馬達的關係,
右手安培定律,電流通過方向,決定磁場方向,決定馬達轉動方向,
電流由正極流向負極,即右手姆指向負,電流朝4手指方向,
將右手的大拇指指向電流I方向,再將四根手指握緊電線,
則彎曲的方向決定磁場B的方向, 資料圖片來源~維基百科
https://zh.wikipedia.org/wiki/%E5%AE%89%E5%9F%B9%E5%AE%9A%E5%BE%8B
圖↓



DC有刷馬達只要改變正負電流的輸入端,就可改變馬達轉動的方向,
相同電力條件下,影響馬達效能的,就是馬達的繞線,
繞圈數,材料,粗細,方式等,另外就是磁鐵的磁性強度及軸承等,
線圈繞在轉子上,定子在線圈外無直接接觸,
轉子銅線固定在轉軸上,轉軸一端由碳刷電刷接過電,
圖↓


轉速越高一般來說力矩越低,就像汽車低速爬坡檔有力但轉速慢,
而跑車高速轉但無法載重爬坡力低,

繞線越短電流通速度越快,馬達轉速越快,扭力越低,耗電越高,
試想將電池一條電線短路,會耗盡電池電力並電線發燙燒斷,

線圈越長電流越慢,轉速越慢,越省電,
繞線越粗電阻越低,通過電流越大,產生磁性就越強,轉速越快
在有限的繞線範圍內,要高轉速又要高扭力還要低耗電,
就要改善定子的磁力,及電刷和軸承等等條件,
圖↓

以下測試拆解普遍使用在玩具車的130馬達,
外觀尺寸都相同,內部和外觀顏色無關,
圖↓

先以18650電池4.3v測試啟動及空轉及堵轉電流,
就可明顯知道差異,
啟動瞬間電流大,空轉時最低,堵轉為受力致馬達停止,
圖↓

馬達透過計數設備,過48比齒輪盒測2葉片計數,
圖↓

各馬達測試電壓電流轉速完後拆殼比較
圖↓
 
電科同學可找翻課本資料公式,
課本是專人審核的,網路資料很多不正確,
圖↓
w=2Pi*RPM/60,
角速率=2*3.14*轉速/60秒

以及另一公式
T=P*E/w
轉矩=功率*效能/角速率

由於無法取得馬達效能及輸出功率,以下帶耗電瓦數計算,
則可簡化公式為
轉矩N.m=(電流A*電壓V)/(0.105*轉速RPM)

將各馬達測4.2v過48齒輪比時數據記錄並計算
G款=0.17A,0.7W,12000轉,0.00055N.m
D款=1A,4.2w,38400轉,0.00104N.m
W款=0.3A,1.26w,18000轉,0.00069N.m
B款=0.12A,0.5w,11000轉,0.00043N.m
Y款=0.02A,0.08w,2460轉,0.00031N.m

得轉矩單位N.m,可轉換成公制Kgf.cm,參考馬達廠的自動轉換程式
https://www.orientalmotor.com.tw/om/support_tool_tw/torque/

將得到的轉矩/耗電瓦數,計算出每瓦耗電的效率比較
G款=0.0008=繞線徑0.16mm,轉子16片,定子磁力強
D款=0.00025=繞線徑0.16mm,轉子10片,定子磁力弱
W款=0.00039=繞線徑0.16mm,轉子16片,定子磁力中
B款=0.00087=繞線徑0.10mm,轉子16片,定子磁力中
Y款=0.0039=繞線徑0.10mm,轉子16片,定子磁力強

可看出每瓦效能,繞線細長+強磁的效率是最高的,
一般來說售價也最高,
而繞線粗短是最快最耗電效率是最低的,
在應用上,若是要接太陽能板低耗能用,
則需選擇細長線的,低壓低流,
若是要逆向作發電的也是要選細長線的,
高壓低流低速,逆向達轉速時才發出低壓低流,
若是接電池不考慮耗電要快轉的可選粗短線,
要快轉又要載重車用就要粗長線,

影片↓

另篇相關參考
TT馬達測試器 轉速功率轉矩
https://ee543.blogspot.com/2019/12/tt.html
將原本的UNO單片機,改用Nano,
程式是一樣的,稍作修改,顯示在外接螢幕上,
i2c接腳SDA=A4,,SCL=A5,參考另篇螢幕轉接板,
https://ee543.blogspot.com/search?q=i2c
在程式介面要記得選擇到nano在能正常上傳,
圖↓


#include <SCoop.h>
bool BTS= false ;
bool BTL= false ;
int count = 0 ;

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

void setup()
{
  pinMode( 2 , INPUT); //P2入光電計數器訊號
  Serial.begin(38400);
  mySCoop.start();
  pinMode( 7 , OUTPUT); //P7出高電繼電器控制

 lcd.begin(16, 2); //初始化16字元2行
  for(int i = 0; i < 2; i++) {//閃爍後亮背光
    lcd.backlight();
    delay(200);
    lcd.noBacklight();
    delay(200);
  }
  lcd.backlight();
  lcd.setCursor(0, 0); //第一行顯示
  lcd.print("0");
}

void loop()
{
  BTS = digitalRead(2) ;
  if (( ( BTS ) != (BTL ) ))
  {
    if (( (BTS ) == ( HIGH ) ))
    {
      count = (count + 1 ) ;
      Serial.print(count);
      Serial.println();
    }
  }
 BTL =BTS ;
  delay( 3 );
}

defineTaskLoop(scoopTask2)
{
  digitalWrite( 7 , LOW );
  delay( 3000 );
  digitalWrite( 7 , HIGH );
  delay( 60000 );
  digitalWrite( 7 , LOW );
  lcd.clear();
  lcd.print(count);
  delay( 7000 );
  lcd.noBacklight();
  delay(200);
  lcd.backlight();
  count = 0 ;
  lcd.clear();
  lcd.print("0");
}




https://www.ee543.com


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