CatOmater V1.9 – Đồ chơi laser cho mèo gắn trần/tường (IoT, Home Assistant)

CatOmater V1.9 là cơ cấu pan/tilt để gắn laser pointer, điều khiển từ xa bằng ESP8266 + ESPHome trong Home Assistant. Thiết kế dễ in 3D, chắc chắn, gắn trần/tường và có ví dụ script chạy ngẫu nhiên cho mèo rượt chấm đỏ.

👁️
3.8K
Lượt Xem
❤️
99
Lượt Thích
📥
332
Lượt Tải
Cập Nhật Apr 21, 2026
Chi tiết
Tải xuống
Bình Luận
Khoe bản in
Remix

Mô tả

30. Jan. 2024 v1.9:

  • Thêm ví dụ mới cho script có dùng biến (variables), khoảng giá trị (ranges) và giá trị ngẫu nhiên (random values).

16. Okt. 2023, V1.8:

  • Ít chi tiết và bu-lông hơn, gộp các phần lại thành một socket base mới
  • Thêm lỗ lớn hơn cho dây servo (đỡ kẹt, tăng biên độ chuyển động)
  • Thay thế toàn bộ các lỗ đi dây còn lại trên socket base

Một bản remix từ: https://www.thingiverse.com/thing:1799905

Mình thiết kế thêm các phần phụ và tìm hiểu một chút, rồi ra được bộ này. Một món đồ chơi laser cho mèo: dễ in, dễ lập trình, chắc chắn và điều khiển từ xa.

Hễ con mèo nhà mình nghe tiếng servo là nó chạy vô phòng khách kiếm chấm đỏ liền. Nghe đúng kiểu “cat automation” luôn đó chứ ;)

CatOmater của mình gắn trên trần nhà, kích hoạt bằng một nút zigbee để sẵn đâu đó.

Bước tiếp theo: dạy mèo bấm nút ;)

Bạn sẽ cần vít M2 và vài con vít nhỏ khác cho các phần của mẫu gốc vì mình không thay đổi các lỗ và phần khoét (cutouts) nguyên bản.

Bạn cần chuẩn bị:

  • 2x servo SG90
  • 1x ESP8266 (ví dụ Wemos D1 mini, vì có cổng USB kèm UART tích hợp và cũng cấp nguồn 5V)
  • Home Assistant + ESPHome Addon
  • LASERFUCHS  650nm 1mW 3-12VDC - 70103984 (laser class 2 có chứng nhận)

In 3D:

File 3MF dùng để gộp các chi tiết đã được căn sẵn đúng vị trí để in. Bật supports khi cần.

ESPHome & Homeassistant:

Mình dùng hướng dẫn này làm template: https://siytek.com/esphome-servo-example/ 

Mình tìm ra cách dùng service của ESPHome trực tiếp và dùng variables trong scripts hay hơn nhiều. (xem ví dụ script bên dưới)

Ví dụ cấu hình ESPHome:

transition_length:

  • Giá trị này xác định thời gian motor cần để đi hết hành trình từ 0%–100%. Giá trị càng cao thì tốc độ chuyển động càng chậm. 

auto_detach_time:

  • Giá trị này xác định sau bao lâu thì motor sẽ được “nhả” (released) để tránh tiếng tạch tạch khi hệ thống bật nhưng không hoạt động.

    esphome: name: cat-laser friendly_name: Cat Laser

    esp8266: board: d1_mini

    Enable logging

    logger: web_server:

    https://esphome.io/components/web_server.html

    port: 80
    local: true
    ota: true # Enable OTA

    Enable Home Assistant API

    api:

    encryption: key: ""

    services:

    • service: servo_y variables: level: float then:
      • servo.write: id: servo_y level: !lambda 'return level / 100.0;'
    • service: servo_x variables: level: float then:
      • servo.write: id: servo_x level: !lambda 'return level / 100.0;'

    ota:

    wifi:

    https://esphome.io/components/wifi.html

    ssid: !secret wifi_ssid password: !secret wifi_password

    Optional manual IP

    manual_ip: static_ip: 192.168.1.40 gateway: 192.168.1.0 subnet: 255.255.255.0

    ap: ssid: "Cat Laser Fallback Hotspot" password: ""

    captive_portal:

    output:

    • platform: esp8266_pwm id: pwm_1 pin: D5 frequency: 50 Hz
    • platform: esp8266_pwm id: pwm_2 pin: D6 frequency: 50 Hz

    servo:

    • id: servo_y output: pwm_1 transition_length: "10s" auto_detach_time: 1s
    • id: servo_x output: pwm_2 transition_length: "10s" auto_detach_time: 1s

    Example configuration entry

    switch:

    • platform: gpio pin: D7 name: "Laser Pointer" restore_mode: ALWAYS_OFF

Ví dụ scripts trong Homeassistant:
Dĩ nhiên bạn cần chỉnh lại các giá trị cho phù hợp, nhưng ví dụ này sẽ giúp bạn hình dung cách tự động hóa các pattern (giờ có variables).

Xem cách dùng variables, ranges, random values và gọi thẳng ESPHome services.

Về vị trí park và tắt laser

alias: Cat Laser - Park position
sequence:
 - service: switch.turn_off
   data: {}
   target:
     entity_id: switch.cat_laser_laser_pointer
 - variables:
     park_x: -25
     park_y: 75
 - service: esphome.cat_laser_servo_x
   data:
      level: "{{ park_x }}"
 - service: esphome.cat_laser_servo_y
   data:
      level: "{{ park_y }}"
mode: single
icon: mdi:cat

Laser di chuyển ngẫu nhiên trong các tọa độ đã định nghĩa (ví dụ mới).

Đây chỉ là ví dụ. Bạn phải tự đặt giá trị trong lệnh range(min, max) theo vùng x/y bạn muốn!

Giá trị có thể nằm trong khoảng -100 đến 100. Mình dùng các giá trị này cho một khu vực nhỏ để mèo mình đuổi theo tia laser.

Ví dụ này sẽ làm:

  • Bật laser

  • Di chuyển tới một vị trí x/y ngẫu nhiên trong phạm vi (range)

  • Chờ 500ms (delay)

  • Lặp lại

  • Dừng sau 500 lần di chuyển x/y (count: 500)

  • Tắt laser

    alias: Cat Laser - Chase random sequence:

    • service: switch.turn_on data: {} target: entity_id: switch.cat_laser_laser_pointer
    • repeat: sequence:
      • service: esphome.cat_laser_servo_x data: level: "{{ range(-68, 13) | random |int}}"
      • service: esphome.cat_laser_servo_y data: level: "{{ range(5, 22) | random |int}}"
      • delay: hours: 0 minutes: 0 seconds: 0 milliseconds: 500 count: 500
    • service: switch.turn_off target: entity_id:
      • switch.cat_laser_laser_pointer data: {} mode: single icon: mdi:cat

Giấy phép

Tác phẩm này được cấp phép theo

Creative Commons — Attribution — Noncommercial

CC-BY-NC

Yêu cầu ghi công
Remix & phái sinh Được phép
Sử dụng thương mại Không được phép

File mô hình

TẤT CẢ FILE MÔ HÌNH (2 Tập tin)
Đang tải files, vui lòng chờ...
Vui lòng đăng nhập để bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Vui lòng đăng nhập để khoe bản in của bạn.

Chưa có bản in nào được khoe. Hãy là người đầu tiên!

Remix (0)