الهوايات

إنترنت الأشياء ينقذ الموقف

إنترنت الأشياء
راسبيري باي

كيف استُخدم راسبيري باي لإبقاء المجفف يعمل

راسبيري باي وريليه لتشغيل المجفف

المشكلة

جهاز قديم خارج نطاق الدعم

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

مخطط المجفف

البحث

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

الحل

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

  1. راسبيري باي زيرو
  2. لوحة تجارب (Protoboard)
  3. لوحة مرحلات (ريليهات)
  4. محول واي فاي
  5. شاشة عرض I2C 4x20. اختيارية نوعاً ما، لكنها مفيدة جداً للتغذية الراجعة.

التنفيذ

استغرق تجميع العتاد حوالي ساعة (انظر الشكل 2 Pi Dryer). راسبيري باي زيرو موجود في صندوق خشبي مع مساحة للوحة التجارب. يتم تشغيله بواسطة محول AC/DC عبر منفذ USB A. محول الواي فاي متصل بمنفذ USB B. شريط المرحلات المنطقي متصل بدبابيس GPIO المناسبة، مع توصيل الدبابيس الأولى والأخيرة بالأرضي والطاقة (VCC) على التوالي. الطرف عالي الجهد للمرحلات متصل بالمجفف.

عند تشغيل الراسبيري باي، يقوم rc.local بتشغيل سكريبت بدء تشغيل Pi Dryer الذي يعرض عنوان IP للوحة ويهيئ المرحلات.

    import socket 
    import fcntl
    import struct

    def get_ip_address(ifname):
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        return socket.inet_ntoa(fcntl.ioctl(
            s.fileno(),
            0x8915,  # SIOCGIFADDR
            struct.pack('256s', ifname[:15])
        )[20:24])

    lo =  get_ip_address('lo')
    wlan = get_ip_address('wlan0')

يمكنني بعد ذلك الاتصال بالجهاز عبر SSH وتشغيل سكريبت المؤقت.

    import RPi.GPIO as GPIO
    import time

    relay_pins = {'one': 11, 'two':7, 'three':12, 'four':16, 'five':18, 'six':22, 'seven':15, 'eight':13}

    GPIO.setmode(GPIO.BOARD)  # استخدام ترقيم دبابيس P1 header
    GPIO.setwarnings(False)   # لا أريد سماع تحذيرات بأن الدبابيس قيد الاستخدام

    for relay_pin, board_pin in relay_pins.iteritems():
            GPIO.setup(board_pin, GPIO.OUT)
            GPIO.output(board_pin, GPIO.LOW) # إيقاف التشغيل

    cycle_time = 1.0 # بالثواني

    GPIO.output(relay_pins['one'], GPIO.HIGH)
    time.sleep(cycle_time)
    GPIO.output(relay_pins['one'], GPIO.LOW)

الخلاصة

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