顯示包含「arduino」標籤的文章。顯示所有文章
顯示包含「arduino」標籤的文章。顯示所有文章

2023年4月29日星期六

Arduino MPU6050 陀螺儀模組

最近要來做個小專題,其中一項功能就是陀螺儀,為甚麼需要陀螺儀呢?主要用來偵測物體的姿態或是加速度,很常應用在機器人或是平衡車上,今天簡單了解一下陀螺儀的基礎規格及特性。


使用軟體

  • Arduino IDE

實驗元件

  • MPU6050
  • Arduino nano
  • 杜邦線
  • 麵包板

簡單將依些需要知道MPU6050的特性整理如下

1. 電器規格
電源規格

2.晶片內部架構

3.主要量測數據
  • X軸、Y軸、Z軸加速度
  • X軸、Y軸、Z軸旋轉量
  • 溫度

=======================================================================

實驗開始

1.電路接線


2. 程式碼

這裡使用安裝現成的函式庫加速驗證
a.安裝函式庫

b.輸入MPU6050及安裝
輸入MPU6050,選擇2.2.4安裝

安裝完成

c.開啟範例程式,並燒錄測試
範例 --> Adafruit MPU6050 --> basic_reading

d.開啟序列埠監控視窗



e.確認量測數值有在跳動,代表MPU6050正常運作



2023年3月12日星期日

ESP32 PWM

ESP32 with PWM

    PWM 很常拿來控制馬達或是LED用,本篇文章單純紀錄如何透過Arduino IDE 開發使用ESP32的PWM。

目  標:

    使用Arduino IDE 控制ESP32 指定腳位輸出PWM

軟  體:

    Arduino IDE

硬  體:

    1. EP32

    2. USB TTL

    3. 杜邦線若干條

    4. 示波器 一台

說  明:

    跟平常使用的PWM 控制差不多,但是需要特別去注意以下幾點

    1. 需要特別去設定通道(只有0~16)

    2. 頻率

程式碼

#define PWM_CHANNEL_0     0    // use first channel of 16 channels (started from zero)
#define PWM_TIMER_12_BIT  12   // use 12 bit precission for LEDC timer
#define PWM_BASE_FREQ     5000 // use 5000 Hz as a LEDC base frequency
#define PWM_PIN            5  // fade LED PIN (replace with LED_BUILTIN constant for built-in LED)

int Value = 0;    // how bright the LED is
int Step = 5;    // how many points to fade the LED by

// Arduino like analogWrite
// value has to be between 0 and valueMax
void PWMAnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = 255) {
  // calculate duty, 4095 from 2 ^ 12 - 1
  uint32_t duty = (4095 / valueMax) * min(value, valueMax);
  ledcWrite(channel, duty);// write duty to PWM Pin
}

void setup() {
  // Setup timer and attach timer to a led pin
  ledcSetup(PWM_CHANNEL_0, PWM_BASE_FREQ, PWM_TIMER_12_BIT);
  ledcAttachPin(PWM_PIN, PWM_CHANNEL_0);
}

void loop() {

  PWMAnalogWrite(PWM_CHANNEL_0, Value);  // set the Value on channel 0
  Value = Value + Step;// add the Value  
  if (Value <= 0 || Value >= 255) {
    Step = -Step;
  }
  delay(50);
}
執行結果


影片中可以看到,PWM波型的輸出及變化,在示波器右側量測到的頻率也與設定的5kHz一致

參考資料



2023年2月28日星期二

Balance Bot 底盤規劃

Balance Bot <Part 1>底盤規劃

         趁著228連假將很久的Side Project 重新推動,延續之前的馬達驅動器DRV8833篇,將一些模組建立3D 圖檔,方便後續模擬組裝的樣子,順便規劃一下底板PCB。

建立模組的3D圖檔,真的佩服那些有耐心的人



接下來就是件PCB要用的元件了...



完整電路設計


3D 效果呈現一下看看




2023年1月14日星期六

ESP32 wrover 開發板開發環境

 上次這篇簡單介紹了設計的硬體,這次來說明一下開發環境的建立及測試

硬體材料

  1.電阻330歐姆+LED燈

  2.usb ttl模組

軟體

  arduino IDE,軟體連結

安裝步驟

1. 開啟偏好設定,加入參考連結

    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json



2. 選擇開發板→開發板管理員


3. 輸入ESP32選擇最新版本,並安裝

4. 安裝完成後重新啟動

電路接線

VCC →5V

Tx->ESP32 Rx

Rx->ESP32 Tx

GND->GND

D22->電阻->LED->GND


燒錄範例程式

1. 開發板管理員,選擇ESP32 Wrover Module


2. 開啟Blink 範例程式

3. 編譯如果編譯有問題,將程式碼中的buttonpin修改成22,會對應到板子上的D22

4. 重新編譯

5. 燒錄前需先按著BOOT Pin,再按下Reset Pin,並將兩個按鈕釋放

6. 按下上傳鈕,等待上傳完成

7. 完成後將開發板重新啟動即可

結果

LED 就會閃爍了~


參考資料

1. Arduino IDE 新增開發板方式

https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/

2. 

ESP32 wrover 開發板精簡版

工程師下班後的小快樂,自己設計的板子一次就可以動😁

小工具開發中


目的+設計想法
    很單純地想要想要利用開源平台及硬體作為往後的嵌入式學習平台,主要具有wifi 藍芽功能,以後的小專案也可以使用,尤其是IOT應用面上。

電路


PCB

設計完之後就是等待成品的時間啦~~~


總算等到了!

跟10元硬幣比大小

成品

參考資料
https://www.espressif.com/sites/default/files/documentation/esp32-wrover_datasheet_en.pdf

2022年10月12日星期三

DRV8833 馬達驅動模組

DRV8833 馬達驅動模組

    


    今天來介紹一下小面積的馬達驅動模組,雖然有些驅動力比不上L298N,但是在玩具馬達的使用上綽綽有餘了,話不多說Let's go!

    使用模組前,一定要看先規格書,這次的沒有通訊界面,我們只要看電壓與接線即可。

電源規格

  •     可以推動兩個 DC 馬達或一個步進馬達
  •     使用電壓DC 2.7V ~ DC 10.8V


手冊建議接線電路



本次實驗材料

  1. Arduino Nano
  2. 電解電容4.7uF
  3. 陶瓷電容0.1uF
  4. Drv8833 模組
  5. DC 減速馬達

實驗電路


程式碼

#define AIN1 3
#define AIN2 4
#define STBY 2
void setup() {
  pinMode(AIN1,OUTPUT);
  pinMode(AIN2,OUTPUT);
  pinMode(STBY,OUTPUT);
  digitalWrite(STBY, HIGH);
  delay(10);
}

void loop() {
  digitalWrite(AIN1, HIGH);
  digitalWrite(AIN2, LOW); ;
  delay(1000);
  digitalWrite(AIN1, LOW);
  digitalWrite(AIN2, HIGH); ;
  delay(1000);
}

 

實際結果


參考資料

DRV8833 晶片資料


2022年7月20日星期三

Arduino IDE as simple oscilloscope (Arduino IDE 簡易示波器)

 Arduino IDE as Simple Oscilloscope 

使用的語法

  • Serial.begin(115200);
  • Serial.println(變數名稱);
  • Serial.print(" ");

程式碼範例-單一變數

void setup() {
  Serial.begin(115200);
}

void loop() {
  for (int i = 0; i <= 250; i+=10)
  {
    Serial.println(i);
    delay(5);
  }
  for (int i = 250; i >= 0; i-=10)
  {
    Serial.println(i);
    delay(5);
  }
  for (int i = 0; i >= -250; i-=10)
  {
    Serial.println(i);
    delay(5);
  }
  for (int i = -250; i <= 0; i+=10)
  {
    Serial.println(i);
    delay(5);
  }
}
(顯示效果)


程式碼範例-多個變數

int Var1 = 0;
int Var2 = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  for (Var1 = 0,Var2 = 250; Var1 <= 250; Var1+=10)
  {
    Serial.print(Var1);
    Serial.print(" ");
    Serial.println(Var2);
    delay(5);
  }
  for (Var1 = 250,Var2 = 0; Var1 >= 0; Var1-=10)
  {
    Serial.print(Var1);
    Serial.print(" ");
    Serial.println(Var2);
    delay(5);
  }
  for (Var1 = 0,Var2 = -250; Var1 >= -250; Var1-=10)
  {
    Serial.print(Var1);
    Serial.print(" ");
    Serial.println(Var2);
    delay(5);
  }
  for (Var1 = -250,Var2 = 0; Var1 <= 0; Var1+=10)
  {
    Serial.print(Var1);
    Serial.print(" ");
    Serial.println(Var2);
    delay(5);
  }
}

(顯示效果)


應用方面

1.可以看ADC 的讀取資料
2.看計算的數值
3.資料處理
4. ...

參考資料

https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter

2022年5月21日星期六

Arduino 繼電器模組 Relay Module

Arduino 繼電器模組

        寫這篇文章,主要紀錄一下繼電器的特性及常見問題,也分享一下繼電器模組的規格辨識、如何使用及特性,與常見問題說明,並透過實驗一、實驗二、實驗三觀察繼電器的動作。

(本次實驗用的繼電器)
 (模組電路)

繼電器簡介

        繼電器的種類其實很多,在工業上的不同領域會有不同樣式的繼電器,主要根據自己需要的使用場合挑選合適的繼電器即可,但比較常見的就是上面藍色的那個。詳細請參見維基百科

軟體

Arduino IDE

程式碼

後面的實驗都會使用同一個程式碼,只修改時延遲的時間

#define RelayPin 4

void setup() {

  pinMode(RelayPin, OUTPUT); //設定GPIO

}

void loop() {

  digitalWrite(RelayPin, HIGH);//設定GPIO HIGH

  delay(10);//間隔時間

  digitalWrite(RelayPin, LOW);//設定GPIO LOW

  delay(10);//間隔時間

}

繼電器的規格怎麼看?

        每個繼電器的規格都不太一樣,但大同小異,此處以SRD-05VDC-SL-C說明,主要注意控制的電壓多少及開關側可承受的電壓電流為多少(這很重要!!!)


        可操作的承受電壓會依照規格的不同也有所不同,本次實驗用的是DC 5V 驅動的,此款繼電器是靠內部線圈產生磁力,使其吸引導電片進行開關的行為,所以勢必會有切換的反應時間。正確的控制時間也會影響繼電器的動作,下圖為繼電器的反應時間相關參數。


 










Operation Time 操作時間最大是10ms,但是實際上每個繼電器會有所不同

Release Time 釋放後繼電器的回復時間

Max. ON/OFF Swithing 最大的開關動作速度,機械結構是每分鐘300次.

實驗一

目標:
觀察Arduino NANO (5V)發送訊號後繼電器的反應時間,分別有開跟關。
材料:
  1. Arduino NANO
  2. 繼電器模組
  3. 杜邦線若干條
  4. 示波器一台+探棒x2
電路接線

 程式碼

#define RelayPin 4

void setup() {

  pinMode(RelayPin, OUTPUT); //設定GPIO

}

void loop() {

  digitalWrite(RelayPin, HIGH);//設定GPIO HIGH

  delay(500);//間隔時間

  digitalWrite(RelayPin, LOW);//設定GPIO LOW

  delay(500);//間隔時間

}

實驗結果 

1.使用NANO 發送HIGH電位訊號後,繼電器約5.76ms後才穩定,機電器動作過程中會有彈跳現象。

2.使用NANO 發送LOW電位訊號後,繼電器約4ms後才穩定。


實驗二

目標:
觀察ESP32(3.3V)發送訊號後繼電器的反應時間,分別有開跟關。
材料:
  1. ESP32 NodeMCU
  2. 繼電器模組
  3. 杜邦線若干條
  4. 示波器一台+探棒x2
電路接線說明

 程式碼

#define RelayPin 4

void setup() {

  pinMode(RelayPin, OUTPUT); //設定GPIO

}

void loop() {

  digitalWrite(RelayPin, HIGH);//設定GPIO HIGH

  delay(500);//間隔時間

  digitalWrite(RelayPin, LOW);//設定GPIO LOW

  delay(500);//間隔時間

}

實驗結果

1.使用ESP32發送HIGH電位訊號後,繼電器導通的時間會比較久,相較於使用arduino NANO (5V)


2.用ESP32發送LOW電位訊號後,會發現繼電器回復的速度很快 


實驗三

目標:
觀察Arduino NANO發送較快速開關訊號(超過規格),觀察繼電器的反應時間及狀態。
材料:
  1. Arduino NANO x1
  2. 繼電器模組x1
  3. 杜邦線若干條
  4. 示波器一台+探棒x2
電路接線說明

程式碼

#define RelayPin 4

void setup() {

  pinMode(RelayPin, OUTPUT); //設定GPIO

}

void loop() {

  digitalWrite(RelayPin, HIGH);//設定GPIO HIGH

  delay(5);//間隔時間

  digitalWrite(RelayPin, LOW);//設定GPIO LOW

  delay(5);//間隔時間

} 

 實驗結果

        高速開關繼電器,觀察繼電器動作狀況,會發現Arduino NANO訊號已經關閉,繼電器才剛打開的現象,及繼電器還沒關閉的現象。



使用繼電器模組時常見的問題

1. 未注意IO電位導致推不動(使用推動電壓低於規格)
2. 用杜邦線接觸不良
3. 開關幾次後就不會動了,有可能是負載過大導致內部導電片被電焊了
4. 繼電器可承受電壓,須符合欲控制項目的需求電壓
5.     如果開關繼電器會讓MCU 重啟,需替換成有帶光耦合隔離的及做電源隔離
6.     如果控制的負載會讓繼電器產生火花,記得加火花消除電路

資料來源


繼電器元件手冊
圖片來源
Goolge 搜尋

2022年4月13日星期三

水銀開關模組mercury switch

水銀開關模組mercury switch

水銀開關,又稱傾倒開關,常用來做傾倒偵測。



實驗材料

  1. arduino NANO+ NANO IO擴展板
  2. 水銀開關模組
  3. 杜邦線若干條



感測器原理
透明管內有兩根導體,內部有一滴水銀,當傾倒的角度讓水銀與兩個導體相碰時,便會發生短路。

感測器電路
此模組的電路如下,我們可以看到是低態觸發,當水銀讓導線短路時,會讓模組上的LED導通,因此我們在寫程式判斷觸發時,要判斷的是LOW。


接線說明

Arduino Nano

水銀開關模組

5V

R

GND

G

PIN8

Y



Arduino 程式碼

//水銀開關
//mercury switch
void setup() {
  pinMode(8,INPUT);//將PIN8設為讀取輸入訊號
  pinMode(13,OUTPUT);//Arduino板子LED燈腳位
}

void loop() {
  if(digitalRead(8)==LOW)//當讀到水銀開關觸發時
    digitalWrite(13,HIGH);//Arduino板子LED燈亮
  else
    digitalWrite(13,LOW);//Arduino板子LED燈滅
}

實驗結果
導通

未導通

可能發生的問題
  1. 水銀感測器破裂請遠離
  2. 杜邦線問題
備註:電路應用時要注意觸發位準


打賞按讚