ค้นหาโค้ด

วิธีการวัดมุมเอียงโดยใช้เซนเซอร์วัดมุม SCA60C และดำเนินการตามค่ามุมที่วัดได้

วิธีการวัดมุมเอียงโดยใช้เซนเซอร์วัดมุม SCA60C และดำเนินการตามค่ามุมที่วัดได้

บทช่วยสอนนี้สำรวจเซ็นเซอร์วัดมุม SCA60C ซึ่งเป็นวิธีที่คุ้มค่าในการวัดความเอียงและการวางแนวในโปรเจกต์หุ่นยนต์และอิเล็กทรอนิกส์ของคุณ เซ็นเซอร์นี้ให้เอาต์พุตแรงดันไฟฟ้าแบบแอนะล็อกที่สอดคล้องกับมุมของมัน ซึ่ง Arduino สามารถอ่านและแปลงเป็นการวัดองศาที่แม่นยำระหว่าง 0 ถึง 180 องศา โปรเจกต์นี้เหมาะสำหรับการเพิ่มการรับรู้ตำแหน่งให้กับการใช้งานที่หลากหลาย

SCA60C-tilt-Sensor-1

ต่อไปนี้เป็นวิธีปฏิบัติจริงสองสามวิธีที่คุณสามารถใช้เซ็นเซอร์นี้ในงานสร้างของคุณเอง:

  • การควบคุมแขนหุ่นยนต์: ตรวจสอบตำแหน่งของแต่ละข้อต่อเพื่อให้แน่ใจว่าการเคลื่อนไหวแม่นยำและปลอดภัย
  • ระบบปรับระดับ: สร้างแพลตฟอร์มปรับระดับอัตโนมัติสำหรับกล้อง แผงโซลาร์เซลล์ หรืออุปกรณ์ที่ละเอียดอ่อนอื่นๆ
  • สัญญาณเตือนที่เปิดใช้งานการเคลื่อนไหว: ตรวจจับเมื่ออุปกรณ์หรือวัตถุถูกย้ายจากตำแหน่งที่ปรับเทียบเดิม
  • ศิลปะแบบโต้ตอบ: สร้างชิ้นงานที่เปลี่ยนพฤติกรรมหรือการแสดงผลตามการเอียงของมัน
  • การตอบสนองการวางแนว: ให้การตอบสนองด้วยภาพแบบเรียลไทม์บนหน้าจอสำหรับมุมเงยหรือมุมเอียงของอุปกรณ์
SCA60C_wiring-2

คำแนะนำนี้จะพาคุณผ่านการทำงานของเซ็นเซอร์ วิธีเชื่อมต่อกับ Arduino และวิธีใช้โค้ดที่ให้มาเพื่ออ่านและดำเนินการกับข้อมูลมุม

ฮาร์ดแวร์และส่วนประกอบ

เพื่อทำตามโปรเจกต์นี้ คุณจะต้องมีส่วนประกอบต่อไปนี้:

  • บอร์ด Arduino (Uno, Nano, Mega ฯลฯ)
  • โมดูลเซ็นเซอร์วัดมุม SCA60C
  • เบรดบอร์ดและสายจัมเปอร์
  • LED สองดวง (ไม่บังคับ สำหรับการสาธิตสัญญาณเตือน)
  • ตัวต้านทาน 220 โอห์มสองตัว (ไม่บังคับ สำหรับ LED)

เซ็นเซอร์ SCA60C เป็นโมดูลขนาดกะทัดรัดที่ส่งออกแรงดันไฟฟ้าตามสัดส่วนกับมุมเอียงของมัน ดังที่แสดงในวิดีโอ โมดูลนี้ยังรวมถึงออปแอมป์บนบอร์ด (LM393) และโพเทนชิโอมิเตอร์สองตัวที่สามารถใช้ตั้งค่าเกณฑ์สัญญาณเตือน ขับเอาต์พุตดิจิทัล D1 และ D2 (ในวิดีโอที่ 03:20)

คำแนะนำการเชื่อมต่อ

S02-11-Angle_Sensor_SCA60C_wiring

การเชื่อมต่อเซ็นเซอร์ SCA60C เป็นเรื่องง่าย โปรดดูแผนภาพด้านล่างสำหรับคำแนะนำด้วยภาพ

นี่คือขั้นตอนการเชื่อมต่อทีละขั้นตอน:

  1. แหล่งจ่ายไฟ: เชื่อมต่อพิน VCC บนเซ็นเซอร์เข้ากับพิน 5V บน Arduino ของคุณ เชื่อมต่อพิน GND เข้ากับ GND ของ Arduino
  2. สัญญาณ: เชื่อมต่อพิน Vout (พินกลาง) เข้ากับพินอินพุตแอนะล็อก A0 ของ Arduino นี่คือพินหลักที่ใช้สำหรับอ่านมุม (ในวิดีโอที่ 05:25)
  3. เอาต์พุตสัญญาณเตือน (ไม่บังคับ): โมดูลมีเอาต์พุตดิจิทัลเพิ่มเติมสองตัวคือ D1 และ D2 หากคุณต้องการใช้คุณสมบัติสัญญาณเตือน ให้เชื่อมต่อสิ่งเหล่านี้เข้ากับพิน A1 และ A2 ของ Arduino ตามลำดับ (ในวิดีโอที่ 05:30)

หากคุณไม่ต้องการคุณสมบัติสัญญาณเตือน คุณสามารถปล่อยพิน D1 และ D2 ไม่เชื่อมต่อได้ ซึ่งจะทำให้พินแอนะล็อก A1 และ A2 ว่างสำหรับเซ็นเซอร์อื่นๆ (ในวิดีโอที่ 12:00)

คำอธิบายโค้ด

โค้ดที่ให้มาถูกออกแบบมาเพื่ออ่านแรงดันไฟฟ้าแอนะล็อกจากเซ็นเซอร์และแปลงเป็นมุมเป็นองศา ส่วนที่สำคัญที่สุดของโค้ดที่คุณควรแก้ไขคือตัวแปรการกำหนดค่าที่ด้านบนของสเก็ตช์

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

นี่คือรายละเอียดของตัวแปรที่กำหนดค่าได้แต่ละตัว:

  • anglePin: ตัวแปรนี้กำหนดพินแอนะล็อกบน Arduino ที่เชื่อมต่อกับพิน Vout ของเซ็นเซอร์ คุณสามารถเปลี่ยนได้หากจำเป็นต้องใช้พินแอนะล็อกอื่น
  • angleCompensate: นี่คือตัวแปรสำคัญสำหรับการปรับเทียบ เซ็นเซอร์ส่งออก 0 องศาเมื่อวางราบสนิท หากการใช้งานของคุณต้องการให้เซ็นเซอร์ติดตั้งในมุมเอียง คุณสามารถเพิ่มค่าชดเชยองศาที่นี่ได้ ตัวอย่างเช่น การตั้งค่านี้เป็น 20 จะทำให้เซ็นเซอร์อ่านค่า 0 องศาเมื่อเอียงทางกายภาพที่ 20 องศา (ในวิดีโอที่ 06:24)
  • d1Pin และ d2Pin: ตัวแปรเหล่านี้กำหนดพินแอนะล็อกที่ใช้ในการอ่านสถานะของเอาต์พุตสัญญาณเตือนของเซ็นเซอร์ หากคุณไม่ได้ใช้คุณสมบัติสัญญาณเตือน คุณสามารถละเว้นสิ่งเหล่านี้ได้
  • d1Delay และ d2Delay: ตัวแปรเหล่านี้แนะนำความล่าช้าเป็นมิลลิวินาทีหลังจากสัญญาณเตือนถูกกระตุ้น ซึ่งมีประโยชน์สำหรับการดีบาวซ์หรือเพื่อให้แน่ใจว่าเงื่อนไขสัญญาณเตือนคงอยู่เป็นระยะเวลาขั้นต่ำ (ในวิดีโอที่ 06:48)

คุณยังสามารถแก้ไขอาร์เรย์ lables[] เพื่อเปลี่ยนข้อความที่พิมพ์บน Serial Monitor ได้ ตัวอย่างเช่น คุณสามารถเปลี่ยน "Angle" เป็น "Robot Arm Position" เพื่อให้เหมาะกับโปรเจกต์ของคุณมากขึ้น (ในวิดีโอที่ 07:08)

การสาธิตโปรเจกต์สด

SCA60C_arduino_showing_angle

ในวิดีโอ เซนเซอร์ถูกสาธิตโดยการเคลื่อนย้ายผ่านช่วงการเคลื่อนที่ของมัน ขณะที่ Serial Monitor แสดงมุมที่สอดคล้องกัน ผู้นำเสนอแสดงให้เห็นว่าเซนเซอร์อ่านค่าได้ศูนย์องศาเมื่อวางราบ และสามารถวัดได้ถึง 90 องศาในทิศทางหนึ่ง และ -90 องศาในอีกทิศทางหนึ่ง (ในวิดีโอที่ 08:05)

การสาธิตยังเน้นฟีเจอร์สัญญาณเตือนด้วย โดยการปรับโพเทนชิโอมิเตอร์บนบอร์ด เอาต์พุต D1 และ D2 สามารถตั้งค่าให้ทำงานเมื่อเซนเซอร์เอียงออกจากตำแหน่งศูนย์องศา โค้ดจะอ่านเอาต์พุตดิจิทัลเหล่านี้และแสดงสถานะ (HIGH หรือ LOW) บน Serial Monitor ซึ่งสามารถใช้เพื่อกระตุ้นการทำงานอื่น ๆ ในโปรเจกต์ของคุณได้ (ในวิดีโอที่ 10:29)

SCA60C-tilt-Sensor--2-dimensions

บทต่างๆ

  • [00:00] แนะนำเซนเซอร์วัดมุม SCA60C
  • [00:52] การประยุกต์ใช้งานและกรณีการใช้งานสำหรับการวัดมุม
  • [02:19] ทำความเข้าใจโมดูล SCA60C และส่วนประกอบต่างๆ
  • [04:56] คู่มือการเดินสายไฟสำหรับเซนเซอร์ SCA60C
  • [06:09] คำอธิบายโค้ดและตัวแปรการตั้งค่า
  • [08:05] การสาธิตสดของการวัดมุมและการปรับเทียบ
  • [10:29] การสาธิตฟีเจอร์สัญญาณเตือน D1 และ D2
  • [13:17] บทสรุป

ภาพ

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
ภาษา: 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

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ยังไม่มีทรัพยากรเลย

ไฟล์📁

แผ่นข้อมูล (pdf)