Realizziamo un giroscopio in Home Assistant con ESPHome

In questo articolo vediamo come realizzare un semplice giroscopio su Home Assistant con ESPHome, dove si può utilizzare? Un’ esempio potrebbe essere monitorare se ci sono scosse telluriche. Vediamo cosa occorre per questo semplice progetto.

Dopo esserci procurato tutto il materiale, vediamo come sono collegamento tra la schedina Mini D1 o NodeMCU e in sensore MPU-6050.

Per primo facciamo i collegamenti tra il MiniD1 e il sensore MPU-6050 come da schema.

Dopo aver fatto tutti i collegamenti passiamo al codice. Apriamo il nostro Home Assistant, e creiamo un nuovo progetto con ESPHome, Mi raccomando far funzionare il progetto, scegliamo la schedina che abbiamo preso, altrimenti si rischia che non funzioni. Il codice in questione ve lo lascio qui sotto come esempio, sta voi a fare ulteriori modifiche personalizzarlo a vostro piacimento.

i2c:
  sda: D1
  scl: D2
  scan: true
  id: bus_a

sensor:
  - platform: mpu6050
    address: 0x68
    accel_x:
      id: accel_x
      name: "accel X"
      filters:
         - sliding_window_moving_average:
            window_size: 5
            send_every: 1
         - delta: 0.5
    accel_y:
      id: accel_y    
      name: "accel Y"
      filters:
         - sliding_window_moving_average:
            window_size: 4
            send_every: 1   
         - delta: 0.5            
    accel_z:
      id: accel_z    
      name: "accel z"
      filters:
         - sliding_window_moving_average:
            window_size: 4
            send_every: 1   
         - delta: 0.5            
    gyro_x:
      name: "gyro X"
      filters:
         - sliding_window_moving_average:
            window_size: 4
            send_every: 1   
         - delta: 0.5            
    gyro_y:
      name: "gyro Y"
      filters:
         - sliding_window_moving_average:
            window_size: 4
            send_every: 1     
         - delta: 0.5            
    gyro_z:
      name: "gyro z"
      filters:
         - sliding_window_moving_average:
            window_size: 4
            send_every: 1      
         - delta: 0.5            
    temperature:
      name: "MPU6050 Temperature"
    update_interval: 1.5s
  - platform: template
    id: roll
    name: pan1roll
    accuracy_decimals: 2
    lambda: |-
      return  (atan( id(accel_y).state / sqrt( pow( id(accel_x).state , 2) + pow( id(accel_z).state , 2) ) ) * 180 / PI) ;
    update_interval: 250ms

  - platform: template
    id: pitch
    name: pan1pitch
    accuracy_decimals: 2
    lambda: |-
      return  (atan(-1 * id(accel_x).state / sqrt(pow(id(accel_y).state, 2) + pow(id(accel_z).state, 2))) * 180 / PI);
    update_interval: 250ms

Una volta che abbiamo caricato il programma dovreste avere questo, vi ricordo che potete personalizzarlo a vostro piacere.

Qui sotto vi lascio i link dove recuperare tutto il necessario, cliccando sul link mi aiutate a sostenere i costi, a voi non cambia nulla . a me mi date un piccoli sostegno

Test Giroscopio su Home Assistant

Ora continuiamo con questo piccolo progettino sempre de giroscopio solo che questa volta, metteremo un piccolo dispaly lcd (128×32) per vedere sul display dove si trova posizionato il nostro giroscopio. (AVANTI,INDIETRO, FERMO,DESTRA,SINISTRA) Comunque è personalizzabile a nostro piacimento. qui sotto il codice di esempio.

captive_portal:

i2c:
  sda: D2
  scl: D1
  scan: true

# Configurazione del sensore MPU-6050
sensor:
  - platform: mpu6050
    address: 0x68
    accel_x:
      name: "Accelerazione X"
      id: accel_x
      on_value:
        then:
          - lambda: |-
              id(update_direction).execute();
    accel_y:
      name: "Accelerazione Y"
      id: accel_y
      on_value:
        then:
          - lambda: |-
              id(update_direction).execute();
    accel_z:
      name: "Accelerazione Z"
      id: accel_z
    update_interval: 0.1s

# Funzione lambda per aggiornare la direzione
globals:
  - id: last_direction
    type: std::string
    initial_value: '"Unknown"'

script:
  - id: update_direction
    mode: queued
    then:
      - lambda: |-
          std::string current_direction = "Unknown";
          float x = id(accel_x).state;
          float y = id(accel_y).state;

          if (x > 1.0) {
            current_direction = "Destra";
          } else if (x < -1.0) {
            current_direction = "Sinistra";
          } else if (y > 1.0) {
            current_direction = "Avanti";
          } else if (y < -1.0) {
            current_direction = "Indietro";
          } else {
            current_direction = "Fermo";
          }

          if (current_direction != id(last_direction)) {
            id(oled_display).print(0, 0, id(font_small), current_direction.c_str());
            id(last_direction) = current_direction;
          }

# Configurazione Display OLED SSD1306
display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    reset_pin: 0
    address: 0x3c
    update_interval: 3s
    id: oled_display
    lambda: |-
      it.printf(0, 20, id(font_small), TextAlign::BASELINE_LEFT, "Direzione:");
      it.printf(0, 60, id(font_large), TextAlign::BASELINE_LEFT, "%s", id(last_direction).c_str());

# Font per l'OLED
font:
  - file: "font/arial.ttf"
    id: font_small
    size: 20
  - file: "font/arial.ttf"
    id: font_large
    size: 25
PER CHI UTILIZZA YOUTUBE
VIDEO PER CHI USA TIKTOK