كود البحث

كيفية قياس زاوية الميل باستخدام مستشعر الزاوية 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 على اللوحة.
  2. الإشارة: قم بتوصيل دبوس Vout (الدبوس الأوسط) بدبوس الإدخال التناظري A0 على اللوحة. هذا هو الدبوس الأساسي المستخدم لقراءة الزاوية. (في الفيديو عند 05:25)
  3. مخرجات الإنذار (اختياري): تحتوي الوحدة على مخرجين رقميين إضافيين، D1 وD2. إذا كنت ترغب في استخدام ميزات الإنذار، فقم بتوصيلهما بدبابيس A1 وA2 على اللوحة، على التوالي. (في الفيديو عند 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[] لتغيير النص المطبوع على الشاشة التسلسلية. على سبيل المثال، يمكنك تغيير "Angle" إلى "Robot Arm Position" لتناسب مشروعك بشكل أفضل. (في الفيديو عند 07:08)

عرض توضيحي مباشر للمشروع

SCA60C_arduino_showing_angle

في الفيديو، يتم عرض المستشعر عن طريق تحريكه عبر نطاق حركته بينما تعرض الشاشة التسلسلية الزاوية المقابلة. يوضح المقدم كيف يقرأ المستشعر صفر درجة عندما يكون مسطحًا، وكيف يمكنه قياس حتى 90 درجة في اتجاه واحد و-90 درجة في الاتجاه الآخر. (في الفيديو عند 08:05)

كما يسلط العرض الضوئي على ميزة التنبيه. من خلال ضبط مقاييس الجهد المدمجة، يمكن تكوين مخرجات D1 وD2 للتفعيل عندما يميل المستشعر بعيدًا عن موضع الصفر درجة. يقرأ الكود هذه المخرجات الرقمية ويعرض حالتها (عالية أو منخفضة) على الشاشة التسلسلية، والتي يمكن استخدامها لتفعيل إجراءات أخرى في مشروعك. (في الفيديو عند 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)