CHCNAV フリスクスイッチで自動操舵ON OFF

注意点について動画で説明していますので、使用については自己責任でお願いします。

CHCNAVのバージョンアップでフリスクスイッチがスムーズに使えるようになりました。
フリスクスイッチの作製手順について説明しています。

ファームウエアをダウンロード

https://circuitpython.org/board/raspberry_pi_pico/

24/11/18追記
フリスクスイッチには最新バージョンでは動作しないようです。
バージョン8.xを使用して下さい。
旧バージョンはこちら
https://adafruit-circuit-python.s3.amazonaws.com/index.html?prefix=bin/raspberry_pi_pico/ja/
この中の
adafruit-circuitpython-raspberry_pi_pico-ja-8.2.9.uf2
を使用して下さい。

MuEditorのダウンロード

https://codewith.mu/en/download

CircuitPython用HIDライブラリをダウンロード

https://circuitpython.org/libraries

プログラムコード

import time, board, digitalio, usb_hid
from adafruit_hid.mouse import Mouse

# GPO0,GPO1ピンを入力に設定します
tactA = digitalio.DigitalInOut(board.GP0)
tactA.switch_to_input(pull=digitalio.Pull.DOWN)

tactB = digitalio.DigitalInOut(board.GP1)
tactB.switch_to_input(pull=digitalio.Pull.DOWN)

# キーボード・マウスのオブジェクトを作成します
mouse    = Mouse(usb_hid.devices)

# 前回値用の変数を初期化します。
beforeA = 0
beforeB = 0

time.sleep(15)                                            #15秒待ちます
mouse.move(238,150)                             #カーソルを自動操舵ONOFFアイコンの場所に移動します

while True:

    # タクトスイッチA,Bが押されているか取得
    nowA = tactA.value
    nowB = tactB.value

    # タクトスイッチAが押された(立ち上がり)
    if nowA == 1 and beforeA == 0:
        mouse.click(Mouse.LEFT_BUTTON)

    # タクトスイッチBが押された(立ち上がり)
    if nowB == 1 and beforeB == 0:
        mouse.move(0,-90)                           #カーソルを塗りつぶしボタンに移動
        mouse.click(Mouse.LEFT_BUTTON)
        time.sleep(1)
        mouse.move(0,90)                             #カーソルを自動操舵ONOFFアイコンに戻す

    # 前回値として現在のスイッチの状態を保存します。
    beforeA = nowA
    beforeB = nowB
time.sleep(15)

CHCNAVがフリスクスイッチを認識するまでのタイムラグの設定

10〜15秒で設定します。

mouse.move(0,-90)

座標の値を変えると、任意のボタンに移動させる事が出来ます。

例えばオートターンであれば、(-90,0)等に変更。

time.sleep(1)

次の行のコードを確実に実行させるための設定。

mouse.move(0,90)  

カーソルを移動させた分戻して、自動操舵ONOFFアイコンに移動します。

スイッチ回路図

マルチコアボードモジュール,RP2040-Zero

https://ja.aliexpress.com/item/1005005504313845.html

押しボタンスイッチ キャップ カバー付き

https://amzn.to/3UuDnGI

ユニバーサル基板

https://amzn.to/3w4MC6D

はんだメッキ線 0.6mm

https://amzn.to/3SvFN5r

参考URL

Adafruit HID ライブラリ

https://docs.circuitpython.org/projects/hid/en/latest/

CircuitPython「ディスクの不正な取り出し」の対処法

https://gadget-nest.com/raspberry-pi-pico_circuitpython/

検証はしていませんので、自己責任での使用をお願いします。
import time, board, digitalio, usb_hid
from adafruit_hid.mouse import Mouse

def move_and_click(mouse, x, y, click=True):
    mouse.move(x, y)
    if click:
        mouse.click(Mouse.LEFT_BUTTON)
    time.sleep(1)

tact_pins = [board.GP0, board.GP1, board.GP3, board.GP4, board.GP5, board.GP6]
tact_switches = [digitalio.DigitalInOut(pin) for pin in tact_pins]
for tact in tact_switches:
    tact.switch_to_input(pull=digitalio.Pull.DOWN)

mouse = Mouse(usb_hid.devices)

time.sleep(15)
move_and_click(mouse, 238, 150, click=False)

before_states = [0] * len(tact_pins)

while True:
    for i, tact in enumerate(tact_switches):
        now_state = tact.value
        before_state = before_states[i]

        if now_state == 1 and before_state == 0:
            if i == 0:
                move_and_click(mouse, 0, 0)
            elif i == 1:
                move_and_click(mouse, 0, -90)
                move_and_click(mouse, 0, 90, click=False)
            elif i == 2:
                move_and_click(mouse, -110, 0)
                move_and_click(mouse, 110, 0, click=False)
            elif i == 3:
                move_and_click(mouse, -155, 0)
                move_and_click(mouse, 155, 0, click=False)
            elif i == 4:
                move_and_click(mouse, -400, -90)
                move_and_click(mouse, 400, 90, click=False)
            elif i == 5:
                move_and_click(mouse, -210, -110)
                move_and_click(mouse, 210, 110, click=False)    

        before_states[i] = now_state
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

この記事の著者

momo

1966年訓子府町生まれの訓子府育ち。玉葱や米、メロンを栽培する農家です。一眼レフを本格的に始めたのは2005年。仕事の時でもいつでもカメラを持ち歩く自称農場カメラマン。普段の生活を撮るのが主で、その他ストロボを使っての商品撮影、スタジオ撮影も。愛好家グループで年1回写真展を行っている。農機具の改造や作製、電子工作など、モノづくりが大好きです。

この著者の最新の記事

関連記事

コメント

    • 寺田 昭
    • 2024年 3月 21日

    こんばんは
    YouTube の動画いつも参考になりありがとうございます。
    自前のRTK基準局で以前質問しておせわになりました。
    最終的にジオセンスさんの基盤を購入し、Ntripキャスターを使用させて頂きミニPCで稼働しています。
    私は東京からUターンして佐賀県で8年前からアスパラガスの栽培しています、兄・近隣の米麦農家さんの複数のCHCVで使用してもらってます。

    今回のフリスクスイッチも依頼がありRP2040-Zeroを入手して作成中です。
    SWが2個以上の場合【自動操舵ON/OFF】【A/B】オートターン【左】・【右】【塗りつぶし】など
    GP0・1・2・3・5に配線してプログラムに追加したつもりですがカーソルが【自動操舵】に戻りません。

    当方、サラリーマン時代は理化学機器のサービスマンで電子工作とWindowsPCは大丈夫ですがこのソフトは素人です。
    いろいろプログラムを書き換えて試してはいるのですがCHCNAVが手元にないので時間がかかります。
    プログラムのおすすめの参考書などがあれば教えてください。

    よろしくお願いいたします。

      • toru
      • 2024年 3月 21日

      コメントありがとうございます。
      カーソルが戻らないとの事でひとつ確認ですが、カーソルに戻す前のプログラムはどのようにされていますか?
      プログラムコード36行目
      time.sleep(1)

      これを入れて一呼吸置かないと、カーソルは途中半端なところまでしか戻りません。
      参考文献についてはリンク先載せておきますので、よろしくお願いします。

        • 寺田 昭
        • 2024年 3月 21日

        お世話になります。

        お忙しい中対応いただきありがとうございます。

        こちらにプログラムをコピーペーストできないみたいですね。
        どこが間違っているかご教授いただきたかったのですが。

        time.sleep(1) は入れています。
        例えばBボタンを押した後一呼吸とは数秒でよろしいでしょうか?

        自動操舵ON/OFFの座標を起点としてそこから座標を動かしてまた戻すようになってると思いますが
        各ボタンを押してその都度直接そのアイコンにカーソールを持っていきクリックする事ができればよいのですが。

        参考文献もありがとうございます、4月中旬ころには多少時間が取れるとおもいますので勉強します。

          • momo
          • 2024年 3月 22日

          time.sleepの使い方はそれで合ってます。
          それと自動操舵ボタンに戻らない原因として考えられるのは、
          移動先に画面外の座標を指定してしまうとカーソルは画面内にしか移動出来ないため、
          戻る座標とのズレが生じてしまい、元に戻らなくなってしまいますが、そのような事は考えられないでしょうか?
          自動操舵ボタン位置にあるカーソルから、X軸-238 Y軸-150を超える座標を指定すると、自動操舵に戻らなくなります。

          各ボタンを押してその都度直接そのアイコンにカーソールを持っていきクリックするためには、
          カーソルの現在地座標を求めるか、次にクリックしたいアイコンの絶対座標を指定する等考えられますが、HIDライブラリにはそのようなコードは見当たらないです。
          その他の方法としては意図的に画面外の座標を指定してカーソルを画面四隅のどこかに持っていき、
          そこを始点として任意のボタンに持っていけばクリック出来るのではないかと思います。

          一応スケッチ例を載せておきましたので、よければ参考にして下さい。
          CHCNAVのオートターンに使えるかの検証はしていませんので、その点についてはご了承下さい。

            • 寺田
            • 2024年 3月 23日

            こんばんは

            3ボタン以上のプログラムありがとうございます。

            【A/B】アイコンの座標が間違っていたんだと思います、右上部にカーソルがみえていました。
            CHCNAVの最新Verでは左右のオートターンになり5ボタンを作成する事になりそうです。

            自動ON/OFFのアイコンを起点として各アイコンの座標はどのようにもとめられましたか?
            質問ばかりで申し訳ございません。

            4ボタンのSWは作成済なので早速試してみます。
            Aボタン:自動ON/OFF
            Bボタン:塗りつぶし
            CDボタン:オートターン左右

            • momo
            • 2024年 3月 23日

            お疲れ様です。

            使えるようになったようで良かったです。
            座標はCHCNAVで実際試しながら微調整して決めています。
            よろしくお願いします。

            • 寺田
            • 2024年 3月 24日

            お忙しい中いろいろありがとうございます。

            これからも動画など楽しみにしています。
            今後ともよろしくお願いいたします。

  1. この記事へのトラックバックはありません。

2024年11月
 123
45678910
11121314151617
18192021222324
252627282930  

カテゴリー

ページ上部へ戻る