地域密着型エリア広告配信リクルートの地域密着型広告ドコイク?アドネットワーク Ads by ドコイク?[無料でホームページを作成] [通報・削除依頼]
[無料でホームページを作成] [通報・削除依頼]
婚活

2017年02月 のアーカイブ

2017年2月24日 20時53分52秒 (Fri)

6軸センサを使おう

ここでいう6軸とは、直行する3軸X、Y、Zの加速度と角速度(ジャイロ)を合わせたものという意味です。
センサ名としては、「SODIAL(R) GY-521 MPU-60503軸ジャイロ+3軸加速度センサ」で、下記のAmazonのサイトから送料込みで290円で買えました。このセンサには温度センサもついています。はんだ付けが必要です。
先に紹介した加速度センサKXR94-2050が850円だったのに比べると安いですね。

//www.amazon.co.jp/gp/product/B00K67X810/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

img_20170225-133118.jpg
 
このセンサの動作実験を行いました。このセンサはI2Cなので、基本の信号線はSDAとSCLの2本です。割り込み処理(INT)にD2ピンを使用しました。電源VCCは3.3Vです。スケッチはちょっと長いですが、以下のものです。
これだと1秒に1回サンプリングします。シリアルモニタの表示は、温度、加速度x、加速度y、加速度z、傾斜角x、傾斜角y、傾斜角z、角速度x、角速度y、角速度zです。

// MPU-6050 Accelerometer + Gyro
#include <Wire.h>
 
#define MPU6050_ACCEL_XOUT_H       0x3B   // R  
#define MPU6050_WHO_AM_I           0x75   // R
#define MPU6050_PWR_MGMT_1         0x6B   // R/W
#define MPU6050_I2C_ADDRESS 0x68
 
typedef union accel_t_gyro_union{
  struct{
    uint8_t x_accel_h;
    uint8_t x_accel_l;
    uint8_t y_accel_h;
    uint8_t y_accel_l;
    uint8_t z_accel_h;
    uint8_t z_accel_l;
    uint8_t t_h;
    uint8_t t_l;
    uint8_t x_gyro_h;
    uint8_t x_gyro_l;
    uint8_t y_gyro_h;
    uint8_t y_gyro_l;
    uint8_t z_gyro_h;
    uint8_t z_gyro_l;
  } 
  reg;
  struct{
    int16_t x_accel;
    int16_t y_accel;
    int16_t z_accel;
    int16_t temperature;
    int16_t x_gyro;
    int16_t y_gyro;
    int16_t z_gyro;
  } 
  value;
};
 
void setup(){
  Wire.begin();
  int error;
  uint8_t c;
  Serial.begin(115200);
  Serial.print("InvenSense MPU-6050");
  Serial.print("June 2012");
  error = MPU6050_read (MPU6050_WHO_AM_I, &c, 1);
  Serial.print("WHO_AM_I : ");
  Serial.print(c,HEX);
  Serial.print(", error = ");
  Serial.println(error,DEC);
  error = MPU6050_read (MPU6050_PWR_MGMT_1, &c, 1);
  Serial.print("PWR_MGMT_1 : ");
  Serial.print(c,HEX);
  Serial.print(", error = ");
  Serial.println(error,DEC);
  MPU6050_write_reg (MPU6050_PWR_MGMT_1, 0);
}
 
void loop(){
  int error;
  float dT;
  accel_t_gyro_union accel_t_gyro;
  error = MPU6050_read (MPU6050_ACCEL_XOUT_H, (uint8_t *) &accel_t_gyro, sizeof(accel_t_gyro));
  Serial.print(error,DEC);
  Serial.print("\t");
 
  uint8_t swap;
#define SWAP(x,y) swap = x; x = y; y = swap
  SWAP (accel_t_gyro.reg.x_accel_h, accel_t_gyro.reg.x_accel_l);
  SWAP (accel_t_gyro.reg.y_accel_h, accel_t_gyro.reg.y_accel_l);
  SWAP (accel_t_gyro.reg.z_accel_h, accel_t_gyro.reg.z_accel_l);
  SWAP (accel_t_gyro.reg.t_h, accel_t_gyro.reg.t_l);
  SWAP (accel_t_gyro.reg.x_gyro_h, accel_t_gyro.reg.x_gyro_l);
  SWAP (accel_t_gyro.reg.y_gyro_h, accel_t_gyro.reg.y_gyro_l);
  SWAP (accel_t_gyro.reg.z_gyro_h, accel_t_gyro.reg.z_gyro_l);
 
  dT = ( (float) accel_t_gyro.value.temperature + 12412.0) / 340.0;
  Serial.print(dT, 1);
  Serial.print("\t");
 
  float acc_x = accel_t_gyro.value.x_accel / 16384.0; //FS_SEL_0 16,384 LSB / g
  float acc_y = accel_t_gyro.value.y_accel / 16384.0;
  float acc_z = accel_t_gyro.value.z_accel / 16384.0;
 
  Serial.print(acc_x, 2);
  Serial.print("\t");
  Serial.print(acc_y, 2);
  Serial.print("\t");
  Serial.print(acc_z, 2);
  Serial.print("\t");
 
  float acc_angle_x = atan2(acc_x, acc_z) * 360 / 2.0 / PI;
  float acc_angle_y = atan2(acc_y, acc_z) * 360 / 2.0 / PI;
  float acc_angle_z = atan2(acc_x, acc_y) * 360 / 2.0 / PI;
 
  Serial.print(acc_angle_x, 2);
  Serial.print("\t");
  Serial.print(acc_angle_y, 2);
  Serial.print("\t");
  Serial.print(acc_angle_z, 2);
  Serial.print("\t");
 
  float gyro_x = accel_t_gyro.value.x_gyro / 131.0;  //FS_SEL_0 131 LSB / (°/s)
  float gyro_y = accel_t_gyro.value.y_gyro / 131.0;
  float gyro_z = accel_t_gyro.value.z_gyro / 131.0;
 
  Serial.print(gyro_x, 2);
  Serial.print("\t");
  Serial.print(gyro_y, 2);
  Serial.print("\t");
  Serial.print(gyro_z, 2);
  Serial.println("");
  delay(1000);
}
 
// MPU6050_read
int MPU6050_read(int start, uint8_t *buffer, int size){
  int i, n, error;
  Wire.beginTransmission(MPU6050_I2C_ADDRESS);
  n = Wire.write(start);
  if (n != 1)
    return (-10);
  n = Wire.endTransmission(false);    // hold the I2C-bus
  if (n != 0)
    return (n);
  // Third parameter is true: relase I2C-bus after data is read.
  Wire.requestFrom(MPU6050_I2C_ADDRESS, size, true);
  i = 0;
  while(Wire.available() && i<size){
    buffer[i++]=Wire.read();
  }
  if ( i != size)
    return (-11);
  return (0);  // return : no error
}
 
// MPU6050_write
int MPU6050_write(int start, const uint8_t *pData, int size){
  int n, error;
  Wire.beginTransmission(MPU6050_I2C_ADDRESS);
  n = Wire.write(start);        // write the start address
  if (n != 1)
    return (-20);
  n = Wire.write(pData, size);  // write data bytes
  if (n != size)
    return (-21);
  error = Wire.endTransmission(true); // release the I2C-bus
  if (error != 0)
    return (error);
  return (0);         // return : no error
}
 
// MPU6050_write_reg
int MPU6050_write_reg(int reg, uint8_t data){
  int error;
  error = MPU6050_write(reg, &data, 1);
  return (error);
}
 


スケッチは
//cranberrytree.blogspot.jp/2014/06/gy-521mpu-6050.html
を参考にさせて頂きました。

2017年2月22日 7時04分02秒 (Wed)

ランドサットのペーパークラフトを作ってみた

産総研からデータを公開しているランドサット8号のペーパークラフトに挑戦してみました。
//landsat.gsfc.nasa.gov/maker-of-a-miniature-landsat…/

3時間を超える格闘になってしまいました。しかし、これを作ることによって、どこに光学センサや熱赤外センサがあり、太陽光を避けるために工夫されているのかがわかりました。
ちょっとカッコつけて、地球を観測してるようにみえるように吊るして写真をとってみましたが、いかがでしょうか?

img_20170222-070915.jpg
img_20170222-070925.jpg
img_20170222-070934.jpg
 


2017年2月20日 20時12分03秒 (Mon)

Arduino nano 互換機を買ってみた

Amazonで中国製の約400円のArduino nanoの互換機を買ってみました。
//www.amazon.co.jp/Arduino-Nano-compatible-ATMEGA328P-%E3%83%94%E3%83%B3%E3%83%98%E3%83%83%E3%83%80%E5%AE%9F%E8%A3%85%E6%B8%88%E3%81%BF/dp/B008SINCWE
Arduino UNOに比べてご覧の小ささです。今回はLEDの点滅実験(Lチカとこの業界では呼ぶ)をやって動作確認終了。Windows10、IDE1.6.11で特に何もしないでも動きました。
 

2017年2月16日 20時31分29秒 (Thu)

今朝の朝刊に掲載されました

昨日のつくば産総研と高知市行川学園の遠隔授業が今朝の高知新聞に掲載されました。これを機会にArduino が流行ればいいのですが。

img_20170216-203234.jpg

2017年2月15日 20時10分32秒 (Wed)

Arduino で遠隔でロボットを動かして小中学生に授業

本日、つくばの産総研と高知の行川学園をインターネットで繋いで、相互にロボットを遠隔で動かす実験をしました。遠隔でのロボット操作は宇宙ロボットに通じます。行川学園の児童生徒さんが一人ひとり産総研にあるロボットを動かしました。その様子は、RKC高知放送、さんさんテレビの夕方のニュースで紹介されました。
子供達が楽しくインターネットに興味を持ってくれれば大変嬉しいです。

関係者の皆様、ありがとうございました。

img_20170216-071244.jpg
img_20170216-071255.jpg
img_20170216-071305.jpg
img_20170216-071315.jpg


プロフィール

プロフィール画像
ニックネーム
宇宙技術汎用化トレーナー 岩田 敏彰
性別
男性
血液型
A型

ブログ

1234
567891011
12131415161718
19202122232425
262728
QRコード
携帯用QRコード
アクセス数
ページビュー数