team M and Aの部屋

ゆるーい電子工作好きな夫婦のブログです。

工具のきもち LINEスタンプ

工具のきもちを表現したLINEスタンプがデビューしました!

 

工具ってよく見ると1つ1つ顔が違いますよね。

そんな工具たちはいったいどんな気持ちで過ごしているんだろうと思いませんか。 

 

 ↓↓作品はこちら↓↓

 https://store.line.me/stickershop/product/11936314

f:id:tmanda:20200523225157p:plain 

工具といっても幅広いので、電子工作で身近なもの、

日常使うような工具に絞ってスタンプにしてみました。

ぜひ使ってみてくださいね!

ガーデニングはじめました

Stay homeということでガーデニングをはじめました。

種を植えてから2週間ほど経ち、双葉もだいぶ大きくなってきました。


Arduino (GR-ROSE) Robot Gardener

 

お出かけできるようになっときに備えて、水やりの自動化を目論見中です。
水を流す・止めるの制御には、サイフォンの原理を利用しています。水源のペットボトルをある高さで固定しておき

  • アームの先端が高いときは水が流れない
  • アームの先端が低いときは水が流れる

となるので、これなら弁とか蛇口とか難しいことを考える必要がなさそう!

サイフォン - Wikipedia

アーム&ペットボトルの固定とか実験用のビニール袋がかっこよくないとかまだまだ改良ポイントはいっぱい。

ロボットアームとArduino (GR-ROSE)で機構学のお勉強

tmanda.hatenablog.com で紹介したロボットアームを制御するための機構学のお勉強です。 f:id:tmanda:20200506103951p:plain ↑これの話です。

さっそくはじめていきましょう。

まずはロボットアームの関節角度を定義します。今回はロボットアームが垂直に立った状態を0度とします。
サーボモータの可動範囲は0度±135度) f:id:tmanda:20200506130807p:plain

ロボットアームの関節の位置(サーボモータの回転軸の位置)を計算します。 f:id:tmanda:20200509141301p:plain

今回はロボットアームの先端が水平に同じ高さになるように制御します。 f:id:tmanda:20200506131038p:plain 

「ロボットアームの先端が水平に同じ高さ」を数式で表すと次のようになります。 f:id:tmanda:20200509141308p:plain

①②の式を代入すると、 f:id:tmanda:20200509141354p:plain ここで黄色マークした式をこの後で使います。根本のモータを好きなように制御したときの他の2つのモータ角度を計算します。 f:id:tmanda:20200506131411p:plain

あとはプログラムにモータ角度をセットするコードを書くということになります。

※注意点
1. モータの可動範囲は実物のアームが干渉しない範囲になります。アーム同士がぶつからないようにしましょう。
2. 今回は高さを一定に保つ制御をしていますが、リンクが届かない範囲があります。以下の絵を参照。
f:id:tmanda:20200506135721p:plain

今回使用したArduino互換ボード「GR-ROSE」には近藤科学サーボモータを接続できるコネクタとライブラリが用意されているので、すぐに試すことができました。

www.renesas.com

ソースコードは以下です。

#include <ICS.h>

IcsController ICS(Serial1);
IcsServo servo0;
IcsServo servo1;
IcsServo servo2;
IcsServo servo3;

int theta0_pulse = 0;  //3500-11500
int theta1_pulse = 0;
int theta2_pulse = 0;
int theta3_pulse = 0;

bool motion_enable = false;
bool dir0 = false;
bool dir1 = false;

#define TH0_ZERO 7500
#define TH0_LIMIT_MIN 3500
#define TH0_LIMIT_MAX 11500

#define TH1_ZERO 7500
#define TH1_LIMIT_MIN 4500
#define TH1_LIMIT_MAX 10500

#define TH2_ZERO 7500
#define TH2_LIMIT_MIN 4500
#define TH2_LIMIT_MAX 10500

#define TH3_ZERO 7500
#define TH3_LIMIT_MIN 4500
#define TH3_LIMIT_MAX 10500


void setup() {

  Serial.begin(115200);
  pinMode(PIN_LED1, OUTPUT);

  ICS.begin();
  servo0.attach(ICS, 0x01);
  servo1.attach(ICS, 0x02);
  servo2.attach(ICS, 0x03);
  servo3.attach(ICS, 0x04);
  
  theta0_pulse = TH0_ZERO;
  theta1_pulse = servo1.getPosition();
  theta2_pulse = servo2.getPosition();
  theta3_pulse = servo3.getPosition();

  setPosition4axis(theta0_pulse, theta1_pulse, theta2_pulse, theta3_pulse);
  delay(1000);
  digitalWrite(PIN_LED1, HIGH);
}

void loop() {
  if(Serial.available()){
    switch(Serial.read()){
      case 's':
        motion_enable = !motion_enable;
        break;
      case '0':
        motion_enable = false;
        theta0_pulse = TH0_ZERO;
        theta1_pulse = TH1_ZERO;
        theta2_pulse = TH2_ZERO;
        theta3_pulse = TH3_ZERO;
        break;
      default:
        break;
    }
  }
  
  if(motion_enable){
    int tmp;
    int dth = 50;

    if(theta0_pulse > (TH0_LIMIT_MAX - 400)){
      dth = 50 - (TH0_LIMIT_MAX - 400 - theta0_pulse)/8;
      if(dth < 5) dth = 5;
    } else if(theta0_pulse < (TH0_LIMIT_MIN + 400)) {
      dth = 50 - (TH0_LIMIT_MIN + 400 - theta0_pulse)/8;
      if(dth < 5) dth = 5;
    } else {
      dth = 50;
    }
    if(dir0){
      theta0_pulse += dth;
      if(theta0_pulse > TH0_LIMIT_MAX){
        theta0_pulse = TH0_LIMIT_MAX;
        dir0 = !dir0;
      }
    } else {
      theta0_pulse -= dth;
      if(theta0_pulse < TH0_LIMIT_MIN){
        theta0_pulse = TH0_LIMIT_MIN;
        dir0 = !dir0;
      }
    }//*/
    if(theta1_pulse > 8620){
      dth = 100 - (theta1_pulse-8620)/4;
      if(dth < 5) dth = 5;
    } else if(theta1_pulse < 6000) {
      dth = 100 - (6000 - theta1_pulse)/4;
      if(dth < 5) dth = 5;
    } else {
      dth = 100;
    }
    if(dir1){
      theta1_pulse += dth;
      if(theta1_pulse > 9000){
        theta1_pulse = 9000;
        dir1 = !dir1;
      }
    } else {
      theta1_pulse -= dth;
      if(theta1_pulse < 5620){
        theta1_pulse = 5620;
        dir1 = !dir1;
      }
    }//*/
    tmp = calc_theta2_pulse(theta1_pulse);
    if(tmp != 0) theta2_pulse = tmp;
    theta3_pulse = TH3_ZERO - ((theta1_pulse - TH1_ZERO) + (theta2_pulse - TH2_ZERO));
  }

  setPosition4axis(theta0_pulse, theta1_pulse, theta2_pulse, theta3_pulse);
  delay(25);
}

void setPosition4axis(int pos0, int pos1, int pos2, int pos3){
  if(pos0 < TH0_LIMIT_MIN){
    pos0 = TH0_LIMIT_MIN;
  } else if(pos0 > TH0_LIMIT_MAX){
    pos0 = TH0_LIMIT_MAX;
  }
  if(pos1 < TH1_LIMIT_MIN){
    pos1 = TH1_LIMIT_MIN;
  } else if(pos1 > TH1_LIMIT_MAX){
    pos1 = TH1_LIMIT_MAX;
  }
  if(pos2 < TH2_LIMIT_MIN){
    pos2 = TH2_LIMIT_MIN;
  } else if(pos2 > TH2_LIMIT_MAX){
    pos2 = TH2_LIMIT_MAX;
  }
  if(pos3 < TH3_LIMIT_MIN){
    pos3 = TH3_LIMIT_MIN;
  } else if(pos3 > TH3_LIMIT_MAX){
    pos3 = TH3_LIMIT_MAX;
  }
  Serial.print(servo0.setPosition(pos0)); Serial.write('\t');
  Serial.print(servo1.setPosition(pos1)); Serial.write('\t');
  Serial.print(servo2.setPosition(pos2)); Serial.write('\t');
  Serial.print(servo3.setPosition(pos3)); Serial.println();//*/
}


int calc_theta2_pulse(int theta1){
  const float l1 = 68.0f;
  const float l2 = 60.0f;
  const float l2_ref = 89.8f;
  const float pulse_to_rad = 135.0f*M_PI/(4000.0f*180.0f);
  const float rad_to_pulse = (4000.0f*180.0f)/(135.0f*M_PI);
  
  const float theta1_rad = (float)(theta1 - TH1_ZERO) * pulse_to_rad;
  const float p2_y = l1 * cos(theta1_rad);
  
  float theta2_rad;
  float cos_theta2 = (l2_ref - p2_y)/l2;
  
  if(cos_theta2 > 1.0f){
    return 0; //Error
  }
  theta2_rad = acos(cos_theta2) - theta1_rad;
  
  return ((theta2_rad * rad_to_pulse) + TH2_ZERO);
}

おうちロボット展

しばらく棚の中で眠っていた彼

robot (before)

二足歩行ロボット

ついに復活のときが!


4-axis Robot arm (GR-ROSE)

 

ロボットアームのお勉強に作ってみました。アームの先端が同じ高さで水平になるように制御しています。

 

Excelで関節角度の計算式をチェック  

f:id:tmanda:20200506103951p:plain

Excelで関節角度の計算

 

計算の詳細はこちらで!

tmanda.hatenablog.com

 

Maker Faire Tokyo 2019

ふらっとMaker Faire Tokyo 2019を見学してきました。

Maker Faireとは地上最大のDIYの展示発表会です。
家族で楽しめる、発明と創造が一杯で機知に富む人々が集うMakerムーブメントのお祭りです。

たくさん作品があり、見切れなかったのですが、

楽しかった作品をほんの一部紹介します。

 

・ぶうびんポスト(はっきんぐパパ様)
 子どもが書いてくれた手紙をぶうびんポストに食べさせると、

 手紙がLINEで通知されます。


ぶうびんポストデモ

 子どものお絵かきがデータ化されると、他にも活用もできそうです。
 デザインもかわいいく洗練された作品だと思いました!

 

・Plantern
 植物を触るとランプが灯る作品です。
 植物のタッチセンサーですね。
 人間が触ることで抵抗値の変化を読み取り明かりを制御しています。


『Plantern』introduce and concept

 無機質な素材よりも、植物がスイッチになったほうが
 毎日がゆったり過ごせそうで良いアイデアだと思いました。

https://makezine.jp/event/makers-mft2019/m0043/

 

・SPIRO MAKER(Yara:Makers様)

 昭和のペンプロッターをProcessingで動かし、お絵かきデモが展示されていました。


SPIRO MAKER

 可変抵抗で絵のパラメータを操作することができ、
 自分の好きなデザインで絵を描いてくれます。

 記念に1枚描いていただきました。嬉しい。

f:id:tmanda:20190804230954j:plain

https://makezine.jp/event/makers-mft2019/m0126/

  

・スゴでこ(スゴイラボ様)

 プロジェクタでまんがの世界の表情を表現していました。
 zZZマークだったり、電球をつけたり。
 ただ、おでこが広くないとだめだそうです笑

 脳波と連携できたら意思を伝える1つの手段として
 めちゃ活用できると思いました。スゴかったです。

https://makezine.jp/event/makers-mft2019/m0102/

 

・ソフトロボット版 バジェットガエルプロジェクト(D.GEEK LAB.様)
 シリコンゴムでできたかえるさんの展示です。
 コンプレッサーによる空気圧で、手足、口もかわいく動きます。
 おなかにスピーカーもあり、突然強く叫んだりするので驚きました。

 ソフトロボットという言葉が新鮮でした。

https://makezine.jp/event/makers-mft2019/m0279/

  
micro:bitの作品も多く展示されていました。
2020年に小学校へのプログラミングも全面実施されるので、
だいぶ電子工作の敷居が低くなってきている印象でした。

次こそは展示側で参加してみたいですね(`・ω・´)

七夕ぴよりん in 2019

名古屋コーチンの卵を使った、ひよこ型スイーツ”ぴよりん”!
ぷるぷるふわふわ見た目がとっても可愛い、名古屋のスイーツです!

(ぴよりんHPより:https://piyorin.com/

ぴよりんは名古屋駅で購入できます。

が、いつも用事を済ませてから買おうと思うと、夜には売り切れ。。

先日ついに!ぴよりんを二羽購入できました。

しかも七夕限定ぴよりんです。

f:id:tmanda:20190707155041j:plain  f:id:tmanda:20190707155055j:plain

箱に2個詰めてもらいました。うう、かわゆす。

f:id:tmanda:20190707155114j:plain    f:id:tmanda:20190707155151j:plain

名古屋コーチンプリンを、桃風味のババロアで包んだ「織姫ぴよりん」500円!

桃風味なので少しお高い?けど、やっぱり2羽そろわないと七夕にならないもんね。

f:id:tmanda:20190707155106j:plain      f:id:tmanda:20190707155201j:plain

青色トサカがトレードマーク「彦星ぴよりん」380円!

f:id:tmanda:20190707155133j:plain

食べるのがもったいない2羽ででしたが…おいしくいただきました!

七夕以外にも、いろんなアレンジがあるぴよりん。

今後のデザインにも注目したいですね★

今夜は良い七夕になりますように。

そんたくんLINEスタンプ

 

 前回お絵かきしていた「そんたくん」がついに。

LINEスタンプとしてデビューしました!

tmanda.hatenablog.com

 

そんたくんは、いつも表情豊かに空気を読んでいます。

たまに方言も話します。1つ1つ丁寧に作りました。

ぜひ使ってみてくださいね!

f:id:tmanda:20190619224033p:plain


 

store.line.me