Tìm kiếm mã

Cách Đo Góc Nghiêng Bằng Cảm Biến Góc SCA60C và Đưa Ra Hành Động Dựa Trên Góc Đó

Cách Đo Góc Nghiêng Bằng Cảm Biến Góc SCA60C và Đưa Ra Hành Động Dựa Trên Góc Đó

Hướng dẫn này khám phá cảm biến góc SCA60C, một giải pháp tiết kiệm chi phí để đo độ nghiêng và hướng trong các dự án robot và điện tử của bạn. Cảm biến cung cấp đầu ra điện áp analog tương ứng với góc của nó, mà Arduino có thể đọc và chuyển đổi thành phép đo độ chính xác từ 0 đến 180 độ. Dự án này hoàn hảo để thêm khả năng nhận biết vị trí cho nhiều ứng dụng khác nhau.

SCA60C-tilt-Sensor-1

Dưới đây là một số cách thực tế bạn có thể sử dụng cảm biến này trong các thiết kế của mình:

  • Điều khiển cánh tay robot: Theo dõi vị trí của từng khớp để đảm bảo chuyển động chính xác và an toàn.
  • Hệ thống cân bằng: Tạo một nền tảng tự cân bằng cho máy ảnh, tấm pin mặt trời hoặc các thiết bị nhạy cảm khác.
  • Báo động kích hoạt chuyển động: Phát hiện khi một thiết bị hoặc vật thể bị di chuyển khỏi vị trí ban đầu đã hiệu chuẩn.
  • Nghệ thuật tương tác: Xây dựng một tác phẩm thay đổi hành vi hoặc hiển thị dựa trên cách nó được nghiêng.
  • Phản hồi hướng: Cung cấp phản hồi trực quan theo thời gian thực trên màn hình cho độ nghiêng hoặc độ lắc của thiết bị.
SCA60C_wiring-2

Hướng dẫn này sẽ hướng dẫn bạn qua nguyên lý hoạt động của cảm biến, cách kết nối nó với Arduino và cách sử dụng mã được cung cấp để đọc và xử lý dữ liệu góc.

Phần cứng và Linh kiện

Để thực hiện theo dự án này, bạn sẽ cần các linh kiện sau:

  • Bo mạch Arduino (Uno, Nano, Mega, v.v.)
  • Mô-đun cảm biến góc SCA60C
  • Breadboard và dây jumper
  • Hai đèn LED (tùy chọn, để minh họa báo động)
  • Hai điện trở 220 ohm (tùy chọn, cho đèn LED)

Cảm biến SCA60C là một mô-đun nhỏ gọn xuất ra điện áp tỷ lệ với góc nghiêng của nó. Như được hiển thị trong video, mô-đun cũng bao gồm một op-amp trên bo mạch (LM393) và hai chiết áp có thể được sử dụng để đặt ngưỡng báo động, điều khiển các đầu ra kỹ thuật số D1 và D2. (trong video tại 03:20)

Hướng dẫn Kết nối

S02-11-Angle_Sensor_SCA60C_wiring

Việc kết nối cảm biến SCA60C rất đơn giản. Vui lòng tham khảo sơ đồ dưới đây để có hướng dẫn trực quan.

Dưới đây là quy trình kết nối từng bước:

  1. Nguồn: Kết nối chân VCC trên cảm biến với chân 5V trên Arduino của bạn. Kết nối chân GND với chân GND của Arduino.
  2. Tín hiệu: Kết nối chân Vout (chân giữa) với chân đầu vào analog A0 của Arduino. Đây là chân chính được sử dụng để đọc góc. (trong video tại 05:25)
  3. Đầu ra báo động (Tùy chọn): Mô-đun có hai đầu ra kỹ thuật số bổ sung, D1D2. Nếu bạn muốn sử dụng các tính năng báo động, hãy kết nối chúng với các chân A1A2 của Arduino tương ứng. (trong video tại 05:30)

Nếu bạn không cần các tính năng báo động, bạn có thể để các chân D1 và D2 không kết nối, giải phóng các chân analog A1 và A2 cho các cảm biến khác. (trong video tại 12:00)

Giải thích Mã

Mã được cung cấp được thiết kế để đọc điện áp analog từ cảm biến và chuyển đổi nó thành góc theo độ. Các phần quan trọng nhất của mã để bạn sửa đổi là các biến cấu hình ở đầu sketch.

const int anglePin =A0;
int angle =0;
const int angleCompensate =0;

const int d1Pin =A1;
int d1State =LOW;
int d1Delay =0;//watch 

const int d2Pin =A2;
int d2State =LOW;
int d2Delay =0;
SCA60C-tilt-Sensor-4

Dưới đây là phân tích chi tiết của từng biến có thể cấu hình:

  • anglePin: Biến này xác định chân analog trên Arduino được kết nối với chân Vout của cảm biến. Bạn có thể thay đổi điều này nếu cần sử dụng một chân analog khác.
  • angleCompensate: Đây là một biến quan trọng để hiệu chuẩn. Cảm biến xuất ra 0 độ khi nó hoàn toàn phẳng. Nếu ứng dụng của bạn yêu cầu cảm biến được gắn ở một góc, bạn có thể thêm một độ bù vào đây. Ví dụ, đặt giá trị này thành 20 sẽ làm cho cảm biến đọc 0 độ khi nó được nghiêng vật lý ở 20 độ. (trong video tại 06:24)
  • d1Pind2Pin: Các biến này xác định các chân analog được sử dụng để đọc trạng thái của các đầu ra báo động của cảm biến. Nếu bạn không sử dụng tính năng báo động, bạn có thể bỏ qua chúng.
  • d1Delayd2Delay: Các biến này giới thiệu một độ trễ tính bằng mili giây sau khi báo động được kích hoạt. Điều này có thể hữu ích để chống nhiễu hoặc để đảm bảo điều kiện báo động tồn tại trong một khoảng thời gian tối thiểu. (trong video tại 06:48)

Bạn cũng có thể sửa mảng lables[] để thay đổi văn bản in trên Serial Monitor. Ví dụ: bạn có thể đổi "Angle" thành "Robot Arm Position" để phù hợp hơn với dự án của mình. (trong video tại 07:08)

Trình diễn dự án trực tiếp

SCA60C_arduino_showing_angle

Trong video, cảm biến được trình diễn bằng cách di chuyển qua phạm vi hoạt động của nó trong khi màn hình nối tiếp hiển thị góc tương ứng. Người thuyết trình cho thấy cảm biến đọc giá trị 0 độ khi nằm ngang và có thể đo tới 90 độ theo một hướng và -90 độ theo hướng còn lại. (trong video tại 08:05)

Phần trình diễn cũng làm nổi bật tính năng báo động. Bằng cách điều chỉnh các chiết áp trên bo mạch, các đầu ra D1 và D2 có thể được cấu hình để kích hoạt khi cảm biến bị nghiêng khỏi vị trí 0 độ. Mã đọc các đầu ra kỹ thuật số này và hiển thị trạng thái của chúng (CAO hoặc THẤP) trên màn hình nối tiếp, có thể được sử dụng để kích hoạt các hành động khác trong dự án của bạn. (trong video tại 10:29)

SCA60C-tilt-Sensor--2-dimensions

Các chương

  • [00:00] Giới thiệu về cảm biến góc SCA60C
  • [00:52] Ứng dụng và trường hợp sử dụng cho cảm biến góc
  • [02:19] Tìm hiểu về mô-đun SCA60C và các thành phần của nó
  • [04:56] Hướng dẫn đấu dây cho cảm biến SCA60C
  • [06:09] Giải thích mã và các biến cấu hình
  • [08:05] Trình diễn trực tiếp về đo góc và hiệu chuẩn
  • [10:29] Trình diễn các tính năng báo động D1 và D2
  • [13:17] Kết luận

Hình ảnh

SCA60C-tilt-Sensor-3
SCA60C-tilt-Sensor-3
SCA60C-tilt-Sensor--2-dimensions
SCA60C-tilt-Sensor--2-dimensions
SCA60C-tilt-Sensor-1
SCA60C-tilt-Sensor-1
SCA60C-tilt-Sensor-4
SCA60C-tilt-Sensor-4
S02-11-Angle_Sensor_SCA60C_wiring
S02-11-Angle_Sensor_SCA60C_wiring
SCA60C_arduino_showing_angle
SCA60C_arduino_showing_angle
SCA60C_wiring-2
SCA60C_wiring-2
553-Lesson 18, Robojax Arduino Step-by-Step Course: Using Tilt Angle Sensor SCA60C1
Ngôn ngữ: C++
/*
 *  Robojax Arduino Step By Step Course
 * Tilt Angle Sensor SCA60C1 SCA60C N1000060
 * It displays the angle from 0 to 180 degrees.
 * 
  Please watch video instruction here https://youtu.be/hkhepVzWyWE
Download and resource page https://robojax.com/RJT874
Download and resource page https://robojax.com/RJT18


 

 * 
Written by Ahmad Shamshiri on Mar 17, 2020 at 20:20 
 
 * in Ajax, Ontario, Canada. www.robojax.com


If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

const int anglePin =A0;
int angle =0;
const int angleCompensate =0;

const int d1Pin =A1;
int d1State =LOW;
int d1Delay =0;//watch 

const int d2Pin =A2;
int d2State =LOW;
int d2Delay =0;

char *lables[]={"Angle","Alarm D1","Alarm D2"};

void setup()

{

  Serial.begin(9600);          //  setup serial
  Serial.println("Robojax SCA60C Angle Sensor");

}



void loop(){
  //Robojax Tilt Angle Sensor
  	//Robojax Arduino Step By Step Course http://robojax.com/L/?id=338
  getAngle();
  d1Alarm();
  d2Alarm();
  
  
  // print out the value you read:
  Serial.print(lables[0]);// 
  Serial.print(":");
  Serial.print(angle);
  Serial.println("\xC2\xB0");//degree symbol
//  Serial.print("\t");
//  Serial.print(lables[1]);
//  Serial.print(":");  
//  Serial.print(d1State);
//  Serial.print("\t");
//  Serial.print(lables[2]);
//  Serial.print(":");
//  Serial.println(d2State);  
//  Serial.println("======");
  delay(100);
//Robojax Tilt Angle Sensor
}

void getAngle()
{
 
   angle =map(analogRead(A0), 96, 927, -90, 90) + angleCompensate; 
 
}

/**************************************/
/*! 
    @brief  Get the state of the D1 alarm. HIGH if triggered.
    @param  no parameter
    @returns returns nothing
    Written by Ahmad Shamshiri on Mar 17, 2020 at 20:20 in Ajax, Ontario, Canada.
*/
/**************************************/
void d1Alarm()
{
  	//Robojax Arduino Step By Step Course http://robojax.com/L/?id=338
  //
  float vo = analogRead(d1Pin) * (5.0 / 1023.0);
  if(vo < 3.5)
  {
    d1State =HIGH;
    delay(d1Delay);    
  }else{
    d1State =LOW;    
  }

}//d1Alarm() end


/**************************************/
/*! 
    @brief  Get the state of the D1 alarm. HIGH if triggered.
    @param  no parameter
    @returns returns nothing
    Written by Ahmad Shamshiri on Mar 17, 2020 at 20:20 in Ajax, Ontario, Canada.
*/
/**************************************/
void d2Alarm()
{
  	//Robojax Arduino Step By Step Course http://robojax.com/L/?id=338
  //
  float vo = analogRead(d2Pin) * (5.0 / 1023.0);

  if(vo < 3.5)
  {
    d2State =HIGH;
    delay(d2Delay);    
  }else{
    d2State =LOW;    
  }  

}//d1Alarm() end

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Chưa có tài nguyên nào.

Tập tin📁

Bảng dữ liệu (pdf)