タグ

ブックマーク / garretlab.web.fc2.com (9)

  • Arduino Unoのメモリ

    プログラム内で利用する変数は、通常、SRAM上に配置されます。読み取り専用のデータ(つまり、変数定義時に初期化できる変数)は、フラッシュメモリにおいてSRAMを節約することができます。また、EEPROMにデータを格納することもできます。フラッシュメモリとEEPROMに配置したデータは、スケッチの中では「直接」利用することはできず(変数によるアクセスができません)、API(関数)を利用して一旦SRAM上の変数に値をコピーする必要があります。 フラッシュメモリのデータはスケッチ内で初期化できるだけで、スケッチの実行中の書き換えはできません。EEPROMに初期値を書き込むには、avr-gccの機能を利用する必要があります。 フラッシュメモリ フラッシュメモリには、スケッチとブートローダが配置されます。プログラム内で利用する変数も格納することもできます。 フラッシュメモリにデータを格納には、スケッ

    Arduino Unoのメモリ
    rin1024
    rin1024 2014/02/22
    “pgm_read_word(”
  • Arduinoソフトウェアの内部構造

    はじめに Arduinoソフトウェアが提供する関数の実装・内部構造を解析していきます。Arduino Unoが対象です。 Arduino AVR Boards 1.8.6のソースコードベースで極力最後まで追っていくことを目標としています。解説ではなく、解析なので注意してください。 Arduinoのリファレンスの翻訳はこちらです。 ソースコード中、#if で区切られているところは、Arduino Uno用のコードを見ていきます。このため、Arduino MegaやArduino Leonardoの場合は異なる実装になっている可能性があります。 Arduino

    Arduinoソフトウェアの内部構造
  • グラフィック液晶ディスプレイ

    実験 ソフトウェアのダウンロード KS0108に対応したドライバがArduinoには用意されています。SG12864ASLB-GBのコントローラは、KS0107ですが問題なく動作するようです。 Arduinoの公式ページ内には、KS0108 Graphics LCD libraryというページがあります。ここを読んでいくと、改良型のライブラリとして、glcdというライブラリがあるようです。今回は、このページから、glcd-20110423.zipをダウンロードしました。 このライブラリの詳細な説明は、上記ファイルを展開して作成される、glcd/docというディレクトリにある、GLCD_Documentation.pdfやGLCDref.htmを参照してください。 ライブラリのインストール ソフトウェアのインストール方法は以下の通りです。詳細は、ダウンロードしたファイルを展開するとできる、r

  • モータードライバ

  • 加速度センサ

    標準電圧は3.3Vとなっていますが、仕様の範囲内なので5Vで使いました。 出力電圧と加速度の関係 上記のデータより、出力電圧をv(V)、加速度をa(単位はg)とすると、出力電圧と加速度の関係は以下の数式であらわされます。 $$v = a \times Vdd / 5 + Vdd / 2$$ 例えば、Vddが5V、加速度が1gのときは、aに1を代入して、3.5Vの電圧が出力されることになります。 実験 加速度センサを傾けていき、角度を変化させ、出力される電圧を測定しました。角度を変えるのは結構厄介だったので、三角定規で測れる、±30度、±45度、±60度と、0度、±90度での値を測定しました。0度のときに、0gとなるようにしました。下の図の赤矢印の方向の加速度です。また、加速度センサそのものは静止した状態で測定しました。 測定結果は以下の通りでした。

    加速度センサ
  • Arduino内蔵温度センサ

    概要 Arduino(ATmega328)に内蔵されている温度センサの実験をします。ESP-WROOM-32に内蔵されている温度センサの実験はこちら。 ATmega328のデータシートを眺めていると、温度センサが内蔵されていることに気が付きました。参照電圧を1.1Vに設定して、アナログポートの8番の値を読み取ると、温度を取得できるようです。Arduinoに何も接続することなく試せるためさっそく実験してみました。 実験その1 まずは、analogRead()で8番ポートの値を読み取ってみました。出力された値を見ると、常に1023でした。 Webで調べてみると、現状のanalogRead()では、8番ポートの値を読み取れないことがわかりました。問題はanalogRead()の以下のコードです。

    Arduino内蔵温度センサ
  • 大気圧センサ

    概要 MPL115A2という大気圧センサを使った実験です。大気圧センサですが、大気圧以外に気温も測定できます。ただし、測定する気温は大気圧補正のための計算データとして利用するためのようで、データシートには精度については触れられていませんでした。 実際には、秋月電子通商で販売している、丸ピン実装済みの製品を利用しました。 目的 MPL115A2というセンサを使って、大気圧と気温を測定します。このセンサは、I2Cを使って通信を行うため、Wireライブラリの使い方の実験も兼ねています。 データシート MPL115A2のデータシートを参照して、どのようなものかを調べました。 概要 MPL115A2の仕様の概要は以下の通りです。

    大気圧センサ
  • 赤外線リモコン

    また、LEDがONとなっている部分は、LEDをつけっぱなしにしているのではなく、38kHzのキャリア周波数で変調をかけていて、そのデューティー比は1/3と書いてあります。つまり、1秒間に38000回点滅していて、点灯している時間は点灯していない時間の2分の1ということです。これらを、まとめると、以下のような図であらわすことができます。 プログラムの考え方 将来のことを考えて、C++のクラスをとりあえず作成しました。 38kHzのキャリア周波数の実現 38kHzのキャリア周波数で、1/3のデューティー比を実現するには、前述の図の通り、赤外線LEDを、8.8μsのONと17.5μsのOFFを繰り返すことで実現できます。Arduinoで制御できる時間は、マイクロ秒までなので、9μsのONと17μsのOFFで近似することにします。これにより、周期が26μsとなるので、38.46kHzのキャリア周波

    赤外線リモコン
  • 赤外線リモコンコード解析(NECフォーマット)

    概要 赤外線センサを利用して、NECフォーマットの赤外線リモコンのコードを表示するプログラムを作成します。 PARA LIGHT ELECTRONICS社のPL-IRM2161-C438という赤外線センサを使います。 この実験ではArduino Unoを利用しています。ESP-WROOM-32での実験はこちら。 ハードウェア 以下のものを利用しました。 Arduino Uno 赤外線センサ(PARA LIGHT ELECTRONICS社のPL-IRM2161-C438) (PC) (USBケーブル) (ブレッドボード) (ジャンプワイヤ) データフォーマット 赤外線リモコンでよく使われるデータフォーマットには、以下の3つがあるようです。 NECフォーマット 家電協フォーマット SONYフォーマット 私の家にあるDVDレコーダはは東芝製で、このレコーダは、NECフォーマットを採用しているよう

    赤外線リモコンコード解析(NECフォーマット)
  • 1