「Intel Galileo」タグアーカイブ

IntelGalileoのシリアル出力でフリーズ

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 — ADコンバータを接続する

加速度センサーの値を液晶に表示した
加速度センサーの値を液晶に表示した
回路図
回路図

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 — I/Oエキスパンダで液晶

I/OエキスパンダPCF8574で液晶を表示する
I/OエキスパンダPCF8574で液晶を表示する

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

回路図
回路図

aitendoのGPIOエキスパンダ(I2C)に載ってるPCF8574Arduinoのライブラリにもあるので良さそう。ライブラリのインストールは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に秋月で売ってる液晶モジュールを接続した。

液晶のサンプルスケッチは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);
        }
    }
}

噂通り表示が遅い。

Intel Galileo — UARTで接続

Intel GalileoにUARTで接続したい。

調べるとUARTコネクタに接続するには

PCのシリアルポート→ミニジャック

USBポート→USB-RS232C変換モジュール→ミニジャック

というパターンが多い。UARTならUSB-UART変換モジュールが使えるなー、と思って試したが動かなかった。RS232Cは負論理だった。

PCにはRS232C端子は無いし変換モジュールも無いが、マザーボードにはシリアルポートコネクタがあるので直接引き出す事にした。

シリアルポートコネクタ
マザーボードのシリアルポートコネクタ
オーディオジャックのピン配置
オーディオジャックのピン配置

オーディオケーブルとピンヘッダを適度な大きさに切る。

オーディオケーブルとピンヘッダ
オーディオケーブルとピンヘッダ

先端をRX(PCへIN)、次をTX(PCからOUT)、外側をGNDにハンダ付けする。

ハンダ付けした
ハンダ付け

 

グルーガンで固定
グルーガンで固定

 

シリアルポートに接続
シリアルポートに接続

 

シリアルポート設定
シリアルポート設定

 

接続した
接続した

ちなみにUSBシリアル変換と74HC04を組み合わせるとRS232Cもどきの通信ができるらしい。

Intel Galileo — LED点滅まで

LED点滅までの手順をメモ。

付属のACアダプタを接続する。DC5V2A必須らしい。

ソフトウェアをダウンロードする。

intelのサイト→Intel Galileo Arduino SW 1.5.3 on Windows→ダウンロード

C:¥などに展開する。ドキュメントフォルダ等に何気なく展開するとにエラーが出る。

エラー 0x80010135: パスが長すぎます。
エラー 0x80010135: パスが長すぎます。

エラーが出たらキャンセルして展開途中のファイルを削除してC:¥など出来るだけ短い名前のディレクトリに展開する。Program Filesに展開するとコンパイル時にエラーとなる。コンパイラがスペース文字を含んだファイル名に対応していないらしい。(このエラーが出た場合はファイル→終了で閉じてarduino-1.5.3フォルダごとスペース文字を含まない別の場所に移動する。)

コンパイル時にエラーが発生しました。
コンパイル時にエラーが発生しました。

ボードのUSB CLIENTと書かれたmicroB USBコネクタをPCに接続する。

デバイスドライバをインストールする。

デバイスマネージャ→ほかのデバイス→Gadget Serial v2.4→

プロパティ→ドライバ→ドライバの更新→

コンピューターを参照してドライバーソフトウェアを検索します→

次の場所でドライバーソフトウェアを検索します→

C:¥arduino-1.5.3¥hardware¥arduino¥x86¥tools→次へ→

このデバイスソフトウェアをインストールしますか?→

インストール→閉じる

arduinoを起動する

C:¥arduino-1.5.3¥arduino.exe→開く

ファームウェアを更新

ヘルプ→Firmware Update→はい

サンプルスケッチを書き込んで実行する

ファイル→スケッチの例→01.Basic→Blink→ファイル→マイコンボードに書き込む

ボード上のledが点滅する。

 

Intel Galileoで地震計を作りたい

intel galileo
intel galileo

Intel Galileoで地震計を作りたい。

Arduinoで地震計を作ろうと思い調べたところ、Arduinoは加速度センサの値をPCに送る用途には使えそうだけどメモリ容量が不足していて震度を計算するのは困難に思えた。一方intel galileoはArduino互換でパワフルらしいので地震計を作れると思う。

intel galileoはUSBホストの機能があるようだが、周辺機器はUSBで接続するよりI2CやSPIで接続する方がArduinoっぽいような気がする。ADコンバータAD7298も載ってるのだけど、用途が違う感じ。ADS1115はI2C接続でArduino用のスケッチもあるのでこれを使いたい。

intel galileoの配線図を見てレギュレーターの様子を観察してみる。3.3V端子はDC/DCコンバータTPS652510の出力が来ていて他のデバイスと共用でノイズが凄そう。5V端子はACアダプタ直通だけどADP150を通して3.3Vをセンサーに供給すれば良いと思う。

ADS1115のI2Cが接続できれば加速度のサンプリングは問題ないだろう。震度計算は手頃なfftライブラリが見つからないけど移植してなんとかしよう。

結果の出力は液晶表示が無難かも。前回の巨大7セグ表示が思ったほどインパクトが無かったので何か刺激が欲しい。どうしよう。