サイボーグカエル制作ログ

死んだカエルを電気で動かす、サイボーグカエルを作りました。

そもそも死んでいるのでサイボーグと言っていいのかはわかりませんが…….

カエルは解剖用として販売されているものを入手して改造しています。

この手の電気刺激で生物をコントロールするものだと、ゴキブリとかの昆虫が有名です。

特に、昆虫は生きた状態で触角とかを刺激してコントロールするわけですが、生きたカエルで同様のことをするのはやりたくなかったので死んだカエルを使っています。

回路について

回路は基本的な構成は表情コントロールデバイスで使ったものと同じです。

ESP32-S3-WROOM-1-N16R8をコアに採用していて、無線でコントロールできるようにしています。

回路図です↓

LiPo 1cellを電源として使用します。

電極は針で刺しているんですが、電気抵抗が低いためか3.3Vで十分筋肉を動かせます。

本来筋肉を動かすには高電圧は必要ないのですが、表皮等を介して奥深くの筋肉を動かすには、12Vとかが必要になってきます。

カエルは体も小さいし、針で直接筋肉にアクセスできるので3.3Vでも行ける模様です。

基板外観

ソフトウェアについて

githubにてMITライセンスで公開しています。

https://github.com/maHidaka/cyborg-flog

platformIOベースで開発しています。

ArduinoIDEを使いたい人はライブラリを用意してsrcをコピペすれば行けるはずです。

コマンドを送る部分については、UDPで適当なテキストを送信できるツールを使えば何でも使えます。

今回、私はNintendo Switchのコントローラを接続してトリガースイッチの入力を受け付けるpythonプログラムを作成しました。

一応載せておきます。

import pygame
import socket

# Pygameの初期化
pygame.init()

# ジョイスティックの初期化
pygame.joystick.init()

# Joy-Conの接続状態を確認
joycon_left = None
joycon_right = None

for i in range(pygame.joystick.get_count()):
    joystick = pygame.joystick.Joystick(i)
    joystick.init()
    if "Joy-Con (L)" in joystick.get_name():
        joycon_left = joystick
    elif "Joy-Con (R)" in joystick.get_name():
        joycon_right = joystick

if joycon_left is None or joycon_right is None:
    print("Joy-Conの接続エラー")
    pygame.quit()
    exit()

# UDPソケットの設定
UDP_IP = "192.168.2.100"
UDP_PORT = 1234
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:
    for event in pygame.event.get():
        if event.type == pygame.JOYBUTTONDOWN:
            # ボタンの押下を検出
            if event.joy == joycon_left.get_id():
                # 左Joy-Conの入力を処理
                if event.button == 14:
                    message = "LEFT"
                    sock.sendto(message.encode(), (UDP_IP, UDP_PORT))
                    print("Send LEFT")

            elif event.joy == joycon_right.get_id():
                # 右Joy-Conの入力を処理
                if event.button == 14:
                    message = "RIGHT"
                    sock.sendto(message.encode(), (UDP_IP, UDP_PORT))
                    print("Send RIGHT")


# Pygameの終了処理
pygame.quit()

handaru

handaru.net

handaru(はんだる)です。 工作が趣味です。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です