MITAppInventorを使用してArduinoプロジェクト用のカスタムAndroidアプリを構築する方法
このArduinoチュートリアルでは、MITAppInventorオンラインアプリケーションを使用してArduinoを制御するためのカスタムAndroidアプリケーションを構築する方法を学習します。次のビデオを見るか、以下のチュートリアルを読むことができます。
このチュートリアルでは、2つの例があります。最初の例は単純なLEDの制御であり、2番目の例はスマートフォンを使用したステッピングモーターの制御です。以前のチュートリアルでは、HC-05 Bluetoothモジュールを使用してArduinoボードとスマートフォンの間でBluetooth通信を行う方法をすでに学び、最初の例に必要なArduinoコードについて説明しました。
そのコードの概要は次のとおりです。したがって、シリアルポートを介して、スマートフォンから着信データを受信し、それを「状態」変数に格納します。 「LED:OFF」ボタンを押したときにスマートフォンから送信される文字「0」を受信すると、LEDをオフにして、「LED:OFF」という文字列をスマートフォンに送り返します。一方、「1」の文字を受け取った場合は、LEDをオンにして、文字列「LED:ON」を送り返します。
そこで、特定のボタンが押されたときにこれらの文字「0」と「1」を送信し、Arduinoから着信文字列を受信するカスタムAndroidアプリケーションを構築する必要があります。
MIT App InventorのWebサイトから、[アプリの作成]をクリックしてオンライン構築アプリケーションにログインする必要があります。ボタン。ログインするには、Gmailアカウントが必要です。ログインすると、最初のプロジェクトを作成できます。デザインウィンドウの外観は次のとおりです。これで、アプリケーションの作成を開始できます。
ただし、その前に、スマートフォンをこのプロジェクトに接続して、アプリがスマートフォン上で直接どのように形成されているかをリアルタイムで確認できます。これを行うには、まずPlayストアからMIT AI2 Companionアプリをダウンロードして、スマートフォンにインストールする必要があります。次に、オンラインエディターの[接続]メニューから[AIコンパニオン]を選択すると、バーコードが表示されます。バーコードをスキャンするか、スマートフォンアプリにコードを挿入するだけで、オンラインエディターとスマートフォンアプリ間の接続が確立されます。
たとえば、オンラインエディタの画面にボタンを挿入すると、そのボタンはスマートフォンにもリアルタイムで表示されます。これと同様に、アプリの作成中にスマートフォンを使用したくない場合は、Androidエミュレーターをコンピューターにインストールして同じように使用できます。エミュレーターのセットアップ方法の詳細については、同社のWebサイトを参照してください。
これで、最初の例を作成する準備が整いました。プログラムのレイアウトから始めましょう。まず、レイアウトパレットからいくつかのHorizontalArrangementsを追加し、プログラムの目的の外観に一致するように、高さ、幅、配置などのプロパティを設定します。次に、UserInterfaceパレットからListPickerを追加し、それに画像を添付します。 ListPickerは、スマートフォンが接続するBluetoothデバイスを選択するために使用されます。
次に、ラベルを配置する別のHorizontalArrangementsを追加します。このラベルは、スマートフォンがBluetoothモジュールに接続されているかどうかを示します。そのため、このラベルの最初のテキストを「未接続」に設定します。次のラベルは、オフかオンかに関係なく、LEDのステータスを表示するために使用されます。初期状態は「LED:OFF」になります。次に、LEDを制御するための「オン」と「オフ」の2つのボタンを追加します。この時点で、コンポーネントの名前を変更して、後でブロックエディタで簡単に認識して使用できるようにすることをお勧めします。残っているのは、非表示コンポーネントであるBluetoothClientと、接続ステータスのリアルタイム表示に使用される時計を追加することです。
これで、ブロックエディタで、プログラムに命を吹き込む準備が整いました。左側から、以前に追加されたコンポーネントに関連するすべてのブロックと機能を取得しました。
BluetoothListListPickerから始めます。そこから最初に「BeforePicking」ブロックを追加し、それに「setBluetoothElements」ブロックを接続します。次に、BluetoothClientブロックから、「BluetoothClientAddressesAndNames」ブロックを追加します。このブロックのセットは、すでに電話とペアリングされているBluetoothデバイスのリストを設定するため、ListPickerの[接続ボタン]をクリックすると、ペアリングされているすべてのデバイスのリストが表示されます。
次に、特定のBluetoothモジュールを選択または選択した後に何が起こるかを設定する必要があります。 BluetoothClientブロックから、「call BluetoothClient .Connect address」ブロックを追加し、「BluetoothList Selection」ブロックを追加します。これは、電話が以前に選択したBluetoothアドレスに接続することを意味します。
次に、Clockブロックから、「。Timer」ブロックを追加します。このブロック内で、「接続済み」というラベルの「テキストの設定」ブロックを使用して、電話がBluetoothモジュールに接続されているかどうかをリアルタイムで示します。
次に、2つのボタンに命を吹き込む必要があります。したがって、「TurnOn_Button」をクリックすると、Bluetoothクライアント関数「Send1ByteNumber」を使用して、ArduinoBluetoothモジュールに番号を送信します。この場合、これはASCIIテーブルによる文字「1」に対応する49番であり、LEDが点灯します。その直後に、「ReceiveText」BluetoothClient関数を使用して、Arduinoから電話に返送される着信文字列を受信します。この文字列は「LED_Status」ラベルに設定されています。
同じ手順が「TurnOff_Button」にも当てはまり、送信番号を文字「0」に対応する48に変更する必要があります。あとは、スマートフォンにプログラムをダウンロードしてインストールするだけです。これは、「ビルド」メニューからコンピューターに保存してから電話に転送するか、QRコードをスキャンしてプログラムをオンラインでダウンロードすることで実行できます。これが例のデモンストレーションです。
上記のMITAppInventorプロジェクトのダウンロードファイルは次のとおりです。
次に、ステッピングモーターを制御する2番目の例を見てみましょう。画面の上部には、前の例と同じBluetooth接続のコンポーネントがあります。次に、画像の描画と挿入に使用されるCanvasコンポーネントがあります。以前に描いた透明な画像を2枚挿入しました。 1つ目は、所定の位置に固定されるゲージの画像であり、2つ目は、回転するポインターの画像です。次に、手動モードと自動モードまたは連続運転モードを切り替えるためのチェックボタンと、回転方向を変更するためのボタンがあります。ボタンには、ステッピングモーターの回転速度を変更するためのスライダーがあります。
この例の背後にあるブロックとArduinoコードは次のとおりです。したがって、ブロックエディタでも、前の例と同じBluetooth接続用のブロックがあります。
次に、ポインタ画像を回転させるために、ImageSprite関数「.PointInDirection」を使用します。この関数は、画像を0°の位置からキャンバスに触れたX座標とY座標に回転させます。同時に、回転したImageSpriteの見出しを上のテキストラベルに設定します。その後、カスタムメイドのプロシージャ、または実際には10m秒の遅延である関数を呼び出します。
最後に、「SendText」Bluetooth機能を使用して、見出しの値をテキストとしてArduinoに送信します。この値はArduinoによって受け入れられ、それに応じてステッピングモーターを回転させます。
次はCheckBoxブロックです。したがって、チェックボックスがオンになっている場合は、「自動」というテキストをArduinoに送信します。これにより、ステッピングモーターがアクティブになり、継続的に回転します。このモードで「リバース」ボタンを押すと、「リバース」というテキストがArduinoに送信され、モーターの回転方向が変更されます。また、このモードでは、回転速度を変更できます。スライダーの位置を変更すると、スライダーの位置の現在の値がArduinoに送信され、ステッパーの回転速度が変更されます。チェックボックスのチェックを外すと、手動モードに戻ります。これが例のデモンストレーションです。
上記のMITAppInventorプロジェクトのダウンロードファイルと、プロジェクトで使用されている2つの画像は次のとおりです。
2番目の例のArduinoコードは次のとおりです。Arduinoコード
/* Arduino and HC-05 Bluetooth Module Tutorial
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
#define ledPin 7
int state = 0;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(38400); // Default communication rate of the Bluetooth module
}
void loop() {
if(Serial.available() > 0){ // Checks whether data is comming from the serial port
state = Serial.read(); // Reads the data from the serial port
}
if (state == '0') {
digitalWrite(ledPin, LOW); // Turn LED OFF
Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON"
state = 0;
}
else if (state == '1') {
digitalWrite(ledPin, HIGH);
Serial.println("LED: ON");;
state = 0;
}
}
Code language: Arduino (arduino) MIT App Inventor
アプリの構築–例1
BluetoothTest.aia
1ファイル
StepperMotorTest.aia
1ファイル
ステッピングモーターのゲージとポインターの画像
1ファイル/* Stepper Motor Control via HC-05 Bluetooth Module
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
// Defining variables
const int stepPin = 7;
const int dirPin = 6;
String state = "";
int currentHeading=0;
int currentAngle=0;
int lastAngle=0;
int angle=0;
int rotate=0;
int runContinuously=0;
String mode = "Manual";
boolean dirRotation = HIGH;
int rotSpeed = 1500;
void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
Serial.begin(38400); // Default communication rate of the Bluetooth module
}
void loop() {
delayMicroseconds(1);
if(Serial.available() > 0){ // Checks whether data is comming from the serial port
state = Serial.readString(); // Reads the data from the serial port
}
// When Auto Button is pressed
if (mode == "Auto") {
if (state == "Reverse") {
delay(10);
if (dirRotation == HIGH) {
dirRotation = LOW;
}
else {
dirRotation = HIGH;
}
digitalWrite(dirPin,dirRotation);
delay(10);
state = "";
}
rotSpeed = state.toInt();
if (rotSpeed >= 300 && rotSpeed <= 3000) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(rotSpeed);
digitalWrite(stepPin,LOW);
delayMicroseconds(rotSpeed);
}
else {
digitalWrite(stepPin,HIGH);
delayMicroseconds(1500);
digitalWrite(stepPin,LOW);
delayMicroseconds(1500);
}
if (state == "Manual"){
mode = state;
}
}
// When Program is in Manual mode
else if (mode == "Manual"){
currentHeading = state.toInt();
//Serial.println(angle);
//Serial.println(state);
if (currentHeading < 0 ){
currentHeading = 360+currentHeading;
}
currentAngle = map(currentHeading,0,359,0,200);
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
// Makes 200 pulses for making one full cycle rotation
if (currentAngle != lastAngle){
if(currentAngle > lastAngle){
rotate = currentAngle - lastAngle;
for(int x = 0; x < rotate; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
}
if(currentAngle < lastAngle){
rotate = lastAngle - currentAngle;
digitalWrite(dirPin,LOW); //Changes the rotations direction
for(int x = 0; x < rotate; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
}
}
lastAngle = currentAngle;
if (state == "Auto"){
mode = state;
}
}
}
Code language: Arduino (arduino)
製造プロセス
- ドローン用の緊急着陸用パラシュート回収システムを構築する
- プロジェクトに適した素材を選択する方法は?
- Arduinoを使用してモニターをAmbilightにする
- Arduino、1Sheeld、Androidを使用したユニバーサルリモコン
- Arduinoとスマートフォンを使用したDIY電圧計
- 自動化ロードマップを7つのステップで構築する方法
- マグネシウム対アルミニウム:カスタム鋳造プロジェクト用の合金を選択する方法
- プロジェクトに適したクレーンを選択する方法
- カスタムマシニング:プロジェクトの見積もりを準備する方法は次のとおりです
- プロジェクトの鉄鋼要件を見積もる方法
- カスタム金属加工プロジェクトにおけるサンドブラストの利点