جدول المحتويات:
- الخطوة 1: الأجهزة المطلوبة
- الخطوة 2: تجميع الهيكل
- الخطوة الثالثة: تركيب الإلكترونيات
- الخطوة 4: إضافة كاميرا الويب
- الخطوة 5: توصيل الأسلاك بالكامل
- الخطوة 6: إعداد RPI
- الخطوة 7: تكوين منفذ RPI التسلسلي
- الخطوة الثامنة: تثبيت وحدات بايثون
- الخطوة 9: إعداد RoboClaw
- الخطوة العاشرة: تثبيت برنامج Rover / الملفات
- الخطوة 11: بدء تشغيل الروبوت
- الخطوة 12: الوصول إلى صفحة التحكم في الروبوت
- الخطوة 13: كود Python / Flask
- الخطوة 14: استخدام أجهزة أخرى
فيديو: روفر المتحكم فيه عبر الويب: 14 خطوة (مع صور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:39
بناء الروبوتات واللعب بها هو سعادتي الرئيسية في الحياة. يلعب الآخرون الجولف أو التزلج ، لكنني أقوم ببناء الروبوتات (بما أنني لا أستطيع لعب الجولف أو التزلج:-). أجده مريحًا وممتعًا! لتحقيق معظم برامج الروبوت الخاصة بي ، أستخدم مجموعات الهيكل. يساعدني استخدام المجموعات على القيام بما أحب القيام به أكثر ، البرامج والإلكترونيات ، كما أنه يصنع هيكلًا أفضل لنفسي.
في Instructable ، سننظر في ما يتطلبه الأمر لإنشاء عربة جوالة بسيطة ولكنها قوية يتم التحكم فيها عبر Wifi / الويب. الهيكل المستخدم هو Actobotics Gooseneck. لقد اخترته لحجمه وقدرته على التوسع والتكلفة ولكن يمكنك استخدام أي هيكل آخر من اختيارك.
بالنسبة لمشروع مثل هذا ، سنحتاج إلى جهاز كمبيوتر فردي صلب جيد ، وبالنسبة لهذا الروبوت اخترت استخدام Raspberry Pi (RPI) وهو كمبيوتر يعمل بنظام Linux. يمنحنا RPI (و Linux) الكثير من خيارات الترميز وسيتم استخدام Python في جانب الترميز. بالنسبة لواجهة الويب ، أستخدم Flask ، وهو إطار ويب خفيف الوزن لـ Python.
لقيادة المحركات ، اخترت RoboClaw 2x5a. يسمح بالاتصال التسلسلي البسيط لقيادته ويعمل بشكل جيد مع RPI والمحركات الموجودة على Gooseneck.
أخيرًا ، تحتوي على كاميرا ويب لتعليقات الفيديو من نوع POV لقيادتها عن بُعد. سأغطي كل موضوع بمزيد من التفصيل لاحقًا.
الخطوة 1: الأجهزة المطلوبة
- هيكل Actobotics Gooesneck أو بديل مناسب من اختيارك
- Raspberry Pi من اختيارك (أو استنساخ) - يتم استخدام نموذج RPI B في هذا الروبوت ، ولكن أي من منافذ USB على الأقل سيعمل
- لوحة مؤازرة قياسية B x1
- 90 درجة زاوية قناة واحدة قوس x1
- سائق محرك RoboClaw 2x5a
- S3003 أو أجهزة ذات حجم قياسي مماثل
- لوح توصيل صغير أو لوح توصيل صغير
- أنثى إلى أنثى أسلاك العبور
- ذكر لأنثى أسلاك العبور
- كاميرا الويب (اختياري) - أستخدم Logitech C110 ، وهنا قائمة بالكاميرات المدعومة لـ RPI
- مصدر طاقة 5v-6v لطاقة مؤازرة
- بطارية 7.2 فولت - 11.1 فولت لتشغيل محرك الدفع
- 5 فولت 2600 مللي أمبير (أو أعلى) بنك طاقة USB لـ RPI
- محول واي فاي USB
في الروبوت الخاص بي ، أستخدم عجلات مقاس 4 بوصات لأجعلها أكثر بقليل من All-Terrain-Indoor. بالنسبة لهذا الخيار ، ستحتاج إلى:
- عجلة الخدمة الشاقة 4 بوصة × 2.5 بوصة
- صرة برغي مجموعة التجويف 4 مم (0.770 بوصة) × 2
الخطوة 2: تجميع الهيكل
قم أولاً بتجميع الهيكل باتباع الإرشادات المرفقة مع الهيكل أو الفيديو. بعد الانتهاء يجب أن يكون لديك شيء مثل الصورة. ملاحظة: عند تجميع جزء العنق ، ما عليك سوى ترك قوس التركيب مغلقًا.
في الروبوت الخاص بي ، اخترت استبدال العجلات التي يأتي معها الهيكل بعجلات 4 بوصة شديدة التحمل. وهذا اختياري ولا حاجة إليه إلا إذا كنت تريد أن تفعل الشيء نفسه.
الخطوة الثالثة: تركيب الإلكترونيات
يحتوي Gooseneck على الكثير من المساحة والخيارات لتركيب الأجهزة الإلكترونية الخاصة بك. أقدم لك هذه الصور كخط إرشادي ، ولكن يمكنك اختيار الطريقة التي ترغب في وضعها بالكامل. يمكنك استخدام القوائم أو الشريط على الوجهين أو شريط الفيلكرو أو الشريط المؤازر لتركيب اللوحة والبطاريات.
الخطوة 4: إضافة كاميرا الويب
خذ قوس 90 درجة ومحور مؤازر خفيف الوزن وأربعة (4) من مسامير 0.3125 بوصة لهذه الخطوة:
- خذ محور المؤازرة وضعه على جانب واحد من الحامل وقم بتثبيته مع المسامير اللولبية 0.225 بوصة كما في الصورة
- بعد ذلك ، قم بتركيب المؤازرة في قوس المؤازرة
- قم بإرفاق قوس 90 درجة مع قرن المؤازرة بالعمود الفقري المؤازر واستخدم المسمار البوق الذي يأتي مع المؤازرة لربطها معًا
- الآن قم بتركيب المؤازرة في قوس على الجزء العلوي من عنق الأوز مع البراغي المتبقية
- قم بتركيب الكاميرا برباطات مضغوطة أو شريط مزدوج الجوانب على حامل 90 درجة
استخدم الصور كدليل إذا لزم الأمر.
الخطوة 5: توصيل الأسلاك بالكامل
الأسلاك مضيق إلى حد ما إلى الأمام لهذا الروبوت.
المحركات:
يؤدي اللحام على كلا المحركين إذا لم تكن قد قمت بذلك بالفعل
مع مواجهة الروبوتات الأمامية (النهاية برقبة الإوزة) بعيدًا عنك:
- قم بتوصيل أسلاك المحرك الموجودة على المحرك الأيسر بالقناة M1A و M1B
- قم بتوصيل أسلاك المحرك الموجودة على المحرك الأيمن بالقناة M2A و M2B
اتصالات الأرض (GND):
- قم بتوصيل دبوس أرضي واحد على RoboClaw بلوحة العبور الأرضية. خط الدبوس الأرضي على RoboClaw هو الأقرب إلى المركز (انظر الصورة)
- قم بتوصيل رقم التعريف الشخصي 6 على RPI بلوحة العبور. انظر الموافقة المسبقة عن علم رأس RPI لتخصيصات دبوس.
- قم بتوصيل GND من حزمة بطارية المؤازرة بأحد المسامير الموجودة على لوحة العبور.
- قم بتشغيل سلك توصيل من لوحة العبور إلى سلك GND المؤازر.
RPI إلى RoboClaw:
قم بتوصيل دبوس RPI GPIO14 TXD بدبوس RoboClaw S1
قوة:
- قم بتوصيل سلك POS من بطارية المؤازرة بسلك نقاط البيع المؤازرة
- قم بتوصيل سلك POS من بطارية المحرك بنقطة البيع (+) لمحطة إدخال طاقة محرك RoboClaw. سنترك محطة GND غير متصلة في الوقت الحالي.
الخطوة 6: إعداد RPI
أفترض أن المستخدم هنا يعرف بعضًا عن Linux و RPI. أنا لا أغطي كيفية الإعداد أو الاتصال بواحد. إذا كنت بحاجة إلى مساعدة في ذلك ، فاستخدم الصفحات أدناه.
للحصول على إعداد RPI الخاص بك ، ألق نظرة على الصفحات التالية:
- إعداد RPI الأساسي
- دليل البدء السريع RPI
- نقابة إعداد NOOBS
بالنسبة لصفحات القفز العامة ، تعد صفحة RPI الرئيسية وصفحات eLinux أماكن رائعة للبدء.
انظر هذا الرابط لإعداد RPI العام لشبكة Wifi.
إذا كنت تخطط لاستخدام نوع من الكاميرا أو كاميرا الويب على الروبوت ، فقم بإلقاء نظرة على هذه الصفحات للحصول على الملفات الأساسية المطلوبة.
- إعداد كاميرا RPI
- إعداد كاميرا eLinix RPI
دفق الفيديو:
هناك عدة طرق لتشغيل دفق الفيديو على RPI ، لكن الطريقة التي أفضلها هي استخدام Motion.
لتثبيته على RPI الخاص بك ، قم بتشغيل: sudo apt-get install motion
يذهب هذا الأمر إلى إعداده للبث أيضًا.
الخطوة 7: تكوين منفذ RPI التسلسلي
سنحتاج إلى تعطيل وضع وحدة تحكم Linux لاستخدام RX و TX لأننا نريد التحدث إلى وحدة التحكم في محرك RoboClaw من هذا المنفذ. للقيام بذلك ، يمكنك استخدام هذه الطريقة أو هذه الأداة. الخيار لك في الطريقة لأن كلاهما يفعل نفس الشيء في النهاية.
الخطوة الثامنة: تثبيت وحدات بايثون
ستحتاج إلى تثبيت python على RPI بالإضافة إلى نقطة تثبيت حزمة python.
لتثبيت النقطة ، قم بما يلي:
- sudo apt-get install python-setuptools
- sudo easy_install pip
ثم:
- قارورة تثبيت sudo pip
- sudo pip تثبيت pyserial
- تثبيت sudo pip RPIO
ستكون هذه هي جميع الوحدات المطلوبة لتشغيل الكود.
الخطوة 9: إعداد RoboClaw
لدي رمز الروبوت الذي يتحدث إلى RoboClaw في الوضع التسلسلي القياسي عند 19200 باود.
لتعيين RoboClaw لهذا ، قم بما يلي:
- اضغط على زر "MODE" الموجود على RoboClaw
- اضغط على زر الضبط حتى يومض مؤشر LED 5 (خمس) مرات بين فترات التأخير
- اضغط على زر "LIPO" للتخزين
- بعد ذلك ، اضغط على الزر "SET" حتى يومض مؤشر LED ثلاث (ثلاث) مرات بين فترات التأخير
- اضغط على زر LIPO للتخزين
هذا كل شيء لإعداد وحدة التحكم في المحرك. راجع ملف pdf المرتبط أعلاه لمزيد من المعلومات إذا لزم الأمر.
الخطوة العاشرة: تثبيت برنامج Rover / الملفات
قم بتنزيل ونسخ ملف rover.zip إلى RPI في دليل مستخدم pi.
إذا كنت تستخدم Linux أو Mac ، فيمكنك استخدام "scp" للقيام بذلك:
scp ~ / location / of / the / file / rover.zip pi @ your_rpi_ip: / ~
بالنسبة لنظام التشغيل Windows ، يمكنك تنزيل واستخدام pscp ثم القيام بما يلي:
pscp /location/of/the/file/rover.zip pi @ your_rpi_ip: / ~
بمجرد نسخ ملف zipfile إلى RPI ، قم بتسجيل الدخول إليه باعتبارك مستخدم pi.
شغّل الآن:
قم بفك ضغط rover.zip
سيؤدي هذا إلى فك ضغط الملفات إلى مجلد باسم "rover" ويحتوي على ما يلي ضمن هذا المجلد:
- restrover.py (رمز بيثون للروبوت)
- ثابت (يحتفظ بملفات الصور للأزرار الموجودة في صفحة التحكم)
- القوالب (تحتوي على ملف index.htlm ، صفحة التحكم على الويب)
إذا كنت تستخدم كاميرا ويب ، فقم بتعديل الخط بالقرب من الجزء السفلي من ملف index.html في مجلد القالب. غيّر عنوان URL في سطر IFRAME لمطابقة عنوان URL الخاص بـ src لدفق الفيديو.
الخطوة 11: بدء تشغيل الروبوت
قم بتوصيل طاقة USB بـ RPI.
لبدء رمز الروبوت ، قم بتسجيل الدخول باعتبارك مستخدم pi وقم بتشغيل:
- روفر cd
- sudo python restrover.py
إذا كان كل شيء على ما يرام ، يجب أن ترى شاشة مشابهة للصورة في هذه الخطوة
إذا رأيت أي أخطاء أو مشكلات ، فسيتعين عليك إصلاحها قبل المضي قدمًا.
الآن ، قم بتوصيل سلك GND (-) بطرف NEG (-) على مدخل طاقة محرك RoboClaw.
الخطوة 12: الوصول إلى صفحة التحكم في الروبوت
بعد تشغيل نص python الخاص بالروبوت ، قم بتشغيل RoboClaw ثم انتقل إلى عنوان IP الخاص بـ RPI مثل:
your_rpi_ip
يجب أن ترى صفحة التحكم في الويب منبثقة كما في الصور. إذا لم يكن الأمر كذلك ، فتحقق من محطة إخراج RPI وابحث عن أي أخطاء وقم بتصحيحها.
بمجرد وصولك إلى الصفحة ، تكون جاهزًا للتحكم في الروبوت.
سيبدأ الروبوت في إعداد "Med run" وبسرعة متوسطة.
يمكن التحكم في الروبوت عبر الأزرار الموجودة على الصفحة أو عن طريق المفاتيح الموجودة على لوحة المفاتيح.
المفاتيح هي:
- ث - إلى الأمام
- ض - عكس / للخلف
- أ - يسار طويل
- ق - منعطف طويل لليمين
- ف - انعطاف يسار قصير
- هـ - انعطاف يمين قصير
- 1 - عموم الكاميرا اليسرى
- 2 - عموم الكاميرا اليمنى
- 3 - عموم اليسار الكامل
- 4 - عموم يمين كامل
- / - الكاميرا الرئيسية / المركزية
- ح - وقف / إيقاف الروبوت
يوجد مخزن مؤقت للتأخير لمدة نصف ثانية بين الأوامر المرسلة. فعلت هذا للقضاء على الأوامر المتكررة غير المرغوب فيها. يمكنك بالطبع إزالة هذا من الكود إذا أردت (في index.html)
يجب أن تكون بقية الضوابط والتحكم بها تفسيرية.
الخطوة 13: كود Python / Flask
يستخدم هذا الروبوت Python وإطار عمل Flask للويب. يمكنك معرفة المزيد عن Flask هنا إذا كنت مهتمًا.
الاختلاف الكبير بين تطبيق Flask ونص Python العادي هو فئة / طريقة @ app.route المستخدمة في معالجة URI. بخلاف ذلك ، تعتبر لغة Python طبيعية إلى حد كبير في معظم الأحيان.
#! / usr / bin / env python
# # Wifi / Web مدفوعة Rover # # كتب بواسطة Scott Beasley - 2015 # # يستخدم RPIO و pyserial و Flask # استيراد تسلسل وقت الاستيراد من RPIO استيراد PWM من flask import Flask ، render_template ، طلب التطبيق = Flask (_name_ ، static_url_path = ") # اتصل بمنفذ الاتصال للتحدث إلى وحدة التحكم في محرك Roboclaw حاول: # قم بتغيير معدل البث بالباود هنا إذا كان مختلفًا عن 19200 roboclaw = serial. Serial ('/ dev / ttyAMA0'، 19200) باستثناء IOError: print ("منفذ الاتصال ليس وجدت ") sys.exit (0) # متغيرات السرعة والتحكم في القيادة last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # وضع محايد مؤازر (منزلي) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18 ، servo_pos) # توقف قليلاً عن تسوية وقت النوم. (3) # # معالجات URI - تتم جميع إجراءات صفحة البوت هنا # # أرسل صفحة التحكم في الروبوتات (الصفحة الرئيسية) @ app.route ("/") def index (): return render_template ('index.html'، name = None) @ app.route ("/ forward") def forward (): global last_direction، run_ti أنا أطبع "Forward" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # إذا لم يكن الأمر مستمرًا ، فقم بالتوقف بعد التأخير إذا كان وقت التشغيل> 0: last_direction = -1 توقف () إرجاع "موافق" @ app.route ("/ backward") def backward (): last_direction العام ، run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0.100 + run_time) # إذا لم يكن الأمر مستمرًا ، فقم بالتوقف بعد التأخير if run_time> 0: last_direction = -1 halt () إرجاع "ok" @ app.route ("/ left") def left (): global last_direction ، turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @ 1 / 2 ثانية time.sleep (0.500 - turn_tm_offset) # stop halt () time.sleep (0.100) إرجاع "ok" @ app.route ("/ right") def right (): global last_direction ، turn_tm_offset print "Right" go_right () # sleep @ 1/2 second time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) إرجاع "ok" @ app.route ("/ ltforward") def ltforward (): global last_direction، turn_t m_offset print "Left forward turn" go_left () # sleep @ 1/8 second time.sle (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) إرجاع "ok"app.route ("/ rtforward") def rtforward (): last_direction العام ، turn_tm_offset print "Right forward turn" go_right () # sleep @ 1/8 second time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) إرجاع "ok" @ app.route ("/ stop") def stop (): global last_direction print "Stop" halt () last_direction = -1 # sleep 100ms time.sleep (0.100)) إرجاع "ok" @ app.route ("/ panlt") def panlf (): servo_pos العام طباعة "Panlt" servo_pos - = 100 إذا servo_pos 2500: servo_pos = 2500 servo.set_servo (18، servo_pos) # سكون 150 مللي ثانية. sleep (0.150) إرجاع "ok" @ app.route ("/ home") def home (): servo_pos العام طباعة "Home" servo_pos = 1250 servo.set_servo (18، servo_pos) # سكون 150 مللي ثانية time.sleep (0.150) عودة "ok" @ app.route ("/ panfull_lt") def panfull_lt (): servo_pos print "Pan full l eft "servo_pos = 500 servo.set_servo (18، servo_pos) # sleep 150ms time.sleep (0.150) إرجاع" ok "@ app.route (" / panfull_rt ") def panfull_rt (): servo_pos print العمومية" Pan full right "servo_pos = 2500 servo.set_servo (18، servo_pos) # sleep 150ms time.sleep (0.150) إرجاع "ok" @ app.route ("/ speed_low") def speed_low (): global speed_offset، last_direction، turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # تحديث الاتجاه الحالي للحصول على سرعة جديدة إذا كان last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) إرجاع "ok" @ app.route ("/ speed_mid") def speed_mid (): global speed_offset، last_direction، turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # قم بتحديث الاتجاه الحالي للحصول على سرعة جديدة إذا كان last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) إرجاع "ok" @ app.route ("/ speed_hi") def speed_hi (): global speed_offset، last_direction، turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # تحديث الاتجاه الحالي للحصول على سرعة جديدة إذا كان last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) إرجاع "ok" @ app.route ("/ مستمر ") def مستمر (): وقت التشغيل العام print" Continuous run "run_time = 0 # sleep 100ms time.sleep (0.100) إرجاع" ok "@ app.route (" / mid_run ") def mid_run (): run_time global print" منتصف تشغيل "run_time = 0.750 halt () # sleep 100ms time.sleep (0.100) إرجاع" ok "@ app.route (" / short_time ") def short_time (): run_time العام طباعة" Short run "run_time = 0.300 halt () # sleep 100ms time.sleep (0.100) إرجاع "موافق" # # وظائف محرك المحرك # def go_forward (): speed_offset الشاملة if speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) if _name_ == "_main_": app.run (المضيف = '0.0.0.0' ، المنفذ = 80 ، التصحيح = صحيح)
إذا كنت لا تريد أو تحتاج إلى معلومات تصحيح الأخطاء من Flask ، فاضبط التصحيح على "خطأ" في سطر app.run.
إذا _name_ == "_main_":
app.run (المضيف = '0.0.0.0' ، المنفذ = 80 ، التصحيح = خطأ)
يمكنك أيضًا تغيير المنفذ الذي يستمع إليه خادم Flask http هنا أيضًا.
الخطوة 14: استخدام أجهزة أخرى
إذا كنت ترغب في استخدام أجهزة أخرى ، مثل نوع آخر من SBC (كمبيوتر لوحة واحدة) ، فستواجه مشكلات قليلة في تشغيل Python و Flask على لوحات أخرى مثل Beagle Bone و PCDuino وما إلى ذلك … سيتعين عليك تغيير الكود لمطابقة GPIO تخطيط واستخدام قدرات القيادة المؤازرة للوحة الجديدة.
لاستخدام برنامج تشغيل محرك من نوع آخر ، تحتاج فقط إلى تعديل وظائف go_forward ، و go_backward ، و go_left ، و go_right ، والتوقف لفعل ما يحتاجه سائق المحرك البديل لجعل المحرك يقوم بهذه الوظيفة المحددة.
موصى به:
نظام الري بالتنقيط المتحكم فيه عبر الإنترنت والمتصل (ESP32 و Blynk): 5 خطوات
نظام الري بالتنقيط المتحكم فيه عبر الإنترنت المتصل (ESP32 و Blynk): تقلق بشأن حديقتك أو نباتاتك عندما تذهب في عطلات طويلة ، أو تنسى سقي نباتك يوميًا. حسنًا ، هذا هو الحل إنه نظام ري بالتنقيط يتم التحكم فيه عن طريق رطوبة التربة ومتصل عالميًا يتم التحكم فيه بواسطة ESP32 على واجهة البرنامج i
قم ببناء روبوت دفق الفيديو المتحكم فيه عبر الإنترنت باستخدام Arduino و Raspberry Pi: 15 خطوة (بالصور)
قم ببناء روبوت دفق الفيديو المتحكم فيه عبر الإنترنت باستخدام Arduino و Raspberry Pi: أنا @ RedPhantom (المعروف أيضًا باسم LiquidCrystalDisplay / Itay) ، طالب يبلغ من العمر 14 عامًا من إسرائيل يتعلم في مدرسة Max Shein Junior High School للعلوم المتقدمة والرياضيات. أنا أصنع هذا المشروع للجميع للتعلم منه ومشاركته! قد يكون لديك
ضوء المزاج المتحكم فيه عبر WIFI: 4 خطوات (بالصور)
ضوء مزاج يتم التحكم فيه بواسطة WIFI: هذا ضوء مزاج يتم التحكم فيه بواسطة WIFI قمت بتصميمه وصنعه! قطرها 10 سم والارتفاع 19 سم ، لقد صممتها من أجل "تحدي سرعة LED STRIP". يمكن التحكم في هذا المزاج عبر الإنترنت على أي جهاز داخل شبكتك المحلية
روفر المتحكم فيه بالإيماءات باستخدام مقياس تسارع وجهاز إرسال واستقبال الترددات اللاسلكية: 4 خطوات
روفر المتحكم فيه بالإيماءات باستخدام مقياس التسارع وزوج جهاز إرسال واستقبال الترددات اللاسلكية: مرحبًا ، لقد رغبت يومًا في بناء عربة جوالة يمكنك توجيهها بإيماءات يدوية بسيطة ولكن لا يمكنك أبدًا حشد الشجاعة للمغامرة في تعقيدات معالجة الصور وتوصيل كاميرا الويب بكاميرا الويب الخاصة بك. متحكم ، ناهيك عن الصعود
NODEMCU 1.0 (ESP8266) المرحل المتحكم فيه باستخدام BLYNK (عبر الويب): 5 خطوات (بالصور)
NODEMCU 1.0 (ESP8266) مرحل خاضع للتحكم باستخدام BLYNK (عبر الويب): مرحبًا يا رفاق ، اسمي هو P STEVEN LYLE JYOTHI وهذا هو أول تدريب لي حول كيفية التحكم في التتابع بواسطة NODEMCU ESP8266-12ET عبر شبكة BLGOHOR الإنجليزية السيئة