جدول المحتويات:
- الخطوة 1: متطلبات الأجهزة
- الخطوة الثانية: الأمان
- الخطوة الثالثة: الدفاع
- الخطوة الرابعة: الترفيه
- الخطوة 5: تطبيق IOT App Watson على IBM Bluemix [الجزء الأول]
- الخطوة 6: عقدة التدفقات الحمراء
فيديو: نظرة عامة: نظام الترفيه والأمن المنزلي: 6 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:40
حول التطبيق
نظام IOT هذا هو نظام الترفيه والأمن المنزلي.
-
حماية
- انقر فوق بطاقة RFID وسيتم حفظ الإدخال في Firebase.
- إذا سمح لك بذلك ، يمكنك الدخول بسلام ويتم التقاط الصورة وتحميلها على S3
- إذا كان قسم الدفاع غير مصرح به ، فستظهر لك شاشة LCD تفيد بأنك غير مصرح به.
-
دفاع
- اضغط على الزر الموجود على لوحة القيادة.
- سوف تهاجم أبراج الليزر في انفجار عشوائي وسرعة.
-
تسلية
- إذا تم الكشف عن الحركة ، ستبدأ اللعبة.
- بعد أن يلعب المستخدم اللعبة ، يتم حفظ النتيجة في Firebase.
- سيتم أخذ قيم LDR وإخراجها على لوحة القيادة.
هذا التطبيق يمكن التحكم فيه وعرضه عبر خادم الويب IBM Node-Red. نحن نستخدم AWS و IBM Cloud Services واستخدمنا Firebase كقاعدة بيانات خاصة بنا.
ملخص الخطوات التي سيتم وصفها
- متطلبات الأجهزة
- الأمان - كيفية إنشاء نظام أمان يستخدم إدخال RFID وبرنامج التعرف على الصور
- الدفاع - كيفية إنشاء برج ليزر
- الترفيه - كيفية إنشاء لعبة Simon-says
- IOT App Watson على IBM Bluemix - كيفية دمج جميع الأنظمة في لوحة معلومات واحدة
انطلق وقم بالوصول إلى ملف pdf للحصول على شرح أكثر تفصيلاً حول كيفية إنشاء هذا المشروع.
الخطوة 1: متطلبات الأجهزة
هذا ما سوف تحتاجه
-
حماية
- 1 Raspberry Pi
- 1 شاشة LCD
- 1 قارئ RFID
- 1 PiCam
- 2 بطاقات / أزرار RFID
- X أنثى -> كابلات وصلة ذكر
-
دفاع
- 1 Raspberry Pi
- 2 10 ㏀ المقاوم (للأزرار)
- 2 مايكرو سيرفو
- 1 وحدة إرسال الليزر 650nm
- 2 زر ضغط
- 1 الجرس
- 3 أربطة مطاطية صغيرة / روابط كبل (للتثبيت)
- X أنثى -> كابلات وصلة ذكر
- X كبلات القفز العادية
- 1 الترانزستور
- 1 مكثف
-
ترفيه
- 1 Raspberry Pi
- 3 1 المقاوم (لمصابيح LED)
- 1 10㏀ المقاوم (لـ LDR)
- 3 مصابيح LED (ألوان مختلفة)
- 3 أزرار
- 1 LDR
- 1 شاشة LCD
- 1 جهاز استشعار الحركة
- X أنثى -> كابلات وصلة ذكر
- X كبلات القفز العادية
الخطوة الثانية: الأمان
إنشاء أجهزة نظام الأمان
قم بتوصيل الدوائر كما هو موضح في الرسم التخطيطي
إنشاء برنامج نظام الأمان
- قم بتكوين AWS عن طريق إنشاء شيء ما
- قم بتثبيت AWS Python Library
- قم بتثبيت مكتبة LCD
- قم بتثبيت مكتبة RFID
- قم بإعداد Firebase
- إعداد التخزين S3
- قم بتثبيت Boto على Raspberry Pi
- قم بتثبيت AWS ClI على Raspberry Pi
- أنشئ بيانات اعتماد AWS
- تكوين AWS
- قم بتحميل security.py إلى RPi
- تحميل imagerecognition.py إلى RPi
security.py هو رمز يقرأ مدخلات rfid ويكشف ما إذا كان المستخدم دخيلًا أم لا. إذا تم التعرف على المستخدم ، فسيتم التقاط صورة وتحميلها إلى s3. يتم نشر الكود أيضًا في موضوع في AWS MQTT
الخطوة الثالثة: الدفاع
إنشاء جهاز برج الليزر
- نقوم بإنشاء برج الليزر باستخدام 2 مؤازر ووحدة ليزر واحدة
- قم بتوصيل الدوائر كما هو موضح في الرسم التخطيطي
إنشاء برنامج برج الليزر
سيجعل الكود أدناه برج الليزر يطلق النار في اتجاهات عشوائية ، في رشقات نارية وسرعة عشوائية
laserturret.py
من gpiozero import LED و Buzzer و Button و Servoimport time من استيراد الإشارة وإيقاف الاستيراد بشكل عشوائي
#led = LED (12)
#pir = MotionSensor (19، sample_rate = 5، queue_len = 1) buzzer_pin = Buzzer (17) attack = Button (5، pull_up = False) #reset = Button (6، pull_up = False) servo1 = Servo (18) servo2 = سيرفو (24)
def ledON ():
led.on () print ("LED قيد التشغيل") def ledOFF (): led.off () print ("LED is off")
def fire ():
طباعة ("الأسلحة الساخنة") buzzer_pin.on () time.sleep (0.1) buzzer_pin.off ()
def laserturret ():
timeBetweenBurst = random.uniform (0.2 ، 1) timeBetweenShots = random.uniform (0.05، 0.2) servo1start = random.randrange (-1 ، 1) servo1end = random.randrange (-1 ، 1) servo2start = random.randrange (-1) ، 1) servo2end = random.randrange (-1 ، 1) numShots = random.randrange (5 ، 20) servo1change = (servo1end - servo1start) / numShots servo2change = (servo2end - servo2start) / numShots servo1.value = مضاعف 1start servo2.value = مؤازرة الوقت..value = "servo2start" servo1start = "servo1change" servo2start = "servo2change" fire () = "" time.sleep (timebetweenshots) = "" time.sleep (timebetweenburst)
ملاحظات = {
"B0": 31 ، "C1": 33 ، "CS1": 35 ، "D1": 37 ، "DS1": 39 ، "EB1": 39 ، "E1": 41 ، "F1": 44 ، "FS1 ': 46،' G1 ': 49،' GS1 ': 52،' A1 ': 55،' AS1 ': 58،' BB1 ': 58،' B1 ': 62،' C2 ': 65،' CS2 ': 69، 'D2': 73، 'DS2': 78، 'EB2': 78، 'E2': 82، 'F2': 87، 'FS2': 93، 'G2': 98، 'GS2': 104، "A2": 110 ، "AS2": 117 ، "BB2": 123 ، "B2": 123 ، "C3": 131 ، "CS3": 139 ، "D3": 147 ، "DS3": 156 ، "EB3 ': 156،' E3 ': 165،' F3 ': 175،' FS3 ': 185،' G3 ': 196،' GS3 ': 208،' A3 ': 220،' AS3 ': 233،' BB3 ': 233 ، "B3": 247 ، "C4": 262 ، "CS4": 277 ، "D4": 294 ، "DS4": 311 ، "EB4": 311 ، "E4": 330 ، "F4": 349 ، 'FS4': 370، 'G4': 392، 'GS4': 415، 'A4': 440، 'AS4': 466، 'BB4': 466، 'B4': 494، 'C5': 523، 'CS5 ': 554،' D5 ': 587،' DS5 ': 622،' EB5 ': 622،' E5 ': 659،' F5 ': 698،' FS5 ': 740،' G5 ': 784،' GS5 ': 831، 'A5': 880، 'AS5': 932، 'BB5': 932، 'B5': 988، 'C6': 1047، 'CS6': 1109، 'D6': 1175، 'DS6': 1245، 'EB6': 1245، 'E6': 1319، 'F6': 1397، 'FS6': 1480، 'G6': 1568، 'GS6': 1661، 'A 6 ': 1760،' AS6 ': 1865،' BB6 ': 1865،' B6 ': 1976،' C7 ': 2093،' CS7 ': 2217،' D7 ': 2349،' DS7 ': 2489،' EB7 ': 2489، 'E7': 2637، 'F7': 2794، 'FS7': 2960، 'G7': 3136، 'GS7': 3322، 'A7': 3520، 'AS7': 3729، 'BB7': 3729 ، "B7": 3951، "C8": 4186، "CS8": 4435، "D8": 4699، "DS8": 4978}
def buzz (التردد ، الطول): # إنشاء وظيفة "الطنين" وإطعامها الملعب والمدة)
إذا (التردد == 0):
time.sleep (length) return period = 1.0 / Frequency #frequency delayValue = period / 2 #calculate the time for half of the wave numCycles = int (length * frequency) #num of wave = duratime x freq for i in range (numCycles) عدد الدورات): # ابدأ حلقة من 0 إلى "الدورات" المتغيرة المحسوبة أعلاه buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue)
تشغيل def (لحن ، وتيرة ، وقفة ، وتيرة = 0.800):
بالنسبة لـ i في النطاق (0 ، len (اللحن)): # تشغيل ملاحظة الأغنية المدة = السرعة / الإيقاع الطنين (اللحن ، noteDuration) # تغيير التردد على طول نغمة الإيقاف المؤقت بين الملاحظات = noteDuration * pause time.sleep (وقفة بين الملاحظات)
احيانا صحيح:
كسر laserturret ؛
الخطوة الرابعة: الترفيه
إنشاء أجهزة الترفيه
قمنا بإنشاء لعبة زر Simon-says ، والتي يجب عليك اتباع نمط إضاءة مصابيح LED والضغط على الأزرار المقابلة. يقوم بتحميل النتائج والطابع الزمني في قاعدة بيانات Firebase NoSQL لمزيد من الاستخدام في لوحات المعلومات.
قم بتوصيل الدوائر كما هو موضح في مخطط فريتزينج.
إنشاء برنامج الترفيه
ترفيه
استيراد RPi. GPIO كما GPIOimport الوقت خيوط استيراد tweepy استيراد عشوائي نظام التشغيل استيراد الاستيراد من LCD rpi_lcd الاستيراد من دعوة فرعي أو جانبي الاستيراد من وقت النوم الاستيراد من التاريخ والوقت التاريخ والوقت الاستيراد من firebase CONSUMER_KEY firebase استيراد = 'h5Sis7TXdoUVncrpjSzGAvhBH "CONSUMER_SECRET =' ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY" ACCESS_KEY = '988333099669901312- YDLEQN1weW2n1JP4lxJcFPppCsbvzQh "ACCESS_SECRET = 'K2IlUPur6jx7DO5S0HhhZW29H5AQFOvkMMevSsk9ZzwLk" المصادقة = tweepy. OAuthHandler (CONSUMER_KEY، CONSUMER_SECRET) auth.secure = auth.set_access_token صحيح (ACCESS_KEY، ACCESS_SECRET) API = tweepy. API (المصادقة) firebase = firebase. FirebaseApplication (' HTTPS: // iotca2 -12f48.firebaseio.com '، None) lcd = LCD () lcd.text (' Have fun! '، 1) lcd.text (' Good Luck! '، 2) sleep (1) # Red، Yellow، Green LIGHTS = [40، 38، 36] BUTTONS = [37، 33، 35] ملاحظات = ["E3"، "A4"، "E4"] # قيم يمكنك تغييرها والتي تؤثر على سرعة تشغيل اللعبة = 0.5 # أعلام تستخدم للإشارة إلى اللعبة الحالة is_displaying_pattern = خطأ is_won_curr ent_level = False is_game_over = False # game state current_level = 1 current_step_of_level = 0 pattern = def initialize_gpio (): GPIO.setmode (GPIO. BOARD) GPIO.setup (LIGHTS ، GPIO. OUT ، الأولي = GPIO. LOW) GPIO. الإعداد (BUTTONS، GPIO. IN، pull_up_down = GPIO. PUD_DOWN) لـ i في النطاق (3): GPIO.add_event_detect (BUTTONS ، GPIO. FALLING ، check_player_selection) def check_player_selection (channel): global current_step_of_level is، current_on is_game_over إذا لم يكن is_displaying_pattern وليس is_won_current_level وليس is_game_over: flash_led_for_button (قناة) إذا كانت القناة == BUTTONS [النمط [current_step_of_level]: true_step_of_level + = 1 if current_step_of_level = الحالي flash_led_for_button (button_channel): led = LIGHTS [BUTTONS.index (button_channel)] GPIO.output (led ، GPIO. HIGH) time.sleep (0.4) GPIO.output (led، GPIO. LOW) def add_new_color_to_pattern (): global is_evel ،_ cur rent_step_of_level is_won_current_level = False current_step_of_level = 0 next_color = random.randint (0، 2) pattern.append (next_color) def display_pattern_to_player (): النطاق العالمي is_displaying_pattern is_displaying_pattern = GPOWTS الحالي: GPIO.output (LIGHTS [pattern ، GPIO. HIGH) time.sleep (speed) GPIO.output (LIGHTS [pattern ، GPIO. LOW) time.sleep (speed) is_displaying_pattern = False def wait_for_player_to_repeat_pattern (): في حين أنه ليس is_won_current_level وليس is_game_over: time.sleep (0.1) def reset_board_for_new_game (): global is_displaying_pattern، is_won_current_level، is_game_over global current_level، current_step_of_level، pattern is_displaying_level = GPIO.output (LIGHTS، GPIO. LOW) def send_data (النتيجة): lcd.text ('End of game،'، 1) lcd.text ('أراك قريبًا!'، 2) datestr = str (datetime. now ()) بينما صحيح: print (datestr) طباعة (النتيجة) data = {'Date': datestr، 'Score': Score} result = firebase.post ('/ scores /'، data) print (النتيجة) إذا كانت النتيجة> 2: الحالة = 'شخص ما سجل' + (str (النتيجة)) + 'on' + datestr + '!' api.update_status (status = status) كسر def start_game (): while True: add_new_color_to_pattern () display_pattern_to_player () wait_for_player_to_repeat_pattern () if is_game_over: send_data (current_level - 1) print ("Game Over!.format (current_level - 1)) sleep (2) print ("Thanks for play! / n") lcd.text (''، 1) lcd.text (''، 2) break time.sleep (2) def start_game_monitor (): t = threading. Thread (target = start_game) t.daemon = True t.start () t.join () def main (): try: os.system ('cls' if os.name == 'nt طباعة 'else' clear ') ("Begin new round! / n") initialize_gpio () start_game_monitor () أخيرًا: GPIO.cleanup () if _name_ ==' _main_ ': main ()
الخطوة 5: تطبيق IOT App Watson على IBM Bluemix [الجزء الأول]
قم بإعداد خدمة Blumix IoT
- قم بإعداد Gateway Device Type
- قم بإعداد جهاز
قم بالخطوتين 1 و 2 لمدة 3 مرات. واحد RPi لقسم واحد (الأمن / الدفاع / الترفيه)
قم بإعداد Node-Red
تشغيل العقدة الحمراء
بداية العقدة الحمراء
- انتقل إلى إدارة اللوحة في قائمة الهامبرغر (أعلى اليمين)
-
قم بتنزيل المنصات التالية
- العقدة الحمراء لوحة القيادة
- عقدة حمراء ساهمت في Firebase
- عقدة-أحمر-مساهم-آي بي إم-واطسون-آيوت
الخطوة 6: عقدة التدفقات الحمراء
قم بتنزيل الملفات وتصديرها إلى node-red.
عقدة الأمان الحمراء
لا أحد
عقدة الدفاع Rpi-Red
laserturret.txt
ترفيه Rpi Node-Red
- الترفيه rpi flow.txt
- ldr rpi flow.txt
IBM Bluemix Node-Red
موصى به:
KS-Garden: نظرة عامة: 9 خطوات
KS-Garden: نظرة عامة: يمكن استخدام KS-Garden للري / التنفيس. / إضاءة حديقتك / نباتات الدفيئة في الفناء الخلفي أو نباتات صندوق النمو الداخلي (تصميم معياري) يتكون نظام KS-Garden بشكل أساسي من الوحدات التالية - الرئيسية مربع النظام - ريلايس وصندوق إمداد الطاقة
محرك ترانزستور مع جهاز تحكم عن بعد ؛ نظرة عامة على الدائرة: 9 خطوات
محرك ترانزستور مع جهاز تحكم عن بعد ؛ نظرة عامة على الدائرة: هذه الدائرة عبارة عن محرك يتم التحكم فيه بواسطة الترانزستور مع جهاز تحكم عن بعد. ثم خفض سرعة المحرك حتى الصفر
نظرة عامة على الكمبيوتر 8 بت على اللوح: 3 خطوات
نظرة عامة على الكمبيوتر ذي 8 بت على لوحة بريدية: كان هدفي من هذا المشروع هو بناء فهم أفضل لهندسة الكمبيوتر وتصميم الأجهزة ولغات مستوى التجميع. كوني مبتدئًا في الجامعة يدرس هندسة الكمبيوتر ، فقد أكملت مؤخرًا دورات في الإلكترونيات ، والمختبرات أنا
نظرة عامة على تصميم وحفر ثنائي الفينيل متعدد الكلور: 5 خطوات
نظرة عامة على تصميم وحفر ثنائي الفينيل متعدد الكلور: هناك عدة طرق لتصميم وحفر ثنائي الفينيل متعدد الكلور ، من أبسطها إلى أكثرها تعقيدًا. في هذه الأثناء ، من السهل أن تشعر بالارتباك بشأن أيهما تختار وأيهما يناسب احتياجاتك بشكل أفضل. من أجل توضيح بعض الأسئلة مثل ر
استخدام جسر H (293D) لقيادة محركين هواة موجهين Ans Arduino ؛ نظرة عامة على الدائرة: 9 خطوات
استخدام جسر H (293D) لقيادة 2 محركات هواية موجهة Ans Arduino ؛ نظرة عامة على الدائرة: جسر H 293D عبارة عن دائرة متكاملة قادرة على قيادة محركين ، وتتمثل ميزة الجسر H فوق الترانزستور أو دوائر التحكم في MOSFET في أنه يمكن قيادة المحركين ثنائي الاتجاه (للأمام والخلف) باستخدام رمز