Front page   Edit Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes

Diff of Arduino Nano + Acceleration Sensor

Top / Arduino Nano + Acceleration Sensor

* Arduino Nano + Acceleration Sensor [#f07b94ae]

#ref(./arduino_nano_acc.jpg,30%)
#ref(./arduino_nano_acc_result.jpg,20%)
&ref(./arduino_nano_acc.jpg,30%);
&ref(./arduino_nano_acc_result.jpg,20%);

1枚のブレッドボードに、Arduino Nanoと [[3軸加速度センサモジュール(秋月電子通商:KXM52-1050):http://akizukidenshi.com/catalog/g/gI-01425/]]を載せました。

Arduino Nanoは、ADCでセンサモジュールの信号を読み取るとともに、その信号をシリアル通信でPCに送信します。

Arduino Nanoからセンサ信号を受け取り、PCのディスプレイにグラフ表示するプログラムは、Processingで実現しました。

** サンプルプログラム [#la7f06e9]

*** Arduino Nano [#ke203905]
 int ad_pin_a[3] = { 1, 0, 2 };
 int a[3];
 
 void tx_word(int data)
 {
   Serial.print((0x00ff & (data >> 8)), BYTE);
   Serial.print((0x00ff & data), BYTE);
 }
 
 void setup()
 {
   Serial.begin(9600);
 }
 
 void loop()
 {
   int i;
 
   for (i = 0; i < 3; i++) {
     a[i] = analogRead(ad_pin_a[i]);
   }
 
   if (Serial.available() > 0) {
     tx_word(a[Serial.read()]);
   }
 }

*** Processing [#r95f033a]
 import processing.serial.*;
 
 Serial port;
 
 int w = 800;
 int h = 600;
 int y0 = h/2;
 int bias = 512;
 
 boolean draw_flag = true;
 
 int[] a = new int[3];
 int[] a_offset = new int[3];
 
 int t = 0;
 
 int rx_word()
 {
   int data;
   
   data = (port.read() << 8) + port.read();
   
   return data;
 }
 
 void draw_axis()
 {
   stroke(0);
   line(0, y0, w, y0);
 }
 
 void plot_data(int data, char c)
 {
   if (c == 'r') stroke(255, 0, 0);
   if (c == 'g') stroke(0, 255, 0);
   if (c == 'b') stroke(0, 0, 255);
   strokeWeight(5);
   point(t, y0 - (int)(0.6*(data - bias)));
   strokeWeight(1);
 }
 
 void setup()
 {
   port = new Serial(this, "COM2", 9600);
   
   size(w, h);
   
   for (int i = 0; i < 3; i++) {
     a_offset[i] = 0;
   }
 }
 
 void draw()
 {
   for (int i = 0; i < 3; i++) {
     port.write(i);
     a[i] = rx_word() - a_offset[i];
   }
   
   for (int i = 0; i < 3; i++) {
     print(a[i]);
     print(' ');
   }
   println();
   
   if (draw_flag) {
     if (t == 0) background(255);
     draw_axis();
     
     plot_data(a[0], 'r');
     plot_data(a[1], 'g');
     plot_data(a[2], 'b');
     
     t = (t+1) % w;
   }
 }
 
 void mouseClicked()
 {
   draw_flag = !draw_flag;  
 }
 
 void keyPressed()
 {
   if (key == 'c')
   {
     for (int i = 0; i < 3; i++) {
       port.write(i);
       a_offset[i] = rx_word();
     }
     a_offset[0] -= 512;
     a_offset[1] -= 512;
     //a_offset[2] -= 768;
     a_offset[2] -= 710;
   }
 }

** デモ [#g339e3f8]