京のCPUをぽちったので確定申告やってみる

京のCPU

ぽちっちゃった

募集特定寄附金 | 理化学研究所

計算科学研究を支援するための寄附金の募集をはじめました | 理化学研究所 計算科学研究センター(R-CCS)

税法上の優遇措置について

税法上の優遇措置について
理化学研究所への寄附金は、確定申告を行うことで、国税所得税又は法人税)及び地方税(個人住民税)について、税法上の優遇措置を受けることができます。

やっていくぞ。

確定申告チャレンジ

「確定申告」でぐぐって一番最初に出てきた 所得税の確定申告|国税庁
リンクから作成ページに 令和2年分 確定申告特集

f:id:Fluorite36:20210314235941p:plain

寄附金控除を受けるに、はい f:id:Fluorite36:20210315000240p:plain

  • 公益社団法人又は公益財団法人等に関する寄附金
  • 条例により指定しているかは住所地によって異なるので合わせてチェック
  • 寄附金の金額を入れる
  • 寄附先の所在地、名称を入れる f:id:Fluorite36:20210315000439p:plain

できた。 f:id:Fluorite36:20210314235917p:plain

その他

今回確定申告をしなければいけなかったので、ふるさと納税のワンストップ申請ができなかった。同じく寄附金としてプルダウンでふるさと納税を選んで入力した。

無事確定申告できてよかった。

プルリクをやってみた

サンプルコードのバグを見つけたので、修正を取り込んでもらうプルリクを送ってみたメモ(ポエム)。

 

docs.github.com

これ見ながらやったらできた。

 

フォークして、修正して、コミット、プッシュして、

フォークからプルリクエストをつくる。

 

思っていたより簡単だった。

またバグを見つけたらやってみたい。

 

まだプルリク送っただけだけど。

rosserialでIO操作する

はじめに

ROSのノード間通信をシリアル通信越しに行なうためのプロトコルが、rosserialです。このArduino向けの実装がrosserial_arduinoです。(初めて名前見たときは、ROSで直接シリアル通信をするパッケージだと勝手に思い込んでいました。) これを使ってROSからArduino UNOのIOを動かして、ロボに指令を送ったり状態を読んだりするプログラムを書きました。ふと思い立ったので公開しようと思います。

github.com

こんな感じのことができるようになります。

動作を確認した環境は、Ubuntu16.04 ROS 1 Kinetic Kameです。

今更感がすごいのですが、ふと前に書いてたことを思い出したのと、その時にサンプルが少なくて困ったのを思い出して公開しようと思いました。 新しい環境でも動くか試して記事を更新したい。

rosserial

環境構築については最新の情報をこちらから rosserial_arduino/Tutorials - ROS Wiki

rosserial_なんたら という名前のものがたくさんあったりしてややこしくて混乱して調べたメモです。 間違っていたらご指摘お願いいたします。

名前 内容
rosserial ROSのノード間通信をシリアル通信越しに行なうためのプロトコル(決めごと)。rosserial - ROS Wiki
rosserial_client rosserialのプロトコルで通信するためのマイコン(クライアント)側のライブラリ。rosserial_client - ROS Wiki
rosserial_arduino rosserial_clientをArduinoで使えるようにするROSパッケージ。その中のArduinoライブラリがros_lib。rosserial_arduino - ROS Wiki
rosserial_python PC(ホスト)側のROSパッケージ。Python実装版。rosserial_python - ROS Wiki
serial_node rosserial_pythonのノード。このノード越しにマイコンと通信する。他のノードとノード間通信をして、マイコンの面倒もみる。pyserialでマイコンとシリアル通信をして、もらったメッセージをマイコンに送ったり、マイコンから受け取ったメッセージを別のノードに送ったりする。これにより、ノード間通信をする感覚で、マイコンと通信できる。
xx.ino いつものArduinoのコード。rosserialプロトコルを使うためのros_libライブラリから必要なものをインクルードして、どういったROSメッセージをやりとりするのかを追記する。

名前がわかりづらいので、rosserial_host_hogehoge、rosserial_client_hogehogeみたいな名前にならないかしら←

rosserialでIO操作するコード

IO操作で動かせるロボがあって、ROSで動かせるようにしたいなと思って書いたものです。

  • Arduino Uno 入出力設定
    • シリアル通信 ROSとの通信で使用 ( D0,D1 Rx, Tx )
    • デジタル出力 13pin ( D2~D13, A0 )
    • デジタル入力 5pin ( A1~A5 )

ノード構成

  • お膳立てノード
    • 「〇〇信号を出して」「××信号を3にして」等といった指示をsubscribe
    • Arduinoの出力ピンの上げ下げを表す2進数へ変換してwrite_pinメッセージとしてpublish
  • Arduinoノード .ino(serial_node)
    • デジタル出力するピンの情報であるwrite_pinメッセージをsubscribe
    • デジタル入力するピンの情報であるread_pinメッセージをpublish
    • 各ピンの入出力状態のデバッグ出力をするフラグであるio_sendLog_flagメッセージをsubscribe

2つのノードに分けて使っていました。 Arduino側ノードに直接〇〇信号メッセージ、xx信号メッセージを送るのではなく、お膳立てノードを一段挟んでいます。 Arduino側のコードは一発書いたらずっとそのままで、デジタルピンの使い道を変えたかったらお膳立てノード側の処理を変更するだけで対応できます。 ピンの使い方を変えようと思ったら、Arduino側のコードを変えて、通信方法を考えなければいけないしいちいちArduinoに書き込んだりするのが手間だと思ってこのような構成にしました。このArduino側のコードを紹介しようと思います。

(間に何も挟まずに直接やりとりするのが普通だと思います。 お膳立てノードでやっている、複数ピンの状態を表す2進数への変換をするといったぐらいの処理ならそのままマイコンでやってしまえます。 何なら反射みたいに、PC介さずにマイコン内でピン入力から条件分岐してそのまま出力を変化させるぐらいやってしまった方が高速に反応できるしROS側との通信も少なくてよいとか色々あると思います。今回の使用用途的には間に合っていたので、この構成になっています。)

以下Arduinoのコードと、その説明です。

/* rosserial

---
$ roscore
---
$ rosrun rosserial_python serial_node.py /dev/ttyACM0
---
$ rostopic list
---
$ rostopic pub -1 /write_pin std_msgs/UInt16 0
$ rostopic pub -1 /write_pin std_msgs/UInt16 1
...
$ rostopic pub -1 /write_pin std_msgs/UInt16 8191

$ rostopic echo /read_pin

$ rostopic pub -1 /io_sendLog_flag std_msgs/Bool "data: true"
$ rostopic pub -1 /io_sendLog_flag std_msgs/Bool "data: false"

---

Arduino UNO

 0    HardwareSerial RX
 1    HardwareSerial TX
 2    digitalWrite
 3    digitalWrite
 4    digitalWrite
 5    digitalWrite
 6    digitalWrite
 7    digitalWrite
 8    digitalWrite
 9    digitalWrite
10    digitalWrite
11    digitalWrite
12    digitalWrite
13    digitalWrite
14 A0 digitalWrite
15 A1 digitalRead
16 A2 digitalRead
17 A3 digitalRead
18 A4 digitalRead
19 A5 digitalRead

pin mapping
-> #define, output_pin[], input_pin[]

*/

// -------------------------------------------------
#include <ros.h>
#include <std_msgs/UInt8.h>   // publish    5 pin input
#include <std_msgs/UInt16.h>  // subscribe 13 pin output
#include <std_msgs/Bool.h>    // subscribe sendLog flag

ros::NodeHandle nh;
std_msgs::UInt16 msg_writePin;
std_msgs::UInt8  msg_readPin;
std_msgs::Bool   msg_sendLogFlag;

// settings -----------------------------------------
#define USE_INPUTPULLUP
//   ifdef use pinMode( pin, INPUT_PULLUP);

#define BOARD_PINS_NUM        20  // 0~19
#define OUTPUT_PIN_NUM        13
#define OUTPUT_PIN_USE_BITMASK (0b0001111111111111) // use pin:1
#define INPUT_PIN_NUM          5
#define INPUT_PIN_USE_BITMASK  (0b00011111)

// pin mapping
const int output_pin[ OUTPUT_PIN_NUM ] = 
{
  2,
  3,
  4,
  5,
  6,
  7,
  8,
  9,
  10,
  11,
  12,
  13,
  14
};
const int input_pin[ INPUT_PIN_NUM ] = 
{
  15,
  16,
  17,
  18,
  19
};

char pin_state_log[ BOARD_PINS_NUM +1 ] = // +\0
{
  "RT000000000000000000"
  // rx, tx,  0, 0, 0,...
};
char charBuf[100];

// prototype declaration
void digitalOut(int pin, int state);
int digitalIn(int pin);
void messageCbWritePin( const std_msgs::UInt16 &msg);
void messageCbSendLog( const std_msgs::Bool &msg);


#define PUB_READPIN_INTERVAL  20 // [ms]  1000[ms] / 50[Hz]
#define INFO_SENDLOG_INTERVAL 20 // [ms]  1000[ms] / 50[Hz]
unsigned long timeMs = 0;
unsigned long timeMsBuf[2] = {0};

ros::Subscriber<std_msgs::UInt16> sub_writePin("write_pin", &messageCbWritePin);
ros::Publisher                    pub_readPin ("read_pin",  &msg_readPin);
ros::Subscriber<std_msgs::Bool>   sub_sendLog ("io_sendLog_flag", &messageCbSendLog);

void setup()
{
  // pin init
  for(int i = 0; i< OUTPUT_PIN_NUM; i++)
  {
    pinMode(output_pin[ i ], OUTPUT);
    digitalOut(output_pin[ i ], LOW);
  }
  
  for(int i = 0; i< INPUT_PIN_NUM; i++)
  {
#ifdef USE_INPUTPULLUP
    pinMode(input_pin[ i ], INPUT_PULLUP);
#else
    pinMode(input_pin[ i ], INPUT);
#endif
    digitalIn(input_pin[ i ]);
  }
  
  msg_writePin.data = 0;
  msg_readPin.data  = 0;
  msg_sendLogFlag.data = false;
  
  nh.initNode();
  nh.advertise(pub_readPin);
  nh.subscribe(sub_writePin);
  nh.subscribe(sub_sendLog);
}

void loop()
{
  timeMs = millis();

  // pin read ----------------------------------------------
  if( timeMs - timeMsBuf[0] >= PUB_READPIN_INTERVAL )
  {
    msg_readPin.data = readPinState() & INPUT_PIN_USE_BITMASK;
    pub_readPin.publish(&msg_readPin);
    
    timeMsBuf[0] = timeMs;
  }
  // -------------------------------------------------------
  
  nh.spinOnce();

  // send log ----------------------------------------------
  if( msg_sendLogFlag.data )
  {
    if( timeMs - timeMsBuf[1] >= INFO_SENDLOG_INTERVAL )
    {
      nh.loginfo( pin_state_log );
      
      timeMsBuf[1] = timeMs;
    }
  }
  // -------------------------------------------------------
}

void messageCbWritePin( const std_msgs::UInt16 &msg)
{
  // update writepin state
  msg_writePin = msg;
  msg_writePin.data = msg.data & OUTPUT_PIN_USE_BITMASK;
  
  int state = 0;
  for(int i = 0; i< OUTPUT_PIN_NUM; i++)
  {
    state = (msg_writePin.data >> i) & 1;
    
    if(state == 1)
    {
      digitalOut(output_pin[ i ], HIGH );
    }else{
      digitalOut(output_pin[ i ],  LOW );
    }
  }
}
//    ex. data = 6 = 0b0110  ↓
//      i = 0, 6 >> 0 = 0b011|0|, data & 1 = 0
//      i = 1, 6 >> 1 = 0b001|1|, data & 1 = 1
//      i = 2, 6 >> 2 = 0b000|1|, data & 1 = 1
//      i = 3, 6 >> 3 = 0b000|0|, data & 1 = 0
//      ...                   ^

void messageCbSendLog( const std_msgs::Bool &msg)
{
  msg_sendLogFlag = msg;
}

// write and memory
void digitalOut(int pin, int state)
{
  digitalWrite(pin, state);
  
  if(state == HIGH)
  {
    pin_state_log[ pin ] = '1';
  }else{
    pin_state_log[ pin ] = '0';
  }
}

// read and memory
int digitalIn(int pin)
{
  int state = digitalRead(pin);

#ifdef USE_INPUTPULLUP

  if( state == LOW )
  {
    pin_state_log[ pin ] = '1';
  }else{
    pin_state_log[ pin ] = '0';
  }
  return 1 - state;

#else

  if( state == HIGH )
  {
    pin_state_log[ pin ] = '1';
  }else{
    pin_state_log[ pin ] = '0';
  }
  return state;

#endif
}

uint8_t readPinState()
{
  uint8_t readBuf = 0;  
  for(int i = 0; i < INPUT_PIN_NUM; i++)
  {
    readBuf += digitalIn(input_pin[ i ]) << i;
  }
  return readBuf;
}

次のメッセージをやり取りします。

std_msgs::UInt16 msg_writePin;
std_msgs::UInt8  msg_readPin;
std_msgs::Bool   msg_sendLogFlag;

log出力レベル INFO で

"RT000000000000000000"
  // rx, tx,  0, 0, 0,...

といったような感じでピンの入出力状態のデバッグ出力をします。

ifdef で、入力をINPUT_PULLUPにするかどうか選択できるようにしています。

#define USE_INPUTPULLUP

シリアル通信用の2ピンを飛ばして、D2~D13,A0を出力ピン、A1~A5を入力ピンとしています。 配列にいれて置き換えているので、順番等自由に変えられます。

入力ピンの状態をpublishする周期、ピンの入出力状態をデバッグ出力する周期をmsで設定します。

#define PUB_READPIN_INTERVAL  20 // 1000 / 50
#define INFO_SENDLOG_INTERVAL 20 // 1000 / 50

millis()とタイムスタンプを比較して、ここで指定した周期ごとに通信を出力を行ないます。

やりとりするROSメッセージの設定です。

ros::Subscriber<std_msgs::UInt16> sub_writePin("write_pin", &messageCbWritePin);
ros::Publisher                    pub_readPin ("read_pin",  &msg_readPin);
ros::Subscriber<std_msgs::Bool>   sub_sendLog ("io_sendLog_flag", &messageCbSendLog);

ここで指定したコールバック関数が各メッセージ受信、送信時に呼ばれて デジタル入出力等を行ないます。

ピンの入出力はdigitalRead,digitalWriteを直接呼ばずに、digitalIn,digitalOutという関数経由で呼び、 このときに、デバッグ用のピン入出力状態の変数を一緒に更新しています。 INPUT_PULLUPとの読み替えもここでやっています。

動かしてみる

上のinoファイルをArduinoに書き込みます。 書き込んだら、ターミナルから試しにコマンドでメッセージを送って、Arduinoと通信してみます。 以下がその例です。

serial_nodeを動かして、マイコンと通信する。

$ roscore
$ rosrun rosserial_python serial_node.py /dev/ttyACM0

Topic通信一覧を見る

$ rostopic list

ピンの入出力状態のデバッグ出力フラグ io_sendLog_flagを送る(publishする)例 trueでデバッグ出力する。falseでデバッグ出力しない。

$ rostopic pub -1 /io_sendLog_flag std_msgs/Bool "data: true"
$ rostopic pub -1 /io_sendLog_flag std_msgs/Bool "data: false"

write_pinメッセージを送る(publishする)例 13ピン分で、13bit 0b0~0b1111111111111(0~8191)

$ rostopic pub -1 /write_pin std_msgs/UInt16 0
$ rostopic pub -1 /write_pin std_msgs/UInt16 1
...
$ rostopic pub -1 /write_pin std_msgs/UInt16 8191

read_pinメッセージを受ける(subscribeする)例

$ rostopic echo /read_pin

うちのロボ

メモ。だんだん増えてきました。これでもう寂しくないぞ←

ロボ

名前 出会った場所 備考
RB2000 ヴイストンロボットセンター
Sota(のモック) ヴイストンロボットセンター
プリメイドAI (x2人) Amazon 21600
Roomba 643 Amazon
Sota ヴイストンロボットショップ
M5LidarBot M5Stack Store
M5Rover M5Stack Store

今後会う予定のロボ(訳:未完成)

名前 出会った場所 備考
Robi ヤフオク
MECCANOID G15KS TYPE122 Amazon 5000

AIスピーカー

(お世話になってるので家族みたいなもんかな)

名前 出会った場所 備考
Google Home Mini
Line Clova ドスパラ
Amazon Echo Flex( x 2 ) Amazon 一番よく声を拾ってくれたのが反応してくれる。距離よりも話す方向が重要かも
Amazon Echo Show 5 Amazon 机の横に置いてる。時計代わり
Amazon Echo Show 8 Amazon ご飯食べるテーブルに置いてる。「アレクサ、ゆーちゅ-ぶ」と話しかけて、後で見るリストをご飯食べながら消化している

各社のが揃ってしまった。どうして...

三位一体

meccanoid g15ks type122

人型ロボ meccanoid g15ks type122のメモ。

 公式情報

説明書

faq.takaratomy.co.jp

https://www.pa-solution.net/as/scope3/api/getFile.aspx?k=Yy9I585bdPgZK3JHj%2fxGwBiMCC31Vu27ALC67u%2fdo4BmRz%2faX5HK9olaUzctzFW9&file=6e337a434d755a713059633d

 

公式紹介動画

Watch: How to Build Meccanoid G15 & G15KS: Connecting to the Computer & Updating the Program

http://www.meccano.com/watch/?vid=65

 更新ソフトをPCに入れて、USB経由で更新ができるとのこと

 

Robot Update Software

http://www.meccano.com/meccanoid-robot-updater

Robot Update software(更新ソフト)、Micronoid Code Programming Environment(プログラミングソフト)のDLリンクがあった

手順

To update your robot or change its language:

1. Download the Robot Update software
2. Install the software on your computer
3. Locate the included USB cable
4. Connect USB cable to computer
5. Insert micro USB end into the port on the MeccaBrain™
6. Open the software and follow the instructions

製品ページ

タカラトミーサイト内検索で探したら

https://search.takaratomy.co.jp/search?site=HLQCWXGN&charset=UTF-8&design=1&query=meccanoid&imageField=%E3%81%95%E3%81%8C%E3%81%99

f:id:Fluorite36:20210103011651p:plain

ページ案内

メカノイド公式サイトはこちら

https://www.takaratomy.co.jp/products/omnibot/

と表示されたけどその先のサイトに見当たらなかった。もう終了してしまったのかしら。Amazonでぽちったときに5000円で(投げ売り価格?)めちゃ安くなってたので覚悟はしてたけど...

wayback machineで探したら過去のが見れた

ラインナップ画像のリンクページ

https://www.takaratomy.co.jp/products/omnibot/meccanoid/

で飛ぶと、上のomnibotのページにリダイレクトされてしまった。

過去のページ

https://web.archive.org/web/20190412235630/https://www.takaratomy.co.jp/products/omnibot/meccanoid/

 

注意

2016年10月以降にメカノイドG15/メカノイドG15KS を購入された方・これから購入を検討されている方へ|MECCANOID(メカノイド)|オムニボット|タカラトミー

メカノイドG15/メカノイドG15KS には一部、専用アプリと連動してお楽しみいただける機能(モーションキャプチャー機能)がございますが、公開中のメカノイド公式アプリ最新バ―ジョン(2.1以降)ではこの機能をお楽しみいただけませんので、予めご了承をお願いいたします。

2016年10月初旬より以前にメカノイド専用アプリをダウンロードされた場合に関しては機能制限がございませんが、2.1以降のバージョンにアプリを更新されますと、従来品の「メカノイド」のモーションキャプチャー機能が使用できなくなりますので、従来品を継続してご利用になられたい方はアプリの更新をなさらないことをお勧めします。
また、一度更新をすると、以前のバージョンには戻せません。つまり、モーションキャプチャーでは遊ぶことができなくなります。

モーションキャプチャー機能・・・スマートフォンのカメラを使い、目の前にいる人の動きをトレースする遊び

ご不便をおかけいたしますが、ご理解のほどよろしくお願い申し上げます。

 

重要:必ずお読みください①メカノイドアプリの更新に関して|MECCANOID(メカノイド)|オムニボット|タカラトミー

 

専用アプリ

Meccanoid App

http://www.meccano.com/meccanoid-meccanoid-app

 

関連情報

公式オープンソース

Meccanoid Open Source Programming

http://www.meccano.com/meccanoid-opensource

紹介しているサイト

TAKARATOMY Meccanoid G15KS TYPE122通販|ソフトバンクセレクション

動画とか

 

 

Jetson TX1をのせて動かすプロジェクト

GitHub - meccanoid-tx1/meccanoid-tx1-project: ros packages for the meccanoid-tx1

構成を見た感じROS使ってがっつり動かすっぽい

  1. Meccanoid G15KS personal robot
  2. Jetson TX1 development kit
  3. 2x Arduino Uno + motor shield
  4. Kinect v1 camera
  5. Marvelmind ultrasonic indoor GPS system
  6. 7 port usb2 hub 

 

工具棚

自分用のメモと、紹介を兼ねて。

 

工具

ねじを外す ネジザウルス

https://www.nejisaurus.engineer.jp/product-page/pz-58-%E3%83%8D%E3%82%B8%E3%82%B6%E3%82%A6%E3%83%AB%E3%82%B9gt

www.nejisaurus.engineer.jp

ねじをなめたときに、掴んで回して外す。

やらかしたときに、でもまだこれがあるから大丈夫...という心の支えになる。よい。

(買ったはいいけどなんだかんだでまだねじをなめていないので使えていない。) 

秋葉原あきばおーで、黄色バージョンが売っててかっこいいなと思って衝動買いした。

はんだごて

https://www.hakko.com/japan/products/hakko_fx600.html

www.hakko.com

温度調節できる(あまり使いこなせていない)。快適にはんだ付けできる。よい。

Maker Faireで会場限定で販売していたピンク色バージョンを衝動買い。

こて台

同じ白光のこて台 633-01

www.hakko.com

こて先クリーナーにこてを差し込んでぐりぐりするととてもきれいになる。よい。

https://www.hakko.com/japan/products/hakko_599b.html

1. はんだ付けをする
2. こて台に置く
作業が一旦終わったら、クリーニングせず、そのままこて台に置いてください。
3. こて先をクリーニングする
はんだ付け直前にクリーニングを行ってください。
4. 再びはんだ付けをする

!2番と3番の順番が入れ替わるとこて先の酸化を早めてしまいます。

(記事書いてる中で調べてて知った...)

タイマー式コンセント

https://panasonic.jp/tap/p-db/WH3111WP.html

panasonic.jp

はんだごてを付けっ放しにすると危ないのでタイマーで切れるコンセントを買った。よい。安心。

買って使ってみて気づいたけど、はんだ付けするときのタイマーは設定しても2、3時間とかそこらだった。11時間ではなくもう少し短いものでもよかったかも。

こてカバー

はんだごての持ち運び用カバー。

HAKKO 605

https://www.hakko.com/japan/products/search_result.php?k=605

www.hakko.com

FX-600に対応しているものを選んだ。

パッケージの商品説明に

ハッコー605は耐熱性、断熱性に優れています。

作業後、すぐに工具箱に入れることができます。

と書いてあって感動した。

はんだごては意外と鋭いのでカバーがあると安心。よい。

(なんだかんだこて台に挿しっぱなしなので、まだ引っ越し時にしか使ったことがない。)

ワイヤーストリッパー

https://www.vessel.co.jp/product/stripper/detail/141011

www.vessel.co.jp

被覆をむく。便利。よい。

対応している太さが多いと思って選んだけど、はたしてこれでよかったのだろうか。

圧着工具

ホーザン P-706

https://www.hozan.co.jp/catalog/Crimpers/P-706.html

www.hozan.co.jp

圧着端子を圧着する。便利。よい。

これもなんとなくで選んでしまった。

(買ったけど、あまり線を作っていないのであまり使っていない。)

 

...工具、いろんな会社のを買っていて統一感がないですね

100均のニッパー

安いから刃がだめになったら買い替えようと割り切って、なんでもガッといく用のニッパー。いざというときに何も考えずにえいっと。(怒られそう。)

あまり切れ味はよくない。

電子工作関連

Arduino

https://store.arduino.cc/usa/arduino-uno-rev3

store.arduino.cc

よく使う。サンプルコードがいっぱい。便利。よい。

最初に買ったのがUno。買って7年くらい経つけど幸いまだあやめていない。秋葉原千石電商で、部品セットと一緒に買った。

何かパーツを試すときはまずUnoで動かしてみてる。互換機はいろいろぽちったけど、形に組み込むときにしか使っていない。

びんぼうでいいの

https://www.aitendo.com/product/10793

www.aitendo.com

Arduino Uno互換機。高校生のときによく買っていた。1000円くらい。すごい。

Arduinoシールドが使えて安い。いろいろ挿してそのままロボとか作品に組み込んだり。

Sainsmart mega 2560

https://jp.sainsmart.com/products/mega-2560-r3-atmega2560-16au-arduino-compatible

Mega 2560 R3 ATmega2560-16AU、Arduino互換jp.sainsmart.com

Arduino MEGAの互換機。ピンがいっぱいある。よい。安い。

今まで3台くらい買った。

USB-シリアル変換

https://akizukidenshi.com/catalog/g/gK-06693/

akizukidenshi.com

シリアル通信でPro miniとかシリアル変換が載ってないボードにプログラムを書き込んだり、デバッグしたり、RasperryPiにログインしたりできる。便利。よい。

f:id:Fluorite36:20201231131540j:plain

f:id:Fluorite36:20201231131548j:plain

ピンアサインを書いた

Pro miniと"あちゃんでいいの"(最小構成ArduinoUno互換)とでRESETの位置が違ったので、RESETだけ分離している。こんな感じにケーブル生やして使ってみてるけど、ピンソケットをつけてジャンパで飛ばした方がいろいろできてよかったかも。

だいぶ前に買ってずっと使っているけど、今買うなら新しい速いのがいいと思う。1Mbpsとかは出せない。(先のURLより↓)

FT232RL・USBコネクタ搭載済み
■通信速度:300bps~460kbps

シンプルな小さいのもあるけどRESETが出てないとマイコン書き込むときにしんどいかも。

デバッグツール

 

IOの状態を目で確認する

Arduino用LEDシールド

https://necobit.com/denshi/arduino-led-shield/

necobit.com

Arduinoに挿して使う。IOのH/LがLEDのON/OFFとなって目で確認できる。よい。

ROSとArduinoの連携のコードを書いていた時に、ハードウェアシリアルを通信で使うためシリアルデバッグが使えない。でもぱぱっと確認したいと思って買った。

(あとから、ソフトウェアシリアルにUSB-シリアルをつないだらシリアルデバッグできるじゃんと気づいたけどこれはこれで便利。)

Maker UNO Plus

https://www.switch-science.com/catalog/4120/

www.switch-science.com

Arduino互換機。D2~D13までLEDがついてて、LEDシールドと同様にIOの状態を目で見れる。よい。

LEDシールドの後に知って、こっちもぽちってしまった。

USB接続 シリアル ループバック デバイス UUL-01

tlt.gurigoro.net

https://tlt.gurigoro.net/support_uul01

2つのシリアルポートをくっつけてくれる。片方に入れるともう片方から出てくる。

シリアル通信するソフトを書いたりするときにデバッグがはかどる。よい。

com0comを使っていたけど導入が少し面倒だった。これなら挿すだけ。

電源類

リポチェッカー

LiPoバッテリーの脇のバランスコネクタに挿して、7セグで電圧を確認できる。基準値を下回るとブザーで教えてくれる。よい。

音がとても大きい。

どこで買ったか忘れてしまった。こんな感じのもの。

https://www.amazon.co.jp/dp/B07BF4K5XB/ref=cm_sw_em_r_mt_dp_qKb7Fb90DQFTN

リポバッグ

LiPoバッテリーを入れて保管する袋。燃えにくい。よい。

どれを買ったらいいかわからずひとまずAmazonでぽちったこちらを使っている。

Amazon | 最強防炎 ! LiPo Guard リポバッテリー セーフティーバッグ | ラジコン・ドローン 通販 

https://www.amazon.co.jp/dp/B00D77M7WW/ref=cm_sw_em_r_mt_dp_9Db7FbRENZ48R

 

モバイルバッテリー

PDでPCも充電できる。よい。

秋葉原で3000円で売っていたこちらを買った。

https://www.ankerjapan.com/item/A1241.html

www.ankerjapan.com

普段使いしている。ロボにThinkPadを抱かせて走らせるときに、PC内蔵バッテリーでは足りなくて、予備でつないでいた。

(ROSでがんがん回して走らせて地図作ったりしてると、走ってる間に電池なくなってしまうので厳しい。)