2011年10月21日金曜日

タクトスイッチを使う。

Arduinoの5V出力をタクトスイッチにつなげて、
Arduinoの入力ピンで状態を受け取る。

LEDには330Ωの抵抗を使ったが、タクトスイッチには?
仮に抵抗を使わなかった場合には、
5V / 0Ω = ?
無限大の電流が流れて、ショートの状態となってしまう。

10KΩの抵抗を使う。
茶 黒       橙     金
1 0 x 1000  ±5%



スケッチはこのように書いた。
#define  LED  13
#define  SW   6

int val = 0;

void  setup()
{
  pinMode( LED, OUTPUT );
  pinMode( SW, INPUT );
}

void  loop()
{
  val = digitalRead( SW );
  if( val == HIGH ){
    digitalWrite( LED, HIGH );
  } else {
    digitalWrite( LED, LOW );
  }
}


これはスイッチを押している間だけLEDが点灯するスケッチ。
やはりスイッチはON/OFFに使いたい。

Arduinoは1秒間に数百万行のコードを実行できる。
指でスイッチを押している間にも、loop関数は何度も呼び出される事になる。

そのうちの押し初めの1回だけ検出する = 「前回がLOW、今回がHIGH」

#define  LED  13
#define  SW   6

int val = 0;
int valOld = 0;
int state = 0;

void  setup()
{
  pinMode( LED, OUTPUT );
  pinMode( SW, INPUT );
}

void  loop()
{
  val = digitalRead( SW );
  if( val == HIGH && valOld == LOW ){
    state = 1 - state;
    delay(10);
  }
  valOld = val;
  if( state == 1 ){
    digitalWrite( LED, HIGH );
  } else {
    digitalWrite( LED, LOW );
  }
}

2011年10月17日月曜日

抵抗をつけてみる。

Lチカで気になることがある。
Arduinoの5V出力をそのままLEDに繋げているが無理は無いのだろうか?

LEDの定格電圧と定格電流はどれくらいだろう。
「Arduinoをはじめようキット」には記載が無いが、
ちまたでは、赤色LED3mmは 1.80V 10mA ぐらいのようだ。

オームの法則は 抵抗Ω = 電圧V / 電流A となる。
5V電源でLEDに10mA流すには
(5 ー 1.80)/ 0.01 = 320Ω

キットには330Ωの抵抗が入っているのでこれを使おう。
抵抗の値は色線で表されている。
330Ωは 橙 橙 茶 金 → 33 x 10 = 330Ω±5%

こころなしか明るさがマイルドになった感じ。

ブレッドボードを使ってみる。

前回のArduino直差しをブレッドボードに移してみるとこうなる。
スケッチはそのままで、13番ポートとGNDがジャンパー線で繋がっている。

ブレッドボードの内部はこんな配線になっている。
オレンジが配線。











2011年10月16日日曜日

初めてのスケッチ Lチカ

Arduino IDEを使って初めてのスケッチを書いてみる。
まずはLEDチカチカ。

ArduinoにLEDを差してみる。

LEDは長い方がアノードといいプラスにつなぐ。
短い方はカソードといいマイナスにつなぐ。
今回は長い方を13番ポート、短い方をGNDに直差しです。
本当は抵抗がいるとかなんとか。。。

スケッチはこんな感じです。
------------------------------------------------

#define  LED  13

void  setup()
{
  pinMode( LED, OUTPUT );
}

void  loop()
{
  digitalWrite( LED, HIGH );
  delay( 2000 );
  digitalWrite( LED, LOW );
  delay( 1000 );
}

------------------------------------------------

IDEのVerifyボタンを押してUploadボタンを押すと

点いた!

ちなみにGND(グランド)とは、電源を使い終わったら繋ぐところ。らしい。

Arduinoが届いた!

オープンソースハードウェアのArduino。
金曜夜に注文して日曜朝に届いた。
Amazonはすばらしい。

「Arduinoをはじめようキット」なので
Arduino UNOとブレッドボード、LEDや抵抗が入っている。

イタリア製とあってパッケージがキレイ。

裏面にはイタリアの地図が印刷されている。

早速USBをつないでみると緑色のONランプが点灯、オレンジのLランプが点滅。
UNOとmac OS Xの組み合わせではドライバインストールは不要。

mac側ではこんなメッセージが出ている。

ネットワーク?デバイスではなくて?
とりあえず適用を押しておいた。

2011年10月15日土曜日

画面ロックアプリの作成(インストール)

Android Marketは登録していないのでDropBoxで開く。






親指で押せるようになった。
押せば即画面ロックする。


アンインストールする前には、デバイス管理者を無効にする必要がある。
[現在地情報とセキュリティ]→[デバイス管理者を選択]















画面ロックアプリの作成(やっと本題)

AndroidManifest.xml
デバイス管理APIをつかうためにreceiverを定義する。
receiver   : LockReceiver(DeviceAdminReceiverを継承したクラス)
permissionに "android.permission.BIND_DEVICE_ADMIN" 
intent-filter : "android.app.action.DEVICE_ADMIN_ENABLED"
この指定をするとインストール時にユーザ確認をしてくれる。
receiverはXMLファイルで定義するのだが、ファイル名は
resourceで指定した "@xml/device_admin" となる。
-------------------------------------------------------------------------------------------

<receiver android:permission="android.permission.BIND_DEVICE_ADMIN"          
     android:name=".LockReceiver">
        <meta-data android:name="android.app.device_admin"                       android:resource="@xml/device_admin" />
        <intent-filter>
       <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"></action> 
        </
intent-filter>
</receiver>
-------------------------------------------------------------------------------------------

device_admin.xml
アプリインストール時にforce-lockのユーザ確認が行われる。
-------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<device-admin
  xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
        <force-lock />
  </uses-policies>
</device-admin>
-------------------------------------------------------------------------------------------

LockReceiver.java
DeviceAdminReceiverを継承したクラス。
実装は何もしない。

LockNowActivity.java
-------------------------------------------------------------------------------------------
public class LockNowActivity extends Activity {

// デバイスで強制されたポリシーを管理するためのクラス(の変数)
DevicePolicyManager m_devicePolicyManager;
// LockReceiverクラス生成用
ComponentName m_lockReceiver;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ハンドラ取得
        m_devicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);


        // LockReceiverが有効かをチェック
        m_lockReceiver = new ComponentName(this, LockReceiver.class);
        boolean active = m_devicePolicyManager.isAdminActive(m_lockReceiver);
        if (active) {
   // 有効なので画面ロック
         m_devicePolicyManager.lockNow();
        } else {
   // 有効化する
            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, m_lockReceiver);
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Due to lock screen.");
            startActivity(intent);
        }
         finish();
   }
}

-------------------------------------------------------------------------------------------



画面ロックアプリの作成(サンプルプロジェクト)

プロジェクトの作成
[ファイル]→[新規]→[その他]→[Androidプロジェクト]
プロジェクト名:(ここでは)LockNow

この時点でHelloWorldアプリが出来上がっている。
-----------------------------------------------------------------------------------
<AndroidManifest.xml>
Activity : ".LockNowActivity"
intentFilterに "android.intent.action.MAIN" が指定されているので
アプリ起動時にこのActivityが呼び出される。
同じく "android.intent.category.LAUNCHER" が指定されているので
ホーム画面のランチャーに配置できる。
画面ロックアプリには都合がいい。

<LockNowActivity.java>
onCreate : setContentViewで R.layout.main レイアウトを呼び出すだけ。

<main.xml>
LinearLayout : TextView が配置されてその中身は "@string/hello" 。

<strings.xml>
hello : Hello World, LockNowActivity!
-----------------------------------------------------------------------------------

動かしてみる。

PC上のエミュレータAVDの作成
[ウィンドウ]→[Android SDKおよびAVDマネージャ]
ターゲットAPIを選択して作成

[実行]→[デバッグ]

ちゃんとブレークポイントで止まります。
DDMSパースペクティブだとスクリーンショットも撮れます。


画面ロックアプリの作成(環境構築)

Eclipse
どうやら10周年らしい。
バージョン3.7 INDIGO


pleiadesで日本語化するにはeclipse.iniにjarファイルの指定を追記するのだが、
macでは普通にFinderで探しても見えない。
Eclipseアイコンをcontrolクリックして
「パッケージの内容を表示」を選択するとeclipse.iniまでたどり着く。


EclipseアイコンはEclipse.appというアプリケーションファイルで
その下にディレクトリ階層を持っている。
ちなみにその中のEclipse本体はunix実行ファイルという形式でターミナルのアイコンになっている。

相対ファイルでjarを指定。
-javaagent:../../../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

ようやく起動だが、初回は-cleanオプションがないとエラーが出る。
ターミナルで下記を打ち込む。
/Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse -clean



Android
Android SDK
ここかダウンロードして適当なところに配置する。

EclipseのAndroid Plugin
[ヘルプ]→[新規ソフトウェアのインストール]
名前    :何でも良い
ロケーション:https://dl-ssl.google.com/android/eclipse/
[Eclipse]→[環境設定]
 android SDKロケーションでAndroid SDKの場所を指定


Platform API
[ウィンドウ]→[Android SDK and AVD Manager]
 Installed Packagesですべて更新するとAPIのバージョンを選択できる。
 今回の画面ロックには2.2で導入されたデバイス管理APIを使うため2.2を選択。
 (依存関係でAndroidPlatformTools Revision7がいるみたい)

画面ロック

スマートフォンになってもやっぱり操作は片手の親指だけでしてる。
そして使い終わってカバンに入れるときには画面をロックする。

この画面ロックのための電源ボタンが曲者で本体の一番上にある。(Xperia)
となると親指では届かず持ち替えないといけない。

この「持ち替える」で非常にストレスが貯まる。








そこで画面ロックするためのアプリを作る事にした。

2011年10月14日金曜日

基本のメモ



  • DC電源
    直流電源(←AC交流)
    Arduinoは動作電圧5V、入力電圧7〜12Vで、USBやACアダプタが基本みたい。
    コードをなくすには電池単3x4、単5(9v) →2.1mm電源プラグでいけるのかな。
    http://roboduino.blogspot.com/2009/06/arduino.html
    9V電池の代わりにこれもいけるかも。
  • PWM
    モータの制御に使う。
    DCモータ ←電圧が高いと速く、低いと遅く回転
     でもマイコンからの出力は固定電圧なので制御が大変。
     そこで出力時間を制御して回転速度を制御できるのがPWM(らしい)。

    サーボモータ ←電圧がかける時間幅で回転角度が決まる

  • AVR
    8ビットマイクロコントローラ。
    たぶんこれがOSみたいな役割なんだろう。
    素で使うには統合開発環境「AVR Studio」でプログラミングする。
    Arduinoに積まれているAVRは「Arduino IDE」がIDE。
    C言語風の言語で書いて、IDEがC言語に変換してgccコンパイルという流れのようだ。

2011年10月12日水曜日

やってみたいこと。

こんなことをやってみたい。


  1. 電子工作
    ・ブレッドボード

      
    ・回路
    ・はんだ
    ・サーボ










  2. Android開発
    ・ADK
    ・MicroBridge
    ・Arduino