秋月で最近発売された3軸加速度センサモジュール KXSC7を試す。



KXR94に近いがKXSC7の方が安く、ノイズが少し多く、ピン配置は異なる。1gal以下を測定する必要が無ければKXSC7で十分かも知れない。
秋月で最近発売された3軸加速度センサモジュール KXSC7を試す。



KXR94に近いがKXSC7の方が安く、ノイズが少し多く、ピン配置は異なる。1gal以下を測定する必要が無ければKXSC7で十分かも知れない。
IntelGalileoでシリアルモニタを開かないでシリアル出力し続けるとフリーズする。
ソース:
int led = 13;
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
for(int i=0;i<100;i++){
Serial.println("test");
}
}
結果:
IntelGalileo→約30秒間LED点滅してフリーズ
ArduinoUNO R3→フリーズしない


Intel GalileoではI2C液晶モジュールACM1602NIはどうやっても動かなかった。前回の液晶を採用して16bitADコンバータADS1115を接続してみた。CPUの温度が50℃を超えた辺りから動作が怪しくなり遂に書き込みできなくなった。三端子レギュレータに使うヒートシンクとファンを設置すると安定した。温度計とヒートシンクは割り箸で固定した。
サンプリングレートはデフォルトのままで加速度センサーの測定値を液晶に表示した。ノイズは十分低いので計測震度の計算に利用できると思う。次はFFT処理をする。
スケッチ
// I2Cdev : https://github.com/jrowberg/i2cdevlib
// LiquidCrystal_I2C :
// http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/
#include <Wire.h>
#include "ADS1115.h"
#include <LiquidCrystal_I2C.h>
ADS1115 adc0(ADS1115_DEFAULT_ADDRESS); //ADDR:GND
LiquidCrystal_I2C lcd(0x20,8,2);//I2Cアドレス、8行x2
void setup() {
Wire.begin(); // I2C開始
adc0.initialize(); // ADS1115 初期化
lcd.init(); // 液晶初期化
adc0.setMode(ADS1115_MODE_SINGLESHOT);//シングルショット・モード
adc0.setGain(ADS1115_PGA_4P096);//フルスケール±4.096V
}
void loop()
{
adc0.setMultiplexer(ADS1115_MUX_P3_NG);//マルチプレクサ設定
lcd.setCursor(0,0);
lcd.print("X:");
lcd.print(adc0.getConversion());//変換
adc0.setMultiplexer(ADS1115_MUX_P2_NG);
lcd.print(" ");
lcd.setCursor(8,0);
lcd.print("Y:");
lcd.print(adc0.getConversion());
adc0.setMultiplexer(ADS1115_MUX_P1_NG);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Z:");
lcd.print(adc0.getConversion());
lcd.print(" ");
delay(10); //待ち
}
//I2Cdev.cpp
//min関数が無いと言われるので加える
int min(int a,int b){
if(a<b){return a;}else{return b;}
}

前回Intel GalileoのGPIOは遅い事が分かった。I/Oが遅いと何かと不便なのでI/Oエクスパンダを利用して高速化してみる。

aitendoのGPIOエキスパンダ(I2C)に載ってるPCF8574はArduinoのライブラリにもあるので良さそう。ライブラリのインストールはLiquidCrystal_I2C.zipを展開して
arduinoのディレクトリ→libraries
の中に配置すればよい。
スケッチ
#include <Wire.h> //I2C用
#include <LiquidCrystal_I2C.h> //I2C液晶用
LiquidCrystal_I2C lcd(0x20,8,2); // アドレス0x20 8x2行
void setup()
{
lcd.init(); // 液晶初期化
lcd.backlight(); // P7にLEDのon/offが出力できるらしい
}
void loop()
{
while(true){
lcd.clear(); //画面消去
lcd.print("Hello,"); //表示
lcd.setCursor(2,1); //位置
lcd.print("world."); //表示
for (int i=0; i<5; i++){ //点滅
lcd.noDisplay(); //隠す
delay(200); //遅らせる
lcd.display(); //現す
delay(200);
}
}
}
十分な速さになった。

Intel Galileoに秋月で売ってる液晶モジュールを接続した。
液晶のサンプルスケッチはIntel Galileoでは動かない。lcd.initで初期化する必要があるらしい。lcd.initの引数の意味は不明。
#include <LiquidCrystal.h>//LCDライブラリ
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);//rs,enable,d4.d5,d6,d7
void setup() {
lcd.init(1,2,255,3,4,5,6,7,0,0,0,0);//??,rs,??,enable,d4.d5,d6,d7...
lcd.begin(8, 2);//画面サイズ
}
void loop() {
while(true){
lcd.clear();//画面消去
lcd.print("Hello,");//表示
lcd.setCursor(2,1);//位置
lcd.print("world.");//表示
for (int i=0; i<5; i++){//点滅
lcd.noDisplay();//隠す
delay(10);//遅らせる
lcd.display();//現す
delay(10);
}
}
}
噂通り表示が遅い。

USBシリアル変換を負論理にすれば接続できる事を確認する実験。
千石などで売っているUSBシリアル変換アダプターと74HC04で接続できた。Galileoに載ってるMAX3232は3.3V動作でFT232RLも3.3V動作可能なので電圧調整は省いた。