مشروع نظام سقي النبات الأوتوماتيكي - بالاردوينو الكود ، الدائرة وتقرير المشروع

مشروع نظام سقي النبات الأوتوماتيكي - بالاردوينو الكود ، الدائرة وتقرير المشروع 

الهدف من المشروع:

  في عصر التكنولوجيا المتقدمة والإلكترونيات ، ينبغي أن يكون أسلوب حياة الإنسان ذكيًا وبسيطًا وأسهل وأكثر راحة. لذلك ،هناك حاجة إلى العديد من الأنظمة الآلية في روتين الحياة اليومية للإنسان لتقليل أنشطته ووظائفه اليومية. هنا فكرة  نظام واحد مثل نظام سقي النبات التلقائي مفيد جدا. حيث يواجه الكثير من الناس الكثير من المشاكل في سقي نباتات  الحديقة ، خاصةً عندما يكونون بعيدًا عن المنزل. 

   يستخدم هذا الطراز تقنيات الاستشعار مع متحكم دقيق من أجل صنع جهاز تبديل ذكي لمساعدة ملايين الأشخاص.

   في أبسط أشكاله ، يتم برمجة النظام بطريقة تجعل مستشعر رطوبة التربة يستشعر مستوى الرطوبة من المصنع في حالة معينة من الزمن ، إذا كان مستوى الرطوبة في المستشعر أقل من القيمة المحددة للعتبة المحددة مسبقًا وفقًا يتم تزويد النبات المعين من الكمية المطلوبة من الماء إلى النبات حتى يصل مستوى الرطوبة إلى القيمة المحددة مسبقًا. يشتمل النظام على مستشعر للرطوبة ودرجة الحرارة يحافظ على تتبع الغلاف الجوي الحالي للنظام ويكون له تأثير عند حدوث الري. سوف الملف اللولبي صمام التحكم في تدفق المياه في النظام ، عندما اردوينو يقرأ القيمة من مستشعر الرطوبة الذي يطلق صمام الملف اللولبي وفقًا للحالة المطلوبة. بالإضافة إلى ذلك ، يبلغ النظام عن حالته الحالية ويرسل رسالة تذكير حول محطات الري ويحصل على رسالة نصية قصيرة من المستلم. كل هذا الإخطار يمكن القيام به باستخدام Arduino GSM shield.

مخطط كتلة نظام سقي النبات التلقائي

خلفية النظام

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

    يوفر نظام سقي النبات القدرة على زرع عشاق لأخذ نباتاتهم المنزلية أثناء تواجدهم بعيدًا - من خلال استخدام مكونات فعالة وموثوقة مثل أنواع مختلفة من تقنيات الاستشعار.

مخطط الدارة التخطيطي لنظام الري الآلي للنباتات

    وفقًا لهذا النظام ، يوجد مكونان وظيفيان في هذا المشروع ، وهما مستشعر الرطوبة ومضخة المحرك / الماء. مستشعر الرطوبة في أبسط أشكاله يستشعر مستوى رطوبة التربة. ثم المحرك / مضخة المياه تمد المياه بالنباتات.

    التخطيطي أعلاه في الشكل أعلاه يصف السلوك العام للنظام. يستخدم المشروع Arduino Uno للتحكم في المحرك. وهي تتألف من جسر H- يتحكم في تدفق محرك سيرفو أي على مدار الساعة أو اتجاه عقارب الساعة. مستشعر الرطوبة يقيس مستوى التربة ويرسل الإشارة إلى Arduino ثم سيفتح Arduino محرك سيرفو إذا كان الري مطلوبًا. ثم تزود مضخة المحرك / الماء الماء بالنباتات حتى يتم الوصول إلى مستوى الرطوبة المرغوب فيه.

    قم بتكوين النموذج الأولي في مستشعر الرطوبة الموجود في الصورة أعلاه ، ومستشعر الرطوبة يرسل إشارة إلى Arduino ثم يفتح Arduino مضخة مياه بمساعدة جسر H-water ومياه النبات المعينة. يتم ذلك باستخدام برنامج Arduino IDE.

تصميم المشروع

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


تم توضيح وظيفة مخطط الكتلة الموضح في الشكل أعلاه لنظام سقي النباتات الآلي أدناه:

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

تصميم الأجهزة

الاستشعار التخطيطي

   يوضح الشكل أدناه التخطيطي لدائرة الاستشعار. كما جميع أجهزة الاستشعار المتصلة دبوس اردوينو التناظرية A0-A3. تم حجز Pin A0 لمستشعر درجة الحرارة والرطوبة بينما تم حجز المسامير A1-A3 لأجهزة استشعار الرطوبة. جميع أجهزة الاستشعار لديها قوة مشتركة 5V والأرض كما هو موضح في التخطيطي.

الاستشعار التخطيطي

تخطيطي LCD :

   يوضح الشكل أدناه التخطيطي لشاشات الكريستال السائل. تم حجز دبوس الرقمي 8-13 لشاشات الكريستال السائل كما هو موضح في التخطيطي. Pin 1 و Pin 3 هما القوة والأرض بينما الدبوس 2 هو دبوس التباين الموجود على شاشة LCD والذي يتحكم في التباين ومتصل بمقياس الجهد. يجب ألا يغيب عن البال أثناء توصيل شاشات الكريستال السائل أن المسامير الرقمية من اردوينو ودبابيس البيانات من شاشات الكريستال السائل يجب أن تكون متصلاً بالترتيب الصحيح وإلا لن تعرض شاشة LCD القمامة على الشاشة.

شاشات الكريستال السائل التخطيطي

الملف اللولبي التخطيطي

   يُظهر الشكل التوضيحي الموجود أسفل الشكل مخطط الدائرة الخاص بدائرة الملف اللولبي. تم حجز دبوس الرقمي 4 - 7 لل Solenoids. نظرًا لأن الدائرة تتكون من المرحلات ، الترانزستورات ، المقاومات ، ومصابيح LED بدلاً من الملف اللولبي (لا يحتوي CadStar على رمز الملف اللولبي). في المرحلات التخطيطي يستخدم 5V. بينما يذهب 5V أيضًا إلى أي قناة من المرحلات ، فهذا لأن المصابيح LED التخطيطية تحل محل الملف اللولبي الذي يعمل على (5V) متبوعًا بمقاوم 220 أوم.

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

الملف اللولبي التخطيطي

   بعد الانتهاء من جميع الرسوم البيانية للدائرة ، فإن الخطوة التالية هي بنائها على Veroboard. من المهم تصميم الدائرة على ورقة تخطيط تخطيط الشرائط المسبقة نظرًا لوجود مبادئ معينة لتصميم دائرة على Veroboard وهي كما يلي:

  • حدد خط الطاقة Vs و GND أولاً في أعلى يمين ورقة تخطيط تخطيط الشرائط.
  • تذكر أن تقطع المسار بين دبابيس IC. بمناسبة التخفيضات على الرسم البياني مع X.
  • محاولة لجعل المقاوم والمكثفات المحورية وضع مسطح على لوحة. عادة ما تتطلب المقاومات فجوة من 4 فتحات ، مكثف فجوة من 8 فتحات.
  • إذا كان بالإمكان ترقيم دبوس IC. يتكون الجانب السفلي من Veroboard من المسارات النحاسية التي تعمل فيها تدفقات الجهد أفقياً. فيما يلي تصميم Veroboard مختلف للخطط أعلاه:

تصميم البرمجيات

   بعد الانتهاء من الأجهزة ، حان الوقت لاختبار الجهاز مع البرنامج. في هذا القسم ، سيتم وصف تنفيذ تصميم البرنامج بالتفصيل لكل من الأتمتة / التقنيات المختلفة المستخدمة في النظام. يتضمن هذا كود Arduino المكتوب والمحمّل على Arduino.

   أول ما تم فعله هو تشغيل الدائرة اللولبية وكيف يعمل الملف اللولبي من منظور المتحكم الدقيق. لهذا ، تم عمل مخطط تدفق صغير يمكن رؤيته تحت قسم تدفق البرمجيات في الشكل أعلاه.

   تم استخدام Arduino IDE للحصول على تحميل البرنامج على Arduino. لدائرة الملف اللولبي الأساسية ، تم كتابة برنامج بسيط والذي يومض في الأساس LED كل ثانية واحدة. تم تعريف دبوس الرقمية 4 و 5 و 6 و 7 في البداية والتي اختبار البرنامج والدائرة. لذلك ، عند تشغيل البرنامج ، فإنه يقوم بجميع عمليات التهيئة الأساسية ، ويحدد جميع دبابيس الإخراج في إعداد الفراغ () ثم ينتقل إلى حلقة الفراغ () حيث يتم تشغيله باستمرار ويومض مصابيح LED على كل ثانية واحدة.

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

   والشيء التالي هو تحميل البرنامج لوحدة GSM إلى Arduino ، والتي من خلالها يمكن لـ GSM التواصل مع المتحكم الدقيق. تم إجراء اختبار المودم في البداية والذي يقوم بكل عمليات التهيئة والمكتبات الأساسية لنظام GSM ويحصل على رقم IMEI ومعرفة ما إذا كان المودم يعمل بشكل صحيح بمجرد بدء الاتصال مع Arduino. والخطوة التالية هي اختبار اتصال الشبكة الذي قام بتهيئة GSM بشكل أساسي ويعرض جميع الشبكات الأخرى التي يمكن أن تدعمها وحدة GSM.

   بمجرد اختبار وحدة GSM وتشغيلها بشكل صحيح ، حان الوقت لاستخدام وحدة GSM للاتصال بالمستلم ، مما يعني إرسال رسائل نصية قصيرة إلى المستلم وتلقي الرسائل القصيرة منها. من أجل القيام بذلك ، تمت كتابة برنامج بسيط آخر لتوصيل أسلاك Arduino وتحميله إلى Arduino. قام البرنامج بتهيئة GSM وإرسال الرسائل القصيرة إلى المستلم على النقيض من ذلك ، تم كتابة برنامج آخر من Arduino يستقبل فيه GSM الرسائل القصيرة من المستخدم النهائي.

أخيرًا ، بمجرد الانتهاء من تصميم البرنامج ، حان الوقت لدمج كل تصميم البرنامج معًا وإنشاء برنامج عمل نهائي للنظام. تم تطبيق مناهج خوارزمية مختلفة والتي يمكن رؤيتها في قسم تدفق البرامج للحصول على البرنامج النهائي ويعمل ويفعل ما يفترض القيام به. يوضح الشكل أعلاه عمل البرنامج النهائي حيث يأخذ القراءة ، وإرسال الرسائل القصيرة ، واستقبال الرسائل القصيرة والبدء في القيام بما كان يفعله في السابق.
ملاحظة: يمكن رؤية كل رمز البرنامج في الملحق أدناه.

مشروع البناء واختبار البرمجيات

بعد الانتهاء من تصميم جميع الأجهزة والبرامج بنجاح ، حان الوقت لإنشاء المشروع واختباره. في هذا القسم من التقرير ، سيتم تقديم تفاصيل حول كيفية تنفيذ تصميم الأجهزة المختلفة واختبارها. يتحدث هذا القسم أيضًا عما إذا كانت هناك أي مشكلة خفية داخل رمز البرنامج والتي كانت مهمة لاستكشاف الأخطاء وإصلاحها والإخلاء وإنشاء المشروع بنجاح. يمكن رؤية عملية خطوة بخطوة في تقرير المشروع الكامل في ملف pdf الوارد أدناه ، مثل إجراءات البناء والاختبار.

اختبار البرمجيات

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

معرف الشرطSRS- الاستشعار -010
عنوانالمستشعر
وصفتقوم المستشعرات الموجودة في النظام بأخذ القراءات وإرسالها مرة أخرى إلى المتحكم الدقيق.
الإصدارالخامس 1.0
معرف الشرطSRS- البيانات -020
عنوانعرض البيانات
وصفعندما يحاول المستخدمون الحصول على القراءة من النظام. يجب أن تعرض الشاشة البيانات للمستخدم على سبيل المثال: قيمة درجة الحرارة والرطوبة متبوعة بقراءات الرطوبة.
الإصدارV1.0
معرف الشرطSRS- متحكم -030
عنوانمتحكم
وصفمتحكم في النظام بمثابة الدماغ للنظام الذي يدير كل شيء في النظام
الإصدارV1.0
معرف الشرطSRS- مزلاج -040
عنوانمزلاج
وصفمزلاج في النظام يوسع المسامير الرقمية لجهاز التحكم
الإصدارV1.0
معرف الشرطSRS- GSM-050
عنوانGSM
وصفسوف يتفاعل النظام عن طريق إرسال تنبيه SMS إلى المستلم كلما أخبر متحكم ذلك.
الإصدارV1.0
بعد كتابة تصميم برنامج مستند SRS انتقل إلى مرحلة اختبار ثابت والتي تتضمن مراجعة المستند. هذا هو المكان الذي يحدث التحقق من المتطلبات. هناك أربعة أنواع مختلفة من طرق التحقق المحددة أدناه:
  1. التفتيش (I): التحكم أو التحقق البصري
  2. التحليل (أ): التحقق بناءً على الأدلة التحليلية
  3. مظاهرة (د): التحقق من الخصائص التشغيلية ، دون القياس الكمي.
  4. اختبار (T): التحقق من الخصائص الكمية مع القياس الكمي. لكل مطلب من وثيقة SRS ، يتم تحديد طريقة التحقق باختصار I و A و D و T.

التحقق:

معرف الشرطعنوان الشرططريقة
REQ-010تحقق من أن أجهزة استشعار النظام تحصل على قراءاتأنا
REQ-020تحقق من أن البيانات معروضة على الشاشة.د
REQ-030تم التحقق من أن متحكم النظام يدير أو يعمل بشكل صحيح لأنه يعطي نتيجة 100 ٪ لكل طلب.د
REQ-040تحقق من أن دائرة المزلاج تقوم بما يفترض القيام به. أن تأخذ الخطيئة 3 المدخلات ويبصق بها 8 دبابيسا
REQ-050تحقق من أن الرسائل القصيرة قد تم إرسالها واستقبالها بواسطة GSMد

النتائج

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

رمز البرنامج النهائي والكامل لمحطات الري الآلي وأنظمة الري

ملاحظة: يمكن العثور على المزيد من الرموز المتعلقة بالمشروع في ملف pdf مثل نموذج التعليمات البرمجية لاختبار Solenoid Valve ورمز اختبار حساسات النظام ورمز اختبار مودم GSM ورمز اتصال شبكة GSM و GSM يرسل رمز التنبيه بالرسائل القصيرة ورمز SMS لتلقي الرسائل القصيرة GSM ،

رمز مشروع محطات سقي السيارات النهائي


#include <dht.h> 
#define dht_dpin A0 
dht DHT؛ 
// ———————– 
# تضمين <LiquidCrystal.h> 
LiquidCrystal lcd (8، 9، 10، 11، 12، 13)؛ 
// ———————————- 
int plantPotMoisture [3] = {A1، A2، A3}؛ 
// ——————— 
# تضمين <GSM.h> 
#define PINNUMBER "" 
GSM gsmAccess؛ / / تتضمن المعلمة "الحقيقية" 
لرسائل GSM_SMS الممكّنة لتصحيح الأخطاء ؛ 
char remoteNumber [] = "0899506304"؛ 
Sture moistureMessage = "الرطوبة منخفضة في المستشعر:"؛ 
سلسلة SMS_Alert = "إرسال الرسائل القصيرة!" ؛ 
سلسلة الرطوبة الرطوبة = "الرطوبة مرتفعة. فتح جميع الملفات اللولبية "؛ 
String tempMsg = "درجة الحرارة مرتفعة للغاية! .. افتح ملف لولبيات"؛ 
سلسلة messageBuffer = ""؛ 
char senderNumber [20]؛
سلسلة stringOne = "Opens1" ؛ 
السلسلة stringTwo = "Opens2" ؛ 
String stringThree = "Opens3"؛ 
سلسلة stringFour = "OpenAll" ؛ 
// ————— 
#define solenoidData 5 
#define solenoidClockster 4 
#define solenoidLatch 6 
// —————
const int master = 0؛ 
const int slave1 = 1 ؛ 
const int slave2 = 2 ؛ 
const int slave3 = 3 ؛ 
خذ منطقي = صحيح ؛ 
int serialSolenoidOutput = 0؛ 
void setup () 

pinMode (solenoidData، OUTPUT)؛ 
pinMode (solenoidClockster ، OUTPUT) ؛ 
pinMode (solenoidLatch ، OUTPUT) ؛ 
digitalWrite (solenoidLatch، HIGH)؛ 
digitalWrite (solenoidLatch، LOW)؛
shiftOut (solenoidData، solenoidClockster، MSBFIRST، 0)؛ 
digitalWrite (solenoidLatch، HIGH)؛ 
// ————————- 
Serial.begin (9600)؛ 
lcd.begin (16 ، 2) ؛ 
lcd.clear ()؛ 
lcd.setCursor (0، 0)؛ 
lcd.print ("انتظر حتى") ؛ 
lcd.setCursor (0، 1)؛ 
lcd.print ("GSM تهيئة!") ؛ 
منطقية notConnected = صواب ؛ 
بينما (notConnected) 

if (gsmAccess.begin (PINNUMBER) == GSM_READY) 
notConnected = false؛ 
آخر 
{
Serial.println ("غير متصل") ؛ 
تأخير (1000)؛ 



void loop () 

if (takeReadings) 

moistureSensor ()؛ 
TempAndHumidity () ؛
if (DHT.humidity> 50 || DHT.temperature> 25 && takeReadings) 

takeReadings = false؛ 
if (DHT.humidity> 50) 

sendSMS (humidityMsg)؛ 

if if (DHT.temperature> 25) 

sendSMS (tempMsg)؛ 

بينما (! takeReadings) 
recieveSMS ()؛ 

if (plantPotMoisture [0]> 30 || plantPotMoisture [1]> 30 || plantPotMoisture [2]> 30 && takeReadings) 

takeReadings = false؛ 
if (plantPotMoisture [0]> 30) 

sendSMS (moistureMessage + "1")؛ 

if if (plantPotMoisture [1]> 30) 

sendSMS (moistureMessage + "2")؛ 

آخر 
{
sendSMS (moistureMessage + "3") ؛ 

بينما (! takeReadings) 
recieveSMS ()؛ 



void moistureSensor () 

for (int i = 0؛ i <3؛ i ++) 

lcd.clear ()؛ 
plantPotMoisture [i] = analogRead (i)؛ 
plantPotMoisture [i] = map (plantPotMoisture [i]، 550، 0، 0، 100)؛ 
Serial.print ("Mositure" + i)؛ 
lcd.print ("Mositure" + i) ؛ 
Serial.print (plantPotMoisture [أنا])؛ 
lcd.print (plantPotMoisture [أنا])؛ 
Serial.println ( "٪")؛ 
lcd.print ( "٪")؛ 
تأخير (1000)؛ 


void TempAndHumidity () 

DHT.read11 (dht_dpin)؛ 
lcd.setCursor (0، 0)؛ 
lcd.print ( "الرطوبة =")؛
Serial.print ("الرطوبة الحالية =") ؛ 
Serial.print (DHT.humidity)؛ 
lcd.print (DHT.humidity)؛ 
lcd.print ( "٪")؛
Serial.print ( "٪")؛ 
Serial.print ("درجة الحرارة =") ؛ 
Serial.print (DHT.temperature)؛ 
Serial.println ( "C")؛ 
lcd.setCursor (0، 1)؛ 
lcd.print ( "مؤقت =")؛ 
lcd.print (DHT.temperature)؛ 
lcd.print ("C") ؛ 
تأخير (1000)؛ 
lcd.clear ()؛ 

void sendSMS (String messageToSend) 

Serial.print ("إرسال رسالة إلى رقم الجوال:")؛ 
Serial.println (remoteNumber)؛ 
Serial.println ( "إرسال")؛ 
lcd.print (SMS_Alert)؛ 
Serial.println ()؛ 
Serial.println ( "رسالة:")؛ 
Serial.println (messageToSend)؛
sms.beginSMS (remoteNumber)؛ 
sms.print (messageToSend)؛ 
sms.endSMS ()؛ 
Serial.println ( "\ nCOMPLETE \ ن!")؛ 
lcd.clear ()؛ 
lcd.print ( "مكتمل !!!")؛ 

باطلة recieveSMS () 

char c؛ 
إذا (sms.available ()) 
{
lcd.clear ()؛ 
lcd.print ("الرسالة المستلمة من:") ؛ 
تأخير (800)؛ 
lcd.clear ()؛ 
sms.remoteNumber (senderNumber، 20)؛ 
lcd.print (senderNumber)؛ 
بينما (c = sms.read ()) 

Serial.println (c)؛ 
messageBuffer + = c ؛ 

Serial.println (messageBuffer) ؛ 
if (messageBuffer == stringOne) 

toggleSolenoid1 ()؛ 
takeReadings = صحيح ؛ 
}
وإلا إذا (messageBuffer == stringTwo) 

toggleSolenoid2 ()؛ 
takeReadings = صحيح ؛ 

if if (messageBuffer == stringThree) 

toggleSolenoid3 ()؛ 
takeReadings = صحيح ؛ 

if if (messageBuffer == stringFour) 

toggleAll ()؛ 
takeReadings = صحيح ؛ 

آخر 
{
takeReadings = صواب ؛ 

messageBuffer = ""؛ 
Serial.println ("\ nEND OF MESSAGE") ؛ 
// حذف الرسالة من ذاكرة المودم 
sms.flush () ؛ 
Serial.println ("تم حذف الرسالة") ؛ 

التأخير (1000) ؛ 

void toggleSolenoid1 () 

solenoidWrite (master، HIGH)؛
تأخير (1000)؛ 
solenoidWrite (الرقيق 1 ، عالية) ؛ 
تأخير (1000)؛ 
solenoidWrite (slave1، LOW)؛ 
تأخير (1000)؛ 
solenoidWrite (ماجستير ، منخفض) ؛ 
تأخير (1000)؛ 

void toggleSolenoid2 () 

solenoidWrite (master، HIGH)؛ 
تأخير (1000)؛ 
الملف اللولبي الكتابة (slave2 ، عالية) ؛ 
تأخير (1000)؛ 
solenoidWrite (slave2، LOW)؛ 
تأخير (1000)؛ 
solenoidWrite (ماجستير ، منخفض) ؛ 
تأخير (1000)؛ 

void toggleSolenoid3 () 

solenoidWrite (master، HIGH)؛ 
تأخير (1000)؛ 
الملف اللولبي الكتابة (slave3 ، عالية) ؛ 
تأخير (1000)؛ 
solenoidWrite (slave3، LOW)؛ 
تأخير (1000)؛ 
solenoidWrite (ماجستير ، منخفض) ؛
تأخير (1000)؛ 

void toggleAll () 

solenoidWrite (master، HIGH)؛ 
تأخير (1000)؛ 
solenoidWrite (الرقيق 1 ، عالية) ؛ 
تأخير (1000)؛ 
الملف اللولبي الكتابة (slave2 ، عالية) ؛ 
تأخير (1000)؛ 
الملف اللولبي الكتابة (slave3 ، عالية) ؛ 
تأخير (1000)؛ 
solenoidWrite (slave1، LOW)؛ 
تأخير (1000)؛ 
solenoidWrite (slave2، LOW)؛ 
تأخير (1000)؛ 
solenoidWrite (slave3، LOW)؛ 
تأخير (1000)؛ 
solenoidWrite (ماجستير ، منخفض) ؛ 
تأخير (1000)؛ 

void solenoidWrite (int pin، bool state) 

if (pin> = 0 && pin <8) 

if (state) 
serialSolenoidOutput | = (1 << pin)؛ 
آخر
serialSolenoidOutput & = ~ (1 << pin)؛

digitalWrite (solenoidLatch، LOW)؛ 
shiftOut (solenoidData ، solenoidClockster ، MSBFIRST ، serialSolenoidOutput) ؛ 
digitalWrite (solenoidLatch، HIGH)؛ 
}
تعليقات
ليست هناك تعليقات
إرسال تعليق