1Sheeldを使用したArduinoベースのAmazonEcho
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 30 | ||||
| × | 3 |
必要なツールとマシン
| ||||
|
アプリとオンラインサービス
> |
|
このプロジェクトについて
数ヶ月前、私は私の友人を訪ねました、そして私は彼が所有していたアマゾンエコーに驚いていました。
音楽を再生したり、家の照明を制御したり、ニュースや天気の状況を教えたり、日付や時刻を教えたりすることができます。これらはすべて音声コマンドだけで行えます。
その時、私の中のメーカーは「自分で作ってみませんか!」と叫びました。
そしてその日から、素晴らしい1Sheeldを見つけるまで、arduinoベースのAmazonEchoを作成するのに役立つコンポーネントを探し始めました。
1SheeldはArduinoのプラットフォームであり、スマートフォンのセンサーと機能を利用して、Arduinoプロジェクトで使用できるようにします。
基本的に、これはArduinoボードの上に配置され、Bluetoothを介してこのAndroidアプリと通信し、アプリとスマートフォンの間でデータを転送するハードウェアシールドです。
1SheeldのWebサイトで入門チュートリアルを確認できます。このチュートリアルでは、1Sheeldを非常にスムーズに操作できるようになるまで段階的に説明します。これは、優れたArduinoプロジェクトの優れたリファレンスです。
このプロジェクトでは、1Sheeldの40以上のシールドから5つのシールドを使用しました。
1つ目は音声認識シールドです 音声コマンドでシステム全体を制御するために使用しましたが、1行のコードでアクティブ化できるのは非常に単純なシールドです: VoiceRecognition.start();
次に、ミュージックプレーヤーシールドを使用しました これにより、スマートフォンの音楽プレーヤーを利用して、再生したいトラックを非常にスムーズに選択できます。実際には、この行を使用して音楽プレーヤーのシールドを再生するだけで済みます。 MusicPlayer.play();
>
私が使用した3番目のシールドは、プロジェクトで最も重要なシールドの1つであり、テキスト読み上げシールドです。 プロジェクトにヒューマノイドの相互作用を追加して、誰かがあなたの言っていることに応答しているので、システムを応答させるのはとても簡単でした: TextToSpeech.say( "time in cairo is");
テキスト読み上げシールドをアクティブにした後、クロックシールドをアクティブにしました これはリアルタイムで時計を返し、システムは私がそれを要求すると、驚くべき時間で応答することができます!そうではありません:)、そして私はこの関数を使用して私の電話の現在の時刻を簡単に取得することができます: Clock.queryDateAndTime();
私が最後に使用したシールドはインターネットシールドです 私の意見では、これは1Sheeldで最も強力なシールドです。このシールドを使用して、「openweathermap」WebサイトのAPIを使用して、故郷の天気の現在のステータスを取得しました。この行でAPIを呼び出すことができます。 HttpRequest request1( "/ * APIアドレス* /");
ステップ1:コンポーネントを収集する
- Arduino 101 $ 30.99
- 1Sheeld +ボード$ 54.94
- iPhone $ 155.5
- PVCパイプ$ 2
- LEDストリップ$ 5
- 12V電源$ 7
- リレーボード$ 3
- ジャンパーとワイヤー$ 3
- 3つのNPNトランジスタ$ 1
ステップ2:
パイプに穴を開けて音が出ないようにします
ステップ3:
黒いスプレーでPVCパイプをペイントします
ステップ4:配線を行う
- LEDストリップをトランジスタと電源に接続します
- ランプをリレーボードとAC端子に接続します
- 以下のコードに記載されているように、リレーボードとLEDストリップをArduino101ボードに接続します
- iPhoneをPVCパイプの中に取り付けます
ステップ5:1Sheeldライブラリをセットアップする
ArduinoのIDEから任意のライブラリを管理できます。 [スケッチ]>> [ライブラリを含める]>> [ライブラリの管理]>> [OneSheeld]と入力し、[インストール]をクリックするだけで、準備完了です。または、ここからライブラリをダウンロードできます:http://1sheeld.com/downloads/次に、Arduino IDEを開き、メニューバーからスケッチを選択します>>ライブラリを含める>> .zipファイルを追加します>>次に、zipファイルを選択しますyoダウンロードしたばかりです。
ステップ6:1Sheeldアプリをインストールする
ウェブサイトから1Sheeldモバイルアプリをダウンロードするか、ApplePlayストアまたはGooglePlayストアにアクセスしてアプリを入手できます。
ステップ7:シールドにアクセスする
1Sheeld入門チュートリアルに従い、最後に次のシールドを選択しました
- 音声認識
- テキスト読み上げ
- 時計
- インターネット
- 音楽プレーヤー
次に、複数のシールドボタンを押します。
コード
- Amazonエコーコード
Amazonエコーコード Arduino
/ *オプション:ライブラリのコンパイル済みサイズを減らし、メモリ使用量を制限するには、CUSTOM_SETTINGSとそれぞれのINCLUDE_定義のシールドを定義して、スケッチに含めるシールドを指定できます。 * /#define CUSTOM_SETTINGS#define INCLUDE_INTERNET_SHIELD#define INCLUDE_VOICE_RECOGNIZER_SHIELD#define INCLUDE_TEXT_TO_SPEECH_SHIELD#define INCLUDE_MUSIC_PLAYER_SHIELD#define INCLUDE_CLOCK_SHIELD / *インクルード1 * /#include/ *ミリ秒カウンターの初期値を作成します。 * / unsigned long previousMillis =0; / * alexaを呼び出すための初期状態を作成します。 * / bool state =0; / * cairo、egyptの気象ステータスを返すAPIを呼び出します。 * / HttpRequest request1( "http://api.openweathermap.org/data/2.5/weather?q=Cairo,EG&appid=43d95b4cf5d0573e2dfe5186c160017a"); / *ピン3、5、6に3つのトランジスタを定義します。* /#define strip1 3#define strip2 6#define strip3 5 / *ピン13のランプを定義します。* / int lamp =13; / *時間と分を保持する変数を定義します。 * / int hour、minute; / *文から必要な文字列をキャッチするために、2つの文字列を作成します。 * / char b [4]; char c [4]; / *時間と最小値を文字列で保持する変数を定義します。 * / String strh、strm; / *日のステータスを午前または午後に保持する変数を定義します。 * / String noon; / *ユーザーが設定した音声コマンド。 * / const char mainCommand [] ="alexa"; const char WeatherCommand [] ="今日の天気はどうですか"; const char playCommand [] ="音楽を再生"; const char clockCommand [] ="今何時ですか"; const char stopCommand [] ="stop"; const char lightonCommand [] ="ライトをオンにする"; const char lightoffCommand [] ="ライトをオフにする"; void setup(){/ *通信を開始します。 * / OneSheeld.begin(); / * LEDストリップとランプを出力に設定します。 * / pinMode(strip1、OUTPUT); pinMode(strip2、OUTPUT); pinMode(strip3、OUTPUT); pinMode(lamp、OUTPUT); / *リクエストの成功コールバックをサブスクライブします。 * / request1.setOnSuccess(&onSuccess1); / * json値の応答をサブスクライブします。 * / request1.getResponse()。setOnJsonResponse(&onJsonReply1); / *認識された音声で、関数「myfunction」を呼び出します。 * / VoiceRecognition.setOnNewCommand(&myFunction);} void loop(){/ *ミリ秒カウンターを使用して5秒間遅延させ、音声検出を維持します。 * / unsigned long currentMillis =millis(); if(currentMillis-previousMillis> =5000){previousMillis =currentMillis; / *お使いの携帯電話の現在の時刻を取得します。 * / Clock.queryDateAndTime(); / *音声認識を開始します。 * / VoiceRecognition.start(); } / *スマートフォンの時間と分を変数に保存します。 * /時間=Clock.getHours();分=Clock.getMinutes(); / *午前または午後の場合は時間ステータスを検出します。 * / if(時間> 12){時間-=12;正午="P M"; } else {noon ="A M"; } / *時間と分を文字列として保存します。 * / strh =String(hour); strm =String(minute); / *文字列を文字配列に保存します。 * / strh.toCharArray(b、4); strm.toCharArray(c、4);} / *この関数は、新しいコマンドが指定されるたびに呼び出されます。 * / void myFunction(char * commandSpoken){/ *誰かがalexaを呼び出すかどうかを確認します。 * / if(!strcmp(mainCommand、VoiceRecognition.getLastCommand())){alexon(); MusicPlayer.setVolume(5); / *はいの場合、状態を=1にします。 * /状態=1; } / * alexaを呼び出した後に音楽を再生するように要求したかどうかを確認します。 * / if(!strcmp(playCommand、VoiceRecognition.getLastCommand())&&state ==1){alexoff(); MusicPlayer.play(); delay(10000); MusicPlayer.stop();状態=0; } / * alexaを呼び出した後に天気のステータスを取得するように求めたかどうかを確認します。 * / else if(!strcmp(weatherCommand、VoiceRecognition.getLastCommand())&&state ==1){alexoff(); Internet.performGet(request1); / * 5秒間待ちます。 * / OneSheeld.delay(5000);状態=0; } / * alexaを呼び出した後に時間を求めたかどうかを確認します。 * / if(!strcmp(clockCommand、VoiceRecognition.getLastCommand())&&state ==1){alexoff(); / * 1Sheeldはテキスト読み上げを使用して応答します。 * / TextToSpeech.say( "カイロでの時間は"); delay(1300); TextToSpeech.say(b); delay(600); TextToSpeech.say(c); delay(800); TextToSpeech.say(正午); delay(500);状態=0; } / * alexaを呼び出した後にランプをオンにするように要求したかどうかを確認します。 * / if(!strcmp(lightonCommand、VoiceRecognition.getLastCommand())&&state ==1){alexoff(); digitalWrite(lamp、HIGH); TextToSpeech.say( "ライトがオンになりました"); delay(6000);状態=0; } / * alexaを呼び出した後にランプをオフにするように要求したかどうかを確認します。 * / else if(!strcmp(lightoffCommand、VoiceRecognition.getLastCommand())&&state ==1){alexoff(); digitalWrite(lamp、LOW); TextToSpeech.say( "ライトがオフになりました"); delay(3000);状態=0; }} void onSuccess1(HttpResponse&response1){/ *応答を使用して、必要な値になるまでJsonチェーンをクエリします。 * / / *つまり、応答の配列「weather」の最初のオブジェクトで「main」の値を取得します。 * / / *応答がJSON形式であることを提供します。 * / response1 ["weather"] [0] ["main"]。query(); delay(200); } void onJsonReply1(JsonKeyChain&hell、char * output){if(hell ==request1.getResponse()["weather"] [0] ["main"]){TextToSpeech.say( "今日のカイロの天気は" ); delay(2000); / * 1Sheeldは、テキスト読み上げシールドを使用して応答します。 * / TextToSpeech.say(output); }} void alexon(){/ *アマゾンエコーの同じオーダーのように順番にストリップをオンにします。 * / digitalWrite(strip1、HIGH); delay(200); digitalWrite(strip2、HIGH); delay(200); digitalWrite(strip3、HIGH); } void alexoff(){/ *ストリップをオフにします。 * / digitalWrite(strip1、LOW); digitalWrite(strip2、LOW); digitalWrite(strip3、LOW); }
回路図
製造プロセス