Ventilador para zwift con alice

Hola. Quiero disculparme de antemano por las torpes soluciones, el c贸digo y la mano de obra. En primer lugar, tengo las manos muy torcidas y, en segundo lugar, trato de hacerlo con el m铆nimo esfuerzo y de lo que tengo a mano, lo principal es que funciona de manera estable y realiza las funciones necesarias.



Prop贸sito: Entreno regularmente en bicicleta, y en invierno, los entrenamientos se realizan en casa en un portabicicletas (por cierto, tambi茅n lo tengo casero, y esa es otra historia), casi todos los que entrena as铆 usan un ventilador para soplar.



Tengo este, uno simple para exteriores con tres botones de velocidad.







He encontrado su esquema:





.

Como no tengo experiencia con motores as铆ncronos y lo que suceder谩 cuando dos devanados diferentes se enciendan simult谩neamente al mismo tiempo, decid铆 no correr riesgos y no permitir esto, as铆 que conect茅 el rel茅 de la siguiente manera:







un rel茅 enciende el ventilador, el segundo cambia las velocidades.



Resulta que utilizo dos velocidades, la primera y la tercera, y sigue siendo posible utilizar el ventilador en modo manual a la segunda velocidad.



El bloque de rel茅s us贸 lo siguiente:







El controlador us贸 el ESP8266: lo estaba







flasheando en el IDE de Arduino.



El c贸digo m谩s simple:



#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();
}


Lo principal es obtener su c贸digo char auth [] = "Aqu铆 est谩 su c贸digo de autorizaci贸n que ser谩 enviado al correo despu茅s de registrarse en Blynk";

para controlar, puede usar los enlaces

blynk-cloud.com 'su autorizaci贸n de c贸digo' / update / V1? value = 1 para deshabilitar el primer rel茅

blynk-cloud.com 'su autorizaci贸n de c贸digo' / update / V1? value = 0 para habilitar el primer rel茅 de

manera similar para el segundo

blynk- cloud.com 'su c贸digo de autorizaci贸n' / actualizaci贸n / V2? value = 1 blynk-cloud.com 'su c贸digo de autorizaci贸n' / update / V2? value = 0



Inicialmente, us茅 este dispositivo y varios m谩s en casa para controlar f谩cilmente varios dispositivos a trav茅s de Internet. Adem谩s, estos enlaces se pueden utilizar con Alice a trav茅s de la habilidad "Brownie Kuzya" funciona correctamente para habilitar y deshabilitar varios dispositivos.



Resulta que si se detiene en este nivel, puede hacer un enchufe inteligente con una alicia a un costo de 250 rublos por piezas y habr谩 2 canales y tambi茅n habr谩 un mont贸n de conclusiones gratuitas sobre el MK.



Seguimos m谩s lejos. El ventilador funciona, se enciende, se apaga, etc. pero quer铆a a煤n m谩s automatizaci贸n. Inicialmente, pens茅 en la direcci贸n de recibir datos directamente en el microcontrolador desde el sensor de potencia. Incluso comenc茅 a estudiar el protocolo ANT +, pero surgieron dificultades con el m贸dulo ANT +, parecen estar en oferta, pero algunos son costosos, hasta que pude comprar y luego tropec茅 accidentalmente con una aplicaci贸n de python de cliente zwift que puede recibir datos de mi cuenta. Para instalar $ pip install zwift-client, le铆 un poco sobre Python y aprend铆 a leer mis datos, escrib铆 un peque帽o script:



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)


Lee mis datos y cuando comienza el movimiento, el ventilador se enciende, y cuando la potencia es superior a 185 W, se enciende una velocidad aumentada.



En principio, como todo. De hecho, la soluci贸n est谩 inconclusa, a煤n quedan un mont贸n de ideas para su posterior desarrollo y para el juego (cambiar la velocidad del ventilador cuando ingresa al draft) y la idea de mostrar informaci贸n sobre sus par谩metros, velocidad de cadencia de potencia en palas giratorias, controlar este y otros dispositivos directamente desde el reloj, etc. .re. nunca habr谩 un final.



All Articles