مروحة ل zwift مع أليس

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



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



لدي هذا ، زر خارجي بسيط به ثلاثة أزرار للسرعة.







لقد وجدت مخططه:





.

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







مرحل واحد يعمل على المروحة ، والثاني يعمل على تبديل السرعات.



اتضح أنني أستخدم سرعتين ، الأولى والثالثة ، ويبقى من الممكن استخدام المروحة في الوضع اليدوي بالسرعة الثانية.



استخدمت كتلة الترحيل ما يلي:







استخدمت وحدة التحكم ESP8266: كنت تومضها







في Arduino IDE.



أبسط كود:



#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#define OUTPUT1  5
#define OUTPUT2  0


char auth[] = "           Blynk";

char ssid[] = "    ";
char pass[] = "    ";

BLYNK_WRITE(V1)
{
  int pinValue = param.asInt(); // assigning incoming value from pin V1 to a variable
digitalWrite(OUTPUT1, pinValue);
  // process received value
}
BLYNK_WRITE(V2)
{
  int pinValue = param.asInt();
  digitalWrite(OUTPUT2, pinValue);
}

void setup()
{

pinMode(OUTPUT1, OUTPUT);
pinMode(OUTPUT2, OUTPUT);
digitalWrite(OUTPUT1, HIGH );
digitalWrite(OUTPUT2, HIGH );

  Blynk.begin(auth, ssid, pass);
  // You can also specify server:

}

void loop()
{
  Blynk.run();
}


الشيء الرئيسي هو الحصول على رمز char auth [] = "هذا هو رمز التفويض الخاص بك الذي سيتم إرساله إلى البريد بعد التسجيل في Blynk" ؛

للتحكم ، يمكنك استخدام الروابط

blynk-cloud.com "تفويض الكود الخاص بك" / update / V1؟ value = 1 لتعطيل التتابع الأول

blynk-cloud.com "تفويض الكود" / update / V1؟ value = 0 لتمكين الترحيل الأول

بالمثل للثاني

blynk- cloud.com "رمز التفويض الخاص بك" / update / V2؟ value = 1 blynk-cloud.com "رمز التفويض الخاص بك" / update / V2؟ value = 0



في البداية ، استخدمت هذا الجهاز والعديد من الأجهزة الأخرى في المنزل للتحكم البسيط في الأجهزة المختلفة عبر الإنترنت. أيضًا ، يمكن استخدام هذه الروابط مع أليس من خلال مهارة "Brownie Kuzya" التي تعمل بشكل صحيح لتمكين وتعطيل الأجهزة المختلفة.



اتضح أنه إذا توقفت عند هذا المستوى ، يمكنك عمل مقبس ذكي مع أليس بتكلفة 250 روبل للأجزاء وستكون هناك قناتان فيه وستكون هناك أيضًا مجموعة من الاستنتاجات المجانية على MK.



نواصل أكثر. يتم تشغيل المروحة وتشغيلها وإيقاف تشغيلها ، إلخ. لكنني أردت المزيد من الأتمتة. في البداية ، فكرت في اتجاه تلقي البيانات مباشرة في وحدة التحكم الدقيقة من مستشعر الطاقة. حتى أنني بدأت في دراسة بروتوكول ANT + ، ولكن ظهرت صعوبات مع وحدة ANT + ، يبدو أنها معروضة للبيع ، لكن بعضها باهظ الثمن ، حتى حصلت على يدي على الشراء ، ثم عثرت بطريق الخطأ على تطبيق zwift-client python يمكنه تلقي البيانات من حسابي. لتثبيت $ pip install zwift-client ، قرأت القليل عن لغة python وتعلمت كيفية قراءة بياناتي ، وكتبت نصًا صغيرًا:



import time
import requests
from zwift import Client
username = '  '
password = ' '
player_id =    

client = Client(username, password)
world = client.get_world(1)
world.player_status(player_id)
i=1
change1=1
change2=1
powVKL=185

venrabota0='https://blynk-cloud.com//update/V1?value=1'
venspeed0='https://blynk-cloud.com//update/V1?value=0'
venrabota1='https://blynk-cloud.com//update/V2?value=0'
venspeed1='https://blynk-cloud.com//update/V2?value=1'
requests.get(venrabota0, verify=False)
requests.get(venspeed0, verify=False)
print(' ')   
while i<10:
    poweruser=world.player_status(player_id).power
    cadenceuser=world.player_status(player_id).cadence
    heartrateuser=world.player_status(player_id).heartrate
    speeduser=world.player_status(player_id).speed//1000000
    print(': '+str(poweruser))
    print(': '+str(cadenceuser))
    print(': '+str(heartrateuser))
    print(': '+str(speeduser))
    
    if change1==1 and speeduser>1: 
        requests.get(venrabota1, verify=False)
        change1=0
    if change1==0 and speeduser<1: 
        requests.get(venrabota0, verify=False)
        change1=1   
        
    if change2==1 and poweruser>powVKL: 
        requests.get(venspeed1, verify=False)
        change2=0
    if change2==0 and poweruser<=powVKL: 
        requests.get(venspeed0, verify=False)
        change2=1   
            
    time.sleep(1) # Delay for 1 minute (60 seconds)


إنها تقرأ بياناتي وعندما تبدأ الحركة ، يتم تشغيل المروحة ، وعندما تزيد الطاقة عن 185 واط ، يتم تشغيل السرعة المتزايدة.



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



All Articles