قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 30-11-2019, 09:33 PM المشاركة 33   
افتراضي



ربط الثرمستور Thermistor مع الاردوينو لقياس وعرض درجة الحرارة على شاشة LCD
استخدام الثرمستور هو وسيلة سهلة ورخيصة لاستشعار درجة الحرارة. ولقياس درجة الحرارة بدقة باستخدام الثرمستور ، ستكون هناك حاجة إلى متحكم دقيق (ميكروكونترولر) . لذلك نحن هنا نستخدم Arduino مع Thermistor لقراءة درجة الحرارة وشاشة LCD لعرض درجة الحرارة. إنه مفيد في العديد من المشروعات مثل محطة الطقس عن بعد والأتمتة المنزلية وحماية المعدات الصناعية والإلكترونية والتحكم فيها.
في هذا التدريب ، سنقوم بربط Thermistor مع Arduino وعرض درجة الحرارة على شاشة الكريستال السائل.

الدائرة الكهربية :



يوفر الثرمستور قيمة درجة الحرارة حسب التغير في المقاومة الكهربائية له . في هذه الدائرة ، يتم توصيل طرف تناظرى في Arduino مع الثرمستور ويمكن أن يوفر قيم التحويل ADC فقط ، لذلك لا يتم حساب المقاومة الكهربائية للثرمستور مباشرة. لذا فإن الدائرة مصممة لتكون مثل دائرة مقسم الجهد كما هو مبين في الشكل أعلاه ، من خلال ربط مقاومة معلومة بقيمة 10 كيلو أوم على التوالى مع ثرمستور بمعامل درجة حرارة سالب (تقل المقاومة بارتفاع درجة الحرارة) NTC. باستخدام مقسم الجهد هذا ، يمكننا الحصول على الجهد عبر الثرمستور وبهذا الجهد يمكننا استخلاص مقاومة الثرمستور في تلك اللحظة. وأخيراً يمكننا الحصول على قيمة درجة الحرارة من خلال وضع مقاومة الثرمستور في معادلة شتاين هارت Stein-Hart كما هو موضح أدناه.

الثرمستور Thermistor :
المكون الرئيسي في هذه الدائرة هو الثرمستور ، والذي يتم استخدامه للكشف عن ارتفاع درجة الحرارة. الثرمستور هو مقاومة حساسة لدرجة الحرارة ، تتغير مقاومته وفقًا لدرجة الحرارة. هناك نوعان من الثرمستور NTC (معامل درجة حرارة سالب) و PTC (معامل درجة حرارة موجب ) ، نحن نستخدم الثرمستور نوع NTC. الثرمستور NTC هو مقاومة تنخفض مقاومتها مع ارتفاع درجة الحرارة بينما PTC فهو مقاومة تزيد مقاومتها مع ارتفاع في درجة الحرارة.



حساب درجة الحرارة باستخدام الثرمستور :
نحن نعلم أنه من دائرة مقسم الجهد :





كود:
Vout=Vin* R/(R+Rt)
Vin/Vout =(R+Rt)/R=1+(Rt/R) 
(Vin/Vout)-1 = Rt/R

لذلك تكون قيمة Rt :

كود:
Rt = R((Vin/Vout)-1)

حيث Rt هى مقاومة الثرمستور وR هى المقاومة المعلومة 10k .
تستخدم هذه المعادلة لحساب مقاومة الثرمستور من نتيجة قيمة التحويل ADC (ولتكن Vo) . جهد خرج مقسم الجهد هو جهد الدخل التناظرى للاردوينو ومن ثم يكون :

كود:
Vout = ADC Reading * (5/1024)  = Vo * (5/1024)

ويكون :

كود:
Vin/Vout = 5/( Vo * (5/1024) = 1024/ Vo
كود:
Rt = R((Vin/Vout)-1)= R((1024/Vo)-1)

حساب درجة الحرارة من مقاومة الثرمستور :
رياضيا لا يمكن حساب مقاومة الثرمستور إلا بمساعدة معادلة شتاين هارت التى تعطى درجات الحرارة T بوحدات الكلفن Kelvin .

كود:
T = 1 / (A + Bln(Rt) + Cln (Rt)^3 )

حيث ، A ، B و C ثوابت ، Rt هي مقاومة الثرمستور و ln تمثل اللوغاريتم log .القيم الثابتة للثرمستور المستخدم في المشروع هي A = 1.009249522 × 10−3 ، B = 2.378405444 × 10−4 ، C = 2.019202697 × 10−7.

البرنامج :
لتنفيذ عملية حسابية ، نستخدم (نضم) ملف الرأس “#include <math.h>” وبالطبع ملف الرأس لوحدة LCD وهو “#include <LiquidCrystal.h>" .

كود:
#include <math.h>
#include "LiquidCrystal.h"

LiquidCrystal lcd(12,11,5,4,3,2);

float A = 1.009249522e-03, B = 2.378405444e-04, C = 2.019202697e-07;
float T,logRt,Tf,Tc;
int Vo;

void setup(){
 lcd.begin(16,2);
 lcd.clear();
}

void loop() 
{
 lcd.setCursor(0,0);
  lcd.print("Temp:");

Vo=analogRead(A0);
logRt = log(10000.0*((1024.0/Vo-1))); 
 T = (1.0 / (A + B*logRt + C*logRt*logRt*logRt));  // We get the temperature value in Kelvin from this Stein-Hart equation
 Tc = T - 273.15;                     // Convert Kelvin to Celcius
 Tf = (Tc * 1.8) + 32.0;              // Convert Kelvin to Fahrenheit

  lcd.print((T));
  lcd.print("k ");
 
 lcd.setCursor(0,1);
  lcd.print((Tc));
  lcd.print(" C ;");
 lcd.setCursor(9,1);
  lcd.print((Tf));
  lcd.print(" F");
 delay(800);
}

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 30-11-2019, 09:37 PM المشاركة 34   
افتراضي


تطبيق : التحكم فى الأجهزة المنزلية بناء على درجة الحرارة باستخدام اردوينو والثرمستور
لنفترض أنك تجلس في غرفة وتشعر بالبرد وتريد تشغيل السخان (الدفاية) heater تلقائيًا ، ثم إيقاف تشغيله بعد مرور بعض الوقت عندما ترتفع درجة حرارة الغرفة ، يساعدك هذا المشروع على التحكم في أجهزتك المنزلية تلقائيًا وفقًا لدرجة الحرارة. هنا استخدمنا الثرمستور لقراءة درجة الحرارة.
في هذا التدريب ، سنقوم بتوصيل جهاز منزلى مع ريلاى ونقوم بعمل نظام أتمتة منزلي للتحكم في درجة الحرارة باستخدام Arduino. كما يتم عرض درجة الحرارة وحالة الجهاز على شاشة LCD 16 * 2 المتصلة بالدائرة.

الدائرة الكهربية :





البرنامج :


كود:
#include <math.h>
#include "LiquidCrystal.h"
#define RELAY 8   
LiquidCrystal lcd(12,11,5,4,3,2);
float A = 1.009249522e-03, B = 2.378405444e-04, C = 2.019202697e-07;
float T,logRt,Tc;
int Vo;

void setup() {
 lcd.begin(16,2);
 lcd.clear();
pinMode(RELAY, OUTPUT); 
}

void loop() {
  lcd.setCursor(0,0);
  lcd.print("Temperature:");

Vo=analogRead(A0);
logRt = log(10000.0*((1024.0/Vo-1))); 
 T = (1.0 / (A + B*logRt + C*logRt*logRt*logRt));  // We get the temperature value in Kelvin from this Stein-Hart equation
 Tc = T - 273.15;                 // Convert Kelvin to Celcius

  lcd.print(int(Tc));
  lcd.print("C ");
  delay(500);  // wait 0.5 seconds before sampling temperature again

if (Tc < 28) 
{
digitalWrite(RELAY, HIGH);
lcd.setCursor(0,1);
lcd.print("Heater status:ON ");
delay(500);
}

else if (Tc > 28) 
{
digitalWrite(RELAY, LOW);
lcd.setCursor(0,1);
lcd.print("Heater status:OFF");
delay(500);
}   
         
}

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-12-2019, 03:10 PM المشاركة 35   
افتراضي ماهية تعديل عرض النبضة What is PWM: Pulse Width Modulation


ماهية تعديل عرض النبضة What is PWM: Pulse Width Modulation

العواكس(الإنفرتر) Inverters ، والمحولات (كونفرتر) Converters ، ودوائر مصادر القدرة بنظام التقطيع SMPS ، والمتحكمات في السرعة Speed controllers ، وغيرها .... شيء واحد مشترك في كل هذه الدوائر هو أنها تتكون من العديد من المفاتيح الإلكترونية بداخلها. هذه المفاتيح ليست إلا أجهزة قدرة إلكترونية مثل MOSFET و IGBT و TRIAC إلخ. من أجل التحكم في مفاتيح القدرة الإلكترونية هذه ، نستخدم عادةً ما يسمى إشارات PWM (تعديل عرض النبضة). بصرف النظر عن هذا ، تُستخدم إشارات PWM أيضًا في قيادة محركات السرفو وأيضًا للقيام بمهام بسيطة أخرى مثل التحكم في سطوع ليد LED.
في دروسنا السابقة تعرفنا على المحول من تناظرى لرقمى ADC ، ففي حين يستخدم ADC لقراءة الإشارات التناظرية عن طريق جهاز رقمي مثل الميكروكونترولر ، يمكن اعتبار تعديل عرض النبضة PWM على عكس ذلك تمامًا ، حيث يتم استخدام PWM لإنتاج إشارات تناظرية من جهاز رقمي مثل الميكروكونترولر . في هذا الدرس سوف نتعرف على ما هية تعديل عرض النبضة وعن إشارات PWM وبعض البارامترات المرتبطة بها ، حتى نكون واثقين في استخدامها في تصميماتنا.
ما هو تعديل عرض النبضة ؟ What is PWM (Pulse Width Modulation)?
كلمة PWM تعنى "تعديل عرض النبضة" Pulse Width Modulation ؛ سوف نعرف سبب هذه التسمية لاحقًا. لكن ، الآن لنفهم PWM كنوع من الإشارات التي يمكن أن تنتج من الدوائر المتكاملة الرقمية مثل الميكروكونترولر أو المؤقت 555 . الإشارة الناتجة مكونة من قطار من النبضات وهذه النبضات ستكون في شكل موجة مربعة. وهذا يعنى ، أنه في أي لحظة معينة من الوقت الموجة ستكون إما مرتفعة HIGH أو ستكون منخفضة LOW . لسهولة الفهم ، دعونا نعتبر إشارة 5V PWM ، في هذه الحالة ستكون إشارة PWM إما 5V (high) أو عند مستوى الأرض 0V (low) . تسمى المدة duration التي تظل فيها الإشارات مرتفعة "زمن التشغيل" “on time” وتسمى المدة التي تظل فيها الإشارة منخفضة بأنها "زمن الإيقاف " “off time” .



بالنسبة لإشارة PWM ، نحتاج إلى إلقاء نظرة على بارامترين مهمين مرتبطين بها ، الأول هو " دورة عمل PWM " PWM duty cycle والآخر هو " تردد PWM " PWM frequency .

دورة تشغيل (عمل - خدمة) تعديل عرض النبضة Duty cycle of the PWM
كما ذكرنا سابقًا ، تظل إشارة PWM قيد التشغيل ON لفترة زمنية معينة ، ثم تبقى قيد الإيقاف OFF لبقية الدورة أو الفترة (الزمن الدورى) period . وهو ما يجعل إشارة PWM هذه خاصة والأكثر فائدة هو أنه يمكننا تعيين (ضبط) المدة التي يجب أن تبقى عليها ON من خلال التحكم في دورة العمل لإشارة PWM.
تسمى النسبة المئوية للوقت الذي تبقى فيه إشارة PWM مرتفعة (زمن التشغيل ) HIGH (on time) بدورة العمل duty cycle . إذا كانت الإشارة في وضع التشغيل ON دائمًا ، فهي بدورة عمل بنسبة 100% وإذا كانت في وضع إيقاف التشغيل OFF دائمًا ، فهى بدورة عمل بنسبة 0% . صيغة حساب دورة العمل duty cycle موضحة أدناه.

كود:
Duty Cycle =Turn ON time/ (Turn ON time + Turn OFF time)

الشكل التالى يمثل إشارة PWM بدورة عمل 50% . كما ترى ، الزمن الكلى للفترة period هو زمن التشغيل وزمن الإيقاف (on time + off time) ، وأن إشارة PWM تظل فى حالة عمل ON لمدة 50% فقط من الفترة الزمنية period .



من خلال التحكم في دورة التشغيل Duty cycle من 0% إلى 100% ، يمكننا التحكم في "زمن التشغيل " “on time” لإشارة PWM وبالتالي عرض الإشارة.زمن التشغيل on time يسمى "عرض النبضة" pulse width ، ونظرًا لأنه يمكننا تغيير أو تعديل modulate عرض النبضة ، من هنا جاء الاسم المميز "تعديل عرض النبضة" “Pulse width Modulation” .

تردد PWM Frequency of a PWM :
يحدد تردد إشارة PWM مدى سرعة إكمال PWM لفترة واحدة. الفترة الواحدة هي زمن التشغيل ON وزمن الإيقاف OFF بالكامل لإشارة PWM كما هو موضح في الشكل أعلاه. صيغة حساب التردد أدناه :

كود:
Frequency = 1/Time Period
Time Period = On time + Off time

عادة ما تكون إشارات PWM الناتجة عن متحكم دقيق حوالي 500 هرتز ، وسيتم استخدام هذه الترددات العالية في أجهزة التبديل عالية السرعة مثل inverters أو converters . ولكن ليست كل التطبيقات تتطلب تردد عالي. على سبيل المثال ، للتحكم في محرك سيرفو ، نحتاج إلى إنتاج إشارات PWM بتردد 50 هرتز ، لذلك يمكن أيضًا التحكم في تردد إشارة PWM عن طريق البرنامج لجميع الميكروكنترولر.

بعض الأسئلة الشائعة حول PWM
ما هو الفرق بين دورة العمل Duty cycle وتردد Frequency إشارة PWM؟

غالبًا ما يتم الخلط بين دورة العمل وتردد إشارات PWM. كما نعلم ، فإن إشارة PWM هي عبارة عن موجة مربعة بزمن تشغيل ON وزمن توقف OFF محددين . يسمى مجموع هذان الزمنين بزمن الفترة الواحدة T (الزمن الدورى) time period . يسمى "معكوس زمن الفترة الواحدة (الزمن الدورى) بالتردد frequency . في حين أن مقدار الزمن الذي يجب أن تبقى فيه إشارة PWM فى حالة تشغيل ON في فترة زمنية واحدة بدورة العمل في PWM.
لتبسيط الأمر ، يتم تحديد مدى سرعة تشغيل إشارة PWM وإيقافها وفقًا لتردد إشارة PWM ، وفى هذه السرعة يتم تحديد مدة تشغيل إشارة PWM قيد التشغيل ON بواسطة دورة العمل لإشارة PWM.

كيفية تحويل إشارات PWM إلى جهد تناظرى ؟
بالنسبة للتطبيقات البسيطة مثل التحكم في سرعة محرك التيار المستمر أو ضبط سطوع ليد LED ، نحتاج إلى تحويل إشارات PWM إلى جهد تناظري. يمكن القيام بذلك بسهولة باستخدام مرشح RC ويستخدم بشكل شائع عندما تكون ميزة التحويل من رقمى إلى تناظرى DAC مطلوبة كما هو مبين فى الدائرة أدناه




في الرسم البياني الموضح أعلاه ، الإشارة الملونة الصفراء هي إشارة PWM وإشارة اللون الأزرق هي الجهد التناظرى الناتج . يمكن حساب قيمة المقاوم R1 والمكثف C1 بناءً على تردد إشارة PWM ولكن عادةً ما يتم استخدام المقاومة 5.7K أو 10K ويتم استخدام مكثف 0.1u أو 1u .

كيفية حساب الجهد الناتج من إشارة PWM؟
سيكون الجهد الناتج لإشارة PWM بعد تحويلها إلى تناظرى كالنسبة المئوية لدورة التشغيل. على سبيل المثال ، إذا كان جهد التشغيل 5V ، فستتوفر إشارة PWM أيضًا بالجهد 5V عندما تكون مرتفعة. في مثل هذه الحالة لدورة عمل 100% ، فإن الجهد الناتج سيكون 5V ولدورة عمل 50% سيكون 2.5V .

كود:
Output Voltage = Duty cycle (%) * 5


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-12-2019, 03:17 PM المشاركة 36   
افتراضي


الاردوينو وتعديل عرض النبضة Arduino and PWM
تحتوي بيئة التطوير المتكاملة Arduino IDE ضمنيا على الدالة “analogWrite()” يمكن استخدامها لتوليد إشارة PWM. سيكون تردد هذه الإشارة المولدة لمعظم الأطراف حوالي 490 هرتز ويمكننا إعطاء القيمة من 0-255 باستخدام هذه الدالة حيث :

كود:
analogWrite(0)
تعني إشارة بدورة تشغيل 0% .
كود:
analogWrite(127)
تعني إشارة بدورة تشغيل 50% .
كود:
analogWrite(255)
تعني إشارة بدورة تشغيل 100% .

في Arduino Uno ، تكون أطراف PWM هي 3 و 5 و 6 و 9 و 10 و 11. ويكون تردد إشارة PWM على الأطراف 5 و 6 حوالي 980 هرتز وعلى الأطراف الأخرى سيكون 490 هرتز. أطراف PWM هي التي تحمل علامة ~.

الدالة analogWrite() :
الوصف :

تقوم بتوليد (تكتب - تنتج) قيمة تناظرية (موجة PWM) على طرف pin . يمكن استخدامها لإضاءة ليد LED بدرجات سطوع مختلفة أو قيادة محرك بسرعات مختلفة. بعد إستدعاء الدالة analogWrite() ، سيولد الطرف إشارة مستطيلة ثابتة بدورة العمل المحددة حتى الدعوة التالية للدالة analogWrite().
فى الاردوينو أونو أطراف PWM هى 3, 5, 6, 9, 10, 11 وتردد PWM هو 490 Hz ( التردد للأطراف 5,6 يكون 980 Hz ) .
لا تحتاج إلى إستدعاء الدالة pinMode() لتعيين الطرف كمخرج قبل استدعاء الدالة analogWrite() . لا علاقة للدالة analogWrite() بالأطراف التناظرية أو بالدالة analogRead .

الصيغة :
كود:
analogWrite(pin, value)
البارامترات :
البارامتر pin : طرف الاردوينو المطلوب الكتابة إليه . نوع البيانات المسموح بها int .
البارامتر value : دورة العمل duty cycle : بين 0 (always off) و255 (always on) . نوع البيانات المسموح بها int .
العائد :
لاشىء .




الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-12-2019, 03:24 PM المشاركة 37   
افتراضي


التحكم فى الإضاءة بتعديل عرض النبضة Controlling Light with PWM
لقد تعرفت بالفعل على ما يكفي لبناء ليد تفاعلي (فى مثال وميض ليد) ، ولكن النتيجة حتى الآن مملة بعض الشيء ، لأن الضوء يعمل on أو لا يعمل off فقط. المصباح التفاعلي المتميز يحتاج إلى أن يكون قابل لإعتام الضوء dimmable . لحل هذه المشكلة ، يمكننا استخدام خدعة صغيرة تجعل الكثير من الأشياء ممكنة ، مثل التلفزيون أو السينما. وتسمى هذه الخدعة استمرار الرؤية Persistence of Vision ، أو POV .

كما أوضحنا سابقا ، إذا قمت بتقليل الأرقام في دالة التأخير حتى لا ترى وميض الليد ، فستلاحظ أن الليد يبدو أكثر قتامة (إعتام) من سطوعه العادي . إذا جربت هذا ، فستلاحظ أنه إذا جعلت تأخير التشغيل on مختلفًا عن تأخير الإيقاف off ، فيمكنك جعل الليد أكثر إشراقًا من خلال تركه on لفترة أطول ، ويمكنك جعله أكثر إعتاما بتركه off لفترة أطول. هذه التقنية تسمى تعديل عرض النبضة pulse-width modulation ، أو PWM ، لأنك تقوم بتغيير سطوع الليد من خلال تعديل (أو تغيير) عرض النبضة. يوضح الشكل أدناه كيف يعمل هذا. هذا يعمل لأن أعيننا لا تستطيع رؤية صور مميزة (مختلفة) إذا تغيرت بسرعة كبيرة.




تعمل هذه التقنية مع بعض الأجهزة بخلاف الليد . على سبيل المثال ، يمكنك تغيير سرعة المحرك بنفس الطريقة.
في هذه الحالة ، ليست أعيننا هي التي تسمح بحدوث ذلك ، بل المحرك نفسه ، لأنه لا يمكن أن يبدأ أو يتوقف عن الدوران على الفور.
يستغرق التسريع والإبطاء وقتًا صغيرًا. إذا قمنا بتغيير الإخراج (باستخدام الدالة digitalWrite() ) بشكل أسرع من استجابة المحرك ، فسينتهي الأمر بالدوران بسرعة متوسطة ، اعتمادًا على مقدار الوقت الذي يتم فيه تشغيله on ، وكم من الوقت تم إيقاف تشغيله off .
على الرغم من أن هذه الخدعة (الحيلة) مفيدة جدًا ، إلا أنك ربما شعرت أن التحكم في سطوع الليد عن طريق الوقت الضائع فى التأخير في الكود غير مريح إلى حد ما. والأسوأ من ذلك ، بمجرد رغبتك في قراءة مستشعر ، أو إرسال بيانات على المنفذ التسلسلي ، أو القيام بأي شيء آخر ، سيتغير سطوع الليد ، لأن أي سطور إضافية من التعليمات البرمجية التي تضيفها ستستغرق وقتًا للتنفيذ ، مما يؤدي إلى تغيير مقدار الوقت الذي يتم فيه تشغيل الليد on أو إيقاف تشغيل الليد off .
لحسن الحظ ، فإن المتحكم الدقيق (الميكروكونترولر) المستخدم من قبل Arduino يحتوي على قطعة من الأجهزة hardware التي يمكنها وميض الليدات بكفاءة عالية بينما البرنامج يقوم بشيء آخر. فى الأردوينو أونو Uno ، يتم تطبيق هذا الجهاز على الأطراف 3 و 5 و 6 و 9 و 10 و 11 ، وعلى Leonardo ، على الأطراف 3 و 5 و 6 و 9 و 10 و 11 و 13. التعليمة (الدالة) analogWrite() تستخدم للسيطرة على هذا الجهاز hardware .
على سبيل المثال ، ستؤدي كتابة analogWrite(9,50) إلى ضبط سطوع الليد المتصل بالطرف 9 إلى درجة باهتة (معتمة) تمامًا ، بينما تؤدي كتابة analogWrite(9,200) إلى ضبط سطوع الليد على السطوع التام.
تأخذ analogWrite() عددا يتراوح بين 0 و 255 ، حيث 255 يعني السطوع الكامل و 0 تعني الإيقاف off.
وجود عدد من أطراف PWM مفيد جدا. على سبيل المثال ، إذا كان لديك ليدات باللون الأحمر والأخضر والأزرق ، فيمكنك مزج إضاءتها وعمل إضاءة بأي لون.

الدائرة الكهربية :



البرنامج :
تلاشى (خفض-تغيير شدة) إضاءة ليد للداخل والخارج ، كما هو الحال في كمبيوتر Apple أثناء وضع "السكون " sleeping .

كود:
const int LED = 9; // the pin for the LED
int i = 0; // We'll use this to count up and down
void setup() 
{
pinMode(LED, OUTPUT); // tell Arduino LED is an output
}

void loop()
{
for (i = 0; i < 255; i++) 
{ // loop from 0 to 254 (fade in)
analogWrite(LED, i); // set the LED brightness
delay(10); // Wait 10ms because analogWrite
// is instantaneous and we would  not see any change
}
for (i = 255; i > 0; i--) 
{ // loop from 255 to 1 (fade out)
analogWrite(LED, i); // set the LED brightness
delay(10); // Wait 10ms
}
}
ربما يكون استخدام اردوينو شيء بسيط للغاية ، لكن يمكنك تعلم الكثير من هذا المثال. لقد علمت أن الدالة analogWrite() تغير سطوع الليد .
الجزء المهم الآخر هو حلقة for: فهى تكرر الدالة analogWrite() والدالة delay() مرارًا وتكرارًا ، في كل مرة تستخدم قيمة مختلفة للمتغير i على النحو التالي.
تبدأ الحلقة الأولى المتغير i بقيمة 0 ، وتزيده إلى 255 ، مما يؤدي إلى زيادة إضاءة الليد تدريجيا إلى درجة السطوع الكامل.
الحلقة الثانية تبدأ المتغير i بقيمة 255 ، وتنقصه إلى 0 ، مما يؤدي إلى نقصان إضاءة الليد تدريجيا إلى الإعتام (الإيقاف) التام.
بعد حلقة for الثانية ، يبدأ Arduino الدالة loop() مرة أخرى.
الدالة delay() هى فقط لإبطاء الأمور قليلاً حتى تتمكن من رؤية السطوع المتغير ؛ خلاف ذلك ، سوف يحدث بسرعة كبيرة.


برنامج أخر :

كود:
/*
  Fading

  This example shows how to fade an LED using the analogWrite() function.

  The circuit:
  - LED attached from digital pin 9 to ground.

*/

int ledPin = 9;    // LED connected to digital pin 9

void setup() {
  // nothing happens in setup
}

void loop() {
  // fade in from min to max in increments of 5 points:
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);
    // wait for 30 milliseconds to see the dimming effect
    delay(30);
  }

  // fade out from max to min in increments of 5 points:
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);
    // wait for 30 milliseconds to see the dimming effect
    delay(30);
  }
}


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-12-2019, 03:28 PM المشاركة 38   
افتراضي


التحكم اليدوى فى شدة إضاءة الليد :
الدائرة الكهربية :



البرنامج :

كود:
int ledPin = 9;      // LED connected to digital pin 9
int analogPin = 3;   // potentiometer connected to analog pin 3
int val = 0;         // variable to store the read value

void setup() {
  pinMode(ledPin, OUTPUT);  // sets the pin as output
}

void loop() {
  val = analogRead(analogPin);  // read the input pin
  analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-12-2019, 03:32 PM المشاركة 39   
افتراضي


أردوينو وليد ديمر باستخدام PWM والتحكم عن طريق أزرار ضغط :
الغرض : الحصول على جهد متغير من جهد التشغيل الثابت 5V .
الدائرة الكهربية :




للحصول على خرج PWM على الطرف المناسب ، نحتاج العمل بالدالتين :

كود:
 pinMode(ledPin, OUTPUT);
analogWrite(pin, value);
فى البداية ، نحتاج إلى اختيار طرف إخراج PWM من ستة أطراف ، بعد ذلك نحتاج إلى تعيين هذا الطرف كخرج (ليس ضروريا) .
بعد ذلك ، نحتاج إلى تمكين ميزة PWM في الاردوينو أونو عن طريق استدعاء الدالة “analogWrite(pin, value)” . حيث يمثل الرقم "pin" رقم الطرف حيث نحتاج إلى إخراج PWM ( سوف تستخدم الطرف “3” ) . لذلك من هذا الطرف نحصل على خرج . القيمة value هي دورة التشغيل ON duty cycle ، بين 0 (OFF دائمًا) و 255 (ON دائمًا). نحن بصدد زيادة هذا العدد وخفضه عن طريق الضغط على زر.

البرنامج :

كود:
int i=0;//initializing a integer for incrementing and decrementing duty ratio.
void setup()
{
     pinMode(3, OUTPUT);   // sets the pin3 as output
     pinMode(0, INPUT);// sets the pin0 as input
     pinMode(1, INPUT);// sets the pin1 as input 
}
 
void loop()
{
     analogWrite(3, i);  // analogWrite values from 0 to 255
      if (digitalRead(0)==LOW)
      {
          if (i<255)
         {
           i++;//if pin0 is pressed and the duty ratio value is less than 255
           delay(30);
          }
       }  
               
      if (digitalRead(1)==LOW)
     {
        if (i>0)
        {
          i--;// if pin1 is pressed and the duty ratio value is greater than 0
          delay(30);
         }
    }
}


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-12-2019, 04:23 PM المشاركة 40   
افتراضي


مولد نغمة (بيانو)على أساس الاردوينو Arduino Based Tone Generator
الدائرة الكهربية :






البرنامج :

كود:
void setup()
{
   for (int i=0;i<8;i++)
   {
     pinMode(i, INPUT_PULLUP);//take pins0-7 as inputs with default high or pulled up pins.
   }
   pinMode(9,OUTPUT);//buzzer output at pin9
}
 
// the loop routine runs over and over again forever:
void loop()
{

  if (digitalRead(0)==LOW)
  {
     analogWrite(9,25);//if button 1 is pressed PWM of duty ratio(25*100)/255 is given to buzzer
     delay(100);
     analogWrite(9,0);
  }

 if (digitalRead(1)==LOW)
 {
   analogWrite(9,50); //if button 2 is pressed PWM of duty ratio(50*100)/255 is given to buzzer
 
     delay(100);
     analogWrite(9,0);
}
if (digitalRead(2)==LOW)
{
   analogWrite(9,75);// /if button 3 is pressed PWM of duty ratio(75*100)/255 is given to buzzer       delay(100);
   analogWrite(9,0);
 }
if (digitalRead(3)==LOW)
{
  analogWrite(9,100); //if button 4 is pressed PWM of duty ratio(100*100)/255 is given to buzzer
 delay(100);
 analogWrite(9,0);
 }
if (digitalRead(4)==LOW)
{
 analogWrite(9,125);
 delay(100);
 analogWrite(9,0);
}
if (digitalRead(5)==LOW)
{
  analogWrite(9,150);
  delay(100);
   analogWrite(9,0);
 }
if (digitalRead(6)==LOW)
{
 analogWrite(9,175);
 delay(100);
 analogWrite(9,0);
 }
 if (digitalRead(7)==LOW)
{
  analogWrite(9,200);
  delay(100);
  analogWrite(9,0);
 }
}



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:56 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)