顯示具有 ArduBlock 標籤的文章。 顯示所有文章
顯示具有 ArduBlock 標籤的文章。 顯示所有文章

2019年12月25日 星期三

TT馬達測試器 轉速功率轉矩

TT馬達測試器 轉速功率轉矩

TT馬達是一種由130馬達經過齒輪調整轉速後的一種減速馬達,
多用在智慧車的小製作上,不同的齒輪比會有不同的轉速,
和顏色無直接關係,齒輪是在內部,所以外觀看不出差異,圖↓TT1.jpg

基本上轉速越高轉矩越低,就像汽車低速爬坡檔有力但轉速慢,
而跑車高速轉但無法載重爬坡力低,
超過齒輪馬達的載重就會造成齒輪崩壞或馬達線圈燒斷,
製作了一個測試轉速及耗電流的設備,圖↓TT馬達測試器.jpg

Arduino UNO
測速光電感應模塊
高電平繼電器
指針式電流表
電壓表
18650供電
馬達加葉片
開關,線材,機構
 
#include <SCoop.h>
bool _ABVAR_1_BTS= false ;
bool _ABVAR_2_BTL= false ;
int _ABVAR_3_count = 0 ;

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

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 );
  yield();
}

defineTaskLoop(scoopTask2)
{
  digitalWrite( 7 , HIGH );
  delay( 60000 );
  digitalWrite( 7 , LOW );
  delay( 60000 );
  _ABVAR_3_count = 0 ;
}

上傳程式,先馬達電源供電開關,開啟電腦的監控視窗後,
會自動啟動繼電器計時,電流表通電到馬達轉動,
葉片觸發感應器,訊號回傳至UNO計數,
60秒後繼電器跳停,馬達停止,於電腦上讀數約120,
除3葉片訊號即每分鐘40轉=40RPM
圖↓200527.jpg
影片

共TT馬達3種測得
120/3=40RPM=齒輪比200
180/3=60RPM=齒輪比120
460/3=153RPM=齒輪比48

用指針電流表,因為馬達啟動瞬間與空載的耗電流不同,
電子式無法測得瞬間的電流值,

該電壓表是5v以上用的,加上電表耗電所以顯示會低約0.2v,
測18650電池,馬達未通電約4~3.7v,轉動後會有壓降,
電池耗電會影響馬達轉速,可改換變壓器供應DC5v,
或再另加降壓板調壓馬達需求的電壓,

電科同學可找翻課本資料公式
w=2Pi*RPM/60,
角速率=2*3.14*轉速/60秒
將以上測得數據40RPM帶入
2*3.14*40/60=4.19弳度/秒

以及另一公式
T=P*E/w
轉矩=功率*效能/角速率
一般忽略馬達效能
將馬達測得0.1A*3.8V=0.38瓦,得耗功率P
將上公式算出的角速率4.19帶入
0.38/4.19=0.091轉矩單位牛頓-公尺(N-m)

一般小馬達標示單位多為Kgf-cm
1N-m=10.1972Kgf-cm
網上有很多轉矩換算網頁
https://www.orientalmotor.com.tw/om/support_tool_tw/torque/
將0.091N-m轉換成0.9279Kgf-cm
找到資料由功率和轉速可得轉矩
即3.8v時的空轉速40RPM,轉矩0.93Kgf-cm
另需再測試堵轉數據再套公式得最大轉矩


公式簡化為

N-m=((A*V)/(6.28*RPM))*60

多種單位換算
1N牛頓=102g
1Kg=9.8N
1Kg=1Kgf(f為在地球質量加速度單位接近1)
1Kg-m=9.8N-m
1N-m=0.102Kg-m
1N-m=10.2Kg-cm=10.2Kgf-cm






www.ee543.com

2017年8月8日 星期二

學習170808.光電測轉速模塊MH測TT減速馬達

學習170808.光電測轉速模塊MH測TT減速馬達

準備以下硬體並安裝↓
Arduino UNO R3
光電測轉速模塊MH
公對母杜邦線
TT減速馬達
20格輪盤



此光電模塊輸出數位訊號,A0腳位是無效的,先搭配內建數位開關程式來測試,
可參考學習131數位開關,接好硬體上傳內建範例Digital>Button↓


上傳後取金屬起子紙板塑膠尺等物在感應槽來回移動,UNO內建P13燈會隨訊號熄亮,
測試一些材料後會發現此模塊無法感應部分塑膠材質,
確認模塊沒問題,來測試TT減速馬達的轉速,此搭配20格輪盤及18650電池,↓

此模塊和對射式光電感應模塊FC33功能是相同的,可參考學習170513,
程式也一樣,找出拼圖上傳打開監視小窗↓

{
  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 );
}

通電啟動馬達就會開始計數,計時60秒後約1600,除以20格後約80RPM,
此為特殊齒輪比馬達,測其他一般的TT馬達約180RPM,
注意電腦與Arduimo的通信速率為9600,只要速度高於9600就會漏數,
就要過減速齒輪或降低光柵格數
影片



www.ee543.com

2017年5月26日 星期五

學習170527.4針可調光敏模塊

學習170527.4針可調光敏模塊

之前學習了使用光敏電阻讀取數據來控制燈開關,
而此模塊可輸出數位訊號及類比數據,
並帶有電位器,可直接調整以搭配環境光源來觸發訊號,


類比訊號可參考學習310接收類比訊號
使用內建範例Basics>AnalogReadSerial,
將模塊的類比訊號腳接上UNO板的A0,上傳後開啟監控視窗,取得類比數據,


另可參考學習340光控感光燈,
將環境數據達到某個數值,則啟動內建P13LED燈


數位開關可參考學習131,130等按鍵控制LED燈,
使用內建範例Digital>Button,
將模塊的數位輸出腳接在Arduino的Pin2
調整模塊電位器,當環境亮時輸出低電平,環境暗時輸出高電平,
以啟動控制P13LED燈,



此模塊的數位輸出已搭配電位器設計,
可在環境暗時直接輸出高電以點亮LED燈,
因此可不需要Arduino,可直接接上外部LED燈,
但輸出電流低,若要啟動其他設備需搭配低電平電位器,
以下影片前部當環境暗時啟動燈,後部影片則相反的當環境亮時才啟動馬達,




www.ee543.com

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

2017年4月11日 星期二

Arduino學習.按鍵計數器

Arduino學習.按鍵計數器

會用按鍵來控制LED燈後,此篇要用按鍵來計算次數,
並顯示在監控螢幕上,準備硬體安裝↓
開關*1
10K或1k電阻*1
接線

外掛ArduBlock找出拼圖↓

上傳後打開監控畫面,並壓下按鍵,正常情形下,在未通路前GND訊號經過電阻到P2,當按鍵被壓下,高電位被傳送到P2腳位時,則變數count+1,並顯示在監控畫面上,此時應會發現,當按鍵一直被壓著,就會一直計算,因此需另多加判斷式,來判斷P2是否放手回復,才算一次↓
設定變數BTS和BTL是按下和放手,二種不同狀態,來判斷P2腳位是否有高位和低位的變化,當有變化時才計一次,沒變化時就不計次,此程式可運用在如光電感應器.近接開關或計算馬達轉速等等計數使用

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

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

void loop()
{
  _ABVAR_1_BTS = digitalRead(2) ;
  if (( ( _ABVAR_1_BTS ) != ( _ABVAR_2_BTL ) ))
  {
    if (( ( _ABVAR_1_BTS ) == ( HIGH ) ))
    {
      digitalWrite( 13 , HIGH );
      _ABVAR_3_count = ( _ABVAR_3_count + 1 ) ;
      Serial.print(_ABVAR_3_count);
      Serial.println();
    }
  }
  _ABVAR_2_BTL = _ABVAR_1_BTS ;
  digitalWrite( 13 , LOW );
  delay( 50 );
}

求知若渴,虛心若愚

2017年3月24日 星期五

Arduino學習.繼電器控制電磁計數器跳表

Arduino學習.繼電器控制電磁計數器跳表

目標要按下按鈕或感應訊號時,透過繼電器驅動計數器,
並要測試計數器的時間反應極限,
由於此計數器是使用12V電力,而UNO僅輸出5V電力,
故需另接繼電器來驅動計數器跳表,

準備的硬體有
LED燈*1
220或330歐電阻*1
10K或1K電阻*1
開關*1
面包板*1
線材
電磁計數器*1
繼電器*1
DC9~12V電力

可先參考學習130.按鍵控制LED燈,

在開關常態時電阻連接GND,使之接收低電位訊號,
此次積木程式利用了內建P13的LED燈,
在觸發按鍵為高電位訊號後,P13的LED燈快閃10次,
一亮一滅的時間為50ms+50ms,
若沒問題則可連接硬體繼電器及計數器,
 
這次是搭配高電位觸發的繼電器,
腳位分別是+5V,GND,訊號,
而計數器是12V的,但測試9v電池可驅動,
所以一線接電池負,另一線接繼電器,於NO常開腳再接到電池正,
建議P13測試無誤後建議改回P11,
因為UNO板在開啟時P13燈會閃動而觸發繼電器,

完成軟硬體後,按下按鈕使計數器跳表10下,
可修改50ms時間差,測試計數器的時差極限,
測試後14+14=24毫秒已是極限,再快就會出現漏數,







2017年3月23日 星期四

Arduino學習.水滴感應模塊

Arduino學習.水滴感應模塊

準備以下硬體並安裝↓
Arduino
水滴感應模塊
公對母接線

以下腳位定義,連線到Arduino上
.S=輸出模擬類比訊號Analog,接到Arduino的A0腳位
.+=+5Vcc
.-=GND


硬體連線好後打開Arduino的內建範例,檔案>範例>Basics>AnalogReadSerial↓
 


建議將最下方delay時間改為1000,上傳後開啟監控視窗↓



一開始的數據是0,滴些水到感應線上,監控數據開始變化,水滴越多,數據就越高↓



以上可取得數據約0~290之間,將這數據轉換成13腳LED閃爍時間,
可參考類比控制閃燈課程http://ee543.blogspot.tw/2016/01/arduino321.html
設定變數名A為閃爍時間,當水滴量大於50時點亮LED, 水滴量越大閃爍越快↓


int _ABVAR_1_A = 0 ;

void setup()
{
  Serial.begin(9600);
  pinMode( 13 , OUTPUT);
}

void loop()
{
  _ABVAR_1_A = map ( analogRead(0) , 0 , 290 , 290 , 10 )  ;
  Serial.print(analogRead(0));
  Serial.println();
  if (( ( analogRead(0) ) > ( 50 ) ))
  {
    digitalWrite( 13 , HIGH );
    delay( _ABVAR_1_A );
    digitalWrite( 13 , LOW );
    delay( _ABVAR_1_A );
  }
}

上傳後打開監視窗,並滴水到感應器,看看P13燈的反應,
自己試試改接馬達,模擬車輛遇雨天時自動啟動雨刷速度,


www.ee543.com

2016年12月16日 星期五

Arduino學習.可變電阻控制伺服馬達機器爪



Arduino學習.可變電阻控制伺服馬達機器爪

伺服馬達,各有不同的扭力及速度,有180度角PWM訊號控制,
也有360度及數位控制型,此篇為180度角PWM訊號控制的馬達,
馬達耗電可能超過Arduino板範圍,因此建議另外接電源,
由USB提供電力給Arduino,只支援500mA,扣除本身需求,只能輸出約300mA,
由5.5mm接口供應DC9V電力,扣除基本需求,約輸出700mA,超過需求則需另接電源,
以免過載燒板,或馬達運作不正常等抖動等情形,
記得要將控制線接在有~記號的PWM腳位,

硬體準備↓
Arduino UNO R3
可調電阻,10K或5K或1k皆可
伺服馬達
DC9V1A電源器
接線數條
安裝時要注意接線以免燒毀電機,此例款接線為橙訊號/紅正電/棕負電↓

程式變數由A0接腳的電位器輸入訊號值0~1023,再轉換成要控制電機的角度,
因機器爪單邊的開合角約90度左右,因此轉換成0~100度,
若要安裝機器爪要注意調整好位置再鎖螺絲↓

#include <Servo.h>

int _ABVAR_1_A0 = 0 ;
Servo servo_pin_9;

void setup()
{
servo_pin_9.attach(9);
}

void loop()
{
_ABVAR_1_A0 = map ( analogRead(0) , 0 , 1023 , 0 , 100 )  ;
servo_pin_9.write( _ABVAR_1_A0 );
delay( 50 );
}

若要安裝多軸的機器人手或腳,就增加電機就可增加轉動的關節了,
完成影片參考↓

 

2016年7月26日 星期二

Arduino UNO學習522.紅外線搖控器控制元件



Arduino UNO學習522.紅外線搖控器控制元件

此篇要用搖控器來控制LED燈及蜂鳴器,
目前ArduBlock與該外部函式庫IRremote無法完全搭配,
因此由ArduBlock編寫部分程式,再手寫修改加入內建範例程式中,
確認已學習安裝IRremote函式庫,並已學會取得搖控器的編碼,
請參考學習520.紅外線搖控器,並將IRrecvDemo的程式碼取出待用,
下圖安裝了2種元件,自行預設搖控器找2個按鍵的編碼作對應,
分別左為紅外線接收器,蜂鳴器,LED燈另外加上野生遙控器一支↓



完成硬體後,第一步打開內建範例IRremote\IRrecvDemo,上傳後打開監控視窗,
隨便找遙控按鍵取得編碼,取紙張記錄下按鍵的編碼,並將範例檔案取出備用,
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

第二步,打開ArduBlock編寫部分程式如下,將取得的遙控編碼加上0x00,
例FF30CF改為0x00FF30CF,並設定當遙控器碼FF30CF按下時則Pin2燈高3秒,
當遙控器碼FF18E7時Pin4蜂鳴器叫1秒,依圖找出ArduBlock的拼圖塊吧↓


上傳後先取得由ArduBlock作成的程式碼到筆記本或其他編輯軟體上,
unsigned long _ABVAR_1_IR = 0UL ;
void setup()
{
  pinMode( 2 , OUTPUT);
  pinMode( 4 , OUTPUT);
}

void loop()
{
  if (( ( _ABVAR_1_IR ) == (0x00FF30CFUL ) ))
  {
    digitalWrite(2 , HIGH);
    delay( 3000 );
    digitalWrite(2 , LOW);
  }
  if (( ( _ABVAR_1_IR ) == (0x00FF18E7UL ) ))
  {
    digitalWrite(4 , HIGH);
    delay( 1000 );
    digitalWrite(4 , LOW);
  }
}

第三步要將內建的程式碼和ArduBlock編寫的程式碼二合一修改,
依內建的程式碼為主,加上setup宣告pin2和pin4,並將變數名稱_ABVAR_1_IR
修改為results.value,及ArduBlock的loop部分加入到程式中,變成如下↓
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode( 2 , OUTPUT); //設定
  pinMode( 4 , OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
//加入遙控編碼動作
    if (( (results.value) == ( 0x00FF30CFUL ) ))
  {
    digitalWrite(2 , HIGH);
    delay( 3000 );
    digitalWrite(2 , LOW);
  }
    if (( (results.value) == ( 0x00FF18E7UL ) ))
  {
    digitalWrite(4 , HIGH);
    delay( 1000 );
    digitalWrite(4 , LOW);
  }
    irrecv.resume(); //準備下一訊號
  }
}

上傳後打開監控視窗,按下預設的遙控器鈕,是否可正常操作,
遙控器太遠時會接收到錯誤的編碼,試試家中其他的遙控器吧,
可近一步透過繼電器來控制其他家電啟動,或製作壓按式的自動門試試,




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公分,
超音波模組除了用在倒車雷達警示外,也可用在智慧車,電子尺等等運用↓