Ventilador para zwift com Alice

Olá. Quero pedir desculpas antecipadamente pelas soluções, código e mão de obra desajeitadas. Em primeiro lugar, tenho as mãos muito tortas e, em segundo lugar, procuro fazê-lo com o mínimo esforço e pelo que tenho à mão - o principal é que funcione de forma estável e desempenhe as funções necessárias.



Objetivo: treino regularmente de bicicleta, e no inverno os treinos são feitos em casa em bicicletário (aliás, também tenho feito em casa, e isso é outra história), quase todo mundo que treina assim usa um ventilador para soprar.



Eu tenho este, um simples outdoor com três botões de velocidade.







Eu encontrei seu esquema:





.

Como não tenho experiência com motores assíncronos e com o que acontecerá quando dois enrolamentos diferentes forem ligados simultaneamente ao mesmo tempo, decidi não correr riscos e não permitir isso, então conectei o relé da seguinte maneira:







Um relé liga o ventilador, o segundo muda a velocidade.



Acontece que eu uso duas velocidades, a primeira e a terceira, e continua sendo possível usar o ventilador no modo manual na segunda velocidade.



O bloco de retransmissão usou o seguinte:







O controlador usou o ESP8266:







Flashed no IDE do Arduino.



O código mais simples:



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


O principal é obter o seu código char auth [] = "Aqui está o seu código de autorização que será enviado para o correio após o registo no Blynk";

para controlar, você pode usar os links

blynk-cloud.com 'seu código de autorização' / update / V1? valor = 1 para desabilitar o primeiro relé

blynk-cloud.com 'seu código de autorização' / update / V1? valor = 0 para habilitar o primeiro relé da

mesma forma para o segundo

blynk- cloud.com 'seu código de autorização' / update / V2? value = 1 blynk-cloud.com 'seu código de autorização' / update / V2? value = 0



Inicialmente, usei este dispositivo e vários outros em casa para controle simples de vários dispositivos via Internet. Além disso, esses links podem ser usados ​​com Alice através da habilidade "Brownie Kuzya" funciona corretamente para habilitar e desabilitar vários dispositivos.



Acontece que se você parar neste nível, você pode fazer um soquete inteligente com uma Alice a um custo de 250 rublos por peças e haverá 2 canais nele e também haverá um monte de conclusões gratuitas sobre o MK.



Nós continuamos adiante. O ventilador funciona, liga, desliga, etc. mas eu queria ainda mais automação. Inicialmente, pensei no sentido de receber dados diretamente no microcontrolador do sensor de potência. Eu até comecei a estudar o protocolo ANT +, mas surgiram dificuldades com o módulo ANT +, eles parecem estar à venda, mas alguns são caros, até que minhas mãos alcançaram a compra, e então tropecei acidentalmente em um aplicativo python cliente zwift que pode receber dados de minha conta. Para instalar $ pip install zwift-client, li um pouco sobre python e aprendi como ler meus dados, escrevi um pequeno 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)


Ele lê meus dados e quando o movimento começa, a ventoinha liga, e quando a potência é superior a 185 W, uma velocidade aumentada é ligada.



Em princípio, como tudo. Na verdade, a solução está inacabada, ainda há um monte de ideias para o seu desenvolvimento posterior e para o jogo (mudar a velocidade do ventilador ao entrar no draft) e a ideia de exibir informações sobre seus parâmetros, velocidade de cadência de potência em pás giratórias, controlar este e outros dispositivos diretamente do relógio, etc. .d. nunca haverá um fim.



All Articles