まえがき
子供の頃、アメリカの映画をたくさん見て、俳優たちが部屋の明かりを消して「手をたたく」方法に満足していたので、いつも同じことを家で望んでいました。 近年、PCは私の生活の不可欠な部分になりました。家に帰って靴を脱ぐとき、最初にすることは「鉄の馬」をオンにして、それがロードされるのを待つことです。 もちろん、近年、SSDの出現により、この期待は最小限に抑えられましたが、それでもコンピューター自体へのアプローチとともに、それはしばらく失われています。 そして実際に、「マイチャーム」をオンにするための何らかのリモートの方法を作ることができるなら、なぜ部屋に入るのを煩わせ、足でボタンを押すか。
実際、時間の経過とともに、2つの「夢」が融合しました。綿のPCをオンにすることです。 現在、私は大学で勉強しており、回路で授業を行う時が来ました。先生は、紙ではなくハードウェアでそれを行うことができると言いました。 したがって、「1石で2羽の鳥を殺す」チャンスが生まれました。古いアイデアを実現し、コースプロジェクトに合格するためです。 最初のアイデアは、ケースに配置し、電源から電源を供給し、リレーを介してボタンに接続し、回路を短絡できるデバイスを作成することでした。 その結果、彼らは少し拡張してこのアイデアから少し離れることに決めました。システムは、Bluetoothで接続された2つのユニットで構成されます。 1つのブロックは綿を拾い、2番目のブロックに特別な信号を送信しますが、2番目のブロックはこの信号を受信してリレーを閉じます。
どこから始めるか
最初のステップは、ベンチャーを実装するハードウェアを決定することでした。 選択はArduinoプラットフォームにかかっていました。 なぜArduinoなのか? この記事では、少なくともこのプラットフォームの技術的特徴はリストしませんが、これはそれに関するものではないからです。 実際、この質問に対する答えは3つの理由にあります。
- 安い-中国では、このプラットフォームを備えたマイクロコントローラーは5ドル以下で見つけることができます
- 使いやすさ-このプラットフォームにはインターネット上に多くのガイドがあり、それらを理解することは難しくありません
- 膨大な数のさまざまなセンサー
後者は、マイクロコントローラーで何か他のことをしたい人にとっては偶然重要です。 結局のところ、翌日、ボード上の何か他のものをねじ込んで再フラッシュすると、まったく異なるタスクを実行できます。 一般に、トピックに戻ります。
実際、これに必要なもののリストを作成します。
- 2x Arduino Uno R3-各ブロックに1つ
- 2x Bluetooth HC-05-繰り返しますが、各ユニットに1つ、そして最も重要なのは、マスターモードとスレーブモードのみをサポートするHC-05です。
- マイク-シンプルなエレクトレットマイク、通常は1ペニーかかります
- リレー
- 2x LED-赤と緑
- あらゆる種類の配線、抵抗器など
- そしてもちろん、はんだごて
はじめに
マイクロコントローラを検討してください

ご覧のように、文字Aで署名されたアナログピン(A0など)、外部電源の入力、電源+ 5Vおよび+ 3.3Vの出力、デジタルピン、グランドへの出力などがあります。
キットにはケーブルが含まれているため、USB経由でコンピューターに接続できます。 持っていなくても、どの電気店でも買うことができます。 Arduinoを直接操作するために、 公式サイトから入手できる独自の非常に便利なIDEがあります 。
Arduinoで作業を続けるには、彼女について少し話す必要があります
Arduino用のマイクロコントローラーは、事前にフラッシュされたブートローダーの存在によって区別されます。 ユーザーは、このローダーを使用して、従来の個別のハードウェアプログラマーを使用せずに、自分のプログラムをマイクロコントローラーにダウンロードします。 ブートローダーは、USBインターフェイス(ボード上にある場合)を介して、または別のUART-USBアダプターを使用してコンピューターに接続します。 ブートローダーのサポートはArduino IDEに組み込まれており、ワンクリックで実行されます。
ブートローダーを上書きするか、ブートローダーなしでマイクロコントローラーを購入する場合、開発者はブートローダーをマイクロコントローラーにフラッシュする機能を提供します。 このため、Arduino IDEにはいくつかの一般的な安価なプログラマーが組み込まれており、ほとんどのArduinoボードにはインサーキットプログラミング用のピンコネクタがあります(ICSP for AVR、JTAG for ARM)。
Arduinoプログラミング言語は、標準のC ++(AVR-GCCコンパイラを使用)であり、いくつかの機能を備えています。
Arduinoプログラマーによって作成されたプログラムは、スケッチ(またはスケッチ-英語スケッチからの野barさ)と呼ばれ、ino拡張子を持つファイルに保存されます。 これらのファイルは、コンパイル前にArduinoプリプロセッサによって処理されます。 標準のC ++ファイルを作成してプロジェクトに接続することもできます。
だから、公式サイトからArduino IDEをダウンロードしてインストールし、開いてこれを見てください:

スケッチは、2つのブロック(セットアップ()とループ())に分割されています。 最初のブロックは、コントローラーがネットワークに接続されたときに最初に初期化されるべきものを書き込みます。 第二に-常に実行される実際の実行可能コード自体。 実際、これらはすべて、これらのブロックの名前に基づいています。
最初のブロック
最初のステップは、マイクを組み立てて接続することでした。 実際、購入したエレクトレットマイクは、2本の脚を持つコンデンサーのようなものです。

上の画像のように、特徴的な3つのストライプのある脚はそれぞれマイクの「マイナス」であり、2番目の脚は「プラス」です。主なことはそれを混同しないことです。 実際、うまくグーグルで調べてみると、まずマイクを簡単に接続できないことがわかりました。次に、信号が非常に弱くなります。つまり、オペアンプが必要になる可能性が高いです。 マイクが購入された売り手のウェブサイトには、次のようなスキームがありました。

アンプ、RC回路がなければ、そうではなかったと思います。それを集めて、動作するかどうかを確認します。 家の利点は、必要な抵抗器とコンデンサーを築きました。 また、接続の信頼性のために、空中のワイヤに掛からないように、テキソライトを使用します。これは、ラジオ部品店でも販売されています。 次のような結果になりました。

あまりきれいではないかもしれませんが、動作する主なものはチェックすることです。 マイクには3つの脚があります:+ 5V、GND(グランド)、アナログ出力。 これらのレッグをそれぞれ5V、GND、およびコントローラーの入力A0に接続します。 III多くの試行錯誤の後、すべてがうまくいきました! マイクは本当に機能します。 Arduino ADCは0〜1024の値を提供します。少なくともシステムとの視覚的な相互作用のために2つのLEDを接続したままです。 LEDを電源に直接接続することは不可能です。そうしないと、LEDが焼けてしまいます。 これを回避するには、「+」LEDに220オームの抵抗器を掛けます。通常、短い脚はマイナスで、長い脚はプラスです。 したがって、「-」LEDをボードのGND出力に接続し、「+」LEDをデジタル出力に接続します。 2つのLEDがあるため、それらに共通のグランドを作成し、赤をピン13に、緑を12番に接続します。 少なくともいくつかの音を登録すると、赤いLEDが点灯します。 最初に音を登録し、その後しばらく沈黙させてから再び音を登録すると、緑色のLEDが点灯します。 実際、すべてがシンプルです。 実際には、それも判明しました。実際、スケッチは次のようになりました。
#define MIC A0 // , int ClapMargin = 9; // ( ) int mic_prev = 0; int SilenceLen=1500; // int NextClapLen = 2500; //, . int SkipLen = 800; // void setup() { analogReference(INTERNAL);// 1.1 Serial.begin(9600); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } int ReadNext() { int result; int d; d = analogRead(MIC); // result = abs(mic_prev-d); // mic_prev = d; // return result; // } int WaitForClap(int WaitLen) { int d, i; i = 0; // do { d = ReadNext(); // i++; // if (d > ClapMargin) { // Serial.println(d); return d; // } if ( (WaitLen != -1) && (i >= WaitLen) ) { // WaitLen WaitLen -1 return 0; // 0 } } while (1); } //- SkipLen void Skip(int SkipLen) { int i; for (i=0; i<SkipLen; i++) { ReadNext(); } } void loop() { int d1, d2; if(WaitForClap(-1)> ClapMargin)// { digitalWrite(12, HIGH);// Serial.println("raz"); Skip(SkipLen); d1 = WaitForClap(SilenceLen); // Serial.println(d1); if (d1 == 0) { digitalWrite(12, HIGH); Skip(500); d2 = WaitForClap(NextClapLen); // 2 if (d2 > ClapMargin) { digitalWrite(12, LOW);// digitalWrite(13, HIGH);// delay(1000); } } } digitalWrite(12, LOW);// digitalWrite(13, LOW); Skip(SkipLen); }
そのため、目的の信号をキャッチする方法を学びました。拍手が存在しているため、2番目のブロックにそのことを知らせることができます。 このためには、Bluetoothモジュールが必要です。 次のようなbluetooth hc-05シールドを取りました。

これをUnoピンに接続してピン接続し、モジュール自体を接続して、ボードの出力を複製します。 これは次のようになります(シールドにはいくつかの異なるバリエーションがあり、本質は同じです)。

また、Bluetoothシールドには、HとLの2つの位置を持つレバーがあります。マスターのHモード(マスター)、スレーブのLモード(スレーブ)。 この場合、レバーをマスターに設定します。 Bluetoothモジュールを接続したら、LEDとマイクを上から同じピンに接続できます。 通常、このブロックが終了したら、次へ進みます。
2番目のブロック
2番目のブロックでは、電磁リレー、外部設置のダブルソケット、220 Vの電気ネットワークに接続するためのワイヤ、および別のBluetoothシールドHC-05が必要です。
シールドをまったく同じ方法でボードに接続しますが、唯一の違いは、レバーをL-SLaveモードに設定する必要があることです。
1つのコンセントに常時電力が供給されてユニットに電力が供給され、2番目のコンセントはリレーに閉じられているため、電圧を供給したり、取り外したりすることができます。
それでは、リレーを接続しましょう。 その動作原理は単純で、次の構成になっています。2つのリレー脚がインダクタに接続され、電圧を印加すると、リレー内のいわゆるアンカーを引き付ける電磁場が生成され、回路が閉じられます。 コイルから電圧を除去すると、アンカーは元の状態に戻り、回路が切断されます。 したがって、リレーは一種のキーです。
そのため、5Vコイルに適用した場合に短絡するリレーが必要です。 この場合、PCの電源を入れるのに必要な電流を流すことができるリレーを選択する必要があります。 最新のPCのほとんどが450 Wから1000 Wを消費することを考えると、6アンペアの電流を通過するリレーで十分です。 この中国の天坊hjr-3ff-szは、最寄りの電器店で購入しました。

ご覧のとおり、彼には5本の脚があり、そのうちの2本がリールに運ばれていますが、どの脚を見つけるかだけです。 これを行うには、グーグルでこのスキームを見つけます:

2番目の脚をGNDボードに接続し、5番目から13番目のデジタル出力を接続します。 コンセントの初期状態がオフになるように、コンセントを電磁リレーの1番目と3番目の脚に接続します。 ブロックの準備ができました。スケッチをダウンロードするためだけに残ります。 このブロックのコード:
#include <SoftwareSerial.h>// Bluetooth #include <Wire.h> #define rxPin 2 #define txPin 3 SoftwareSerial btSerial(rxPin, txPin); void setup() { // put your setup code here, to run once: // Bluetooth Serial.begin(9600); pinMode(rxPin, INPUT); pinMode(txPin, OUTPUT); btSerial.begin(38400); pinMode(13, OUTPUT);// 13 } void loop() { // put your main code here, to run repeatedly: if(btSerial.available()) { char c=(char)btSerial.read(); Serial.println(c); digitalWrite(13, !digitalRead(13));// , , 13 } }
ブルートゥースのペアを追加することにより、最初のブロックのコードもアップグレードします。
#include <SoftwareSerial.h> #include <Wire.h> #define MIC A0 // , int ClapMargin = 9; // ( ) int mic_prev = 0; int SilenceLen=1500; // int NextClapLen = 2500; //, . int SkipLen = 800; // #define rxPin 2 #define txPin 3 SoftwareSerial btSerial(rxPin, txPin); void setup() { // put your setup code here, to run once: analogReference(INTERNAL);// 1.1 Serial.begin(9600); pinMode(12, OUTPUT);// 12 13 pinMode(13, OUTPUT); // define pin modes for tx, rx pins: // Bluetooth bluetooth pinMode(rxPin, INPUT); pinMode(txPin, OUTPUT); btSerial.begin(38400); Serial.println("Serial started"); digitalWrite(12, HIGH);// btSerial.println("AT"); while (!btSerial.available()); while (btSerial.available() > 0) char c = btSerial.read(); btSerial.println("AT+INIT"); while (!btSerial.available()); while (btSerial.available() > 0) char c = btSerial.read(); btSerial.println("AT+INQ"); while (!btSerial.available()); while (btSerial.available() > 0) char c = btSerial.read(); btSerial.println("AT+LINK=2014,5,191146");//2014,5,191146 - while (!btSerial.available()); while (btSerial.available() > 0) char c = btSerial.read(); digitalWrite(12, LOW);// } int ReadNext() { int result; int d; d = analogRead(MIC); // result = abs(mic_prev-d); // mic_prev = d; // return result; // } int WaitForClap(int WaitLen) { int d, i; i = 0; // do { d = ReadNext(); // i++; // if (d > ClapMargin) { // Serial.println(d); return d; // } if ( (WaitLen != -1) && (i >= WaitLen) ) { // WaitLen WaitLen -1 return 0; // 0 } } while (1); } //- SkipLen void Skip(int SkipLen) { int i; for (i=0; i<SkipLen; i++) { ReadNext(); } } void loop() { int d1, d2; if(WaitForClap(-1)> ClapMargin)// { digitalWrite(12, HIGH); Serial.println("raz"); Skip(SkipLen); d1 = WaitForClap(SilenceLen); // Serial.println(d1); if (d1 == 0) { digitalWrite(12, HIGH); Skip(500); d2 = WaitForClap(NextClapLen); // 2 if (d2 > ClapMargin) { digitalWrite(12, LOW);// digitalWrite(13, HIGH);// btSerial.print('1');// Bluetooth delay(1000); } } } digitalWrite(12, LOW);// digitalWrite(13, LOW); Skip(SkipLen); }
結果
Bluetoothが接続され、マイクが動作し、LEDが動作し、綿が識別され、信号が2番目のユニットに送信されます。残っているのは、ケースに慎重に組み立て、電源が投入されたときにオンになるようにBIOSを構成することだけです
起こったことは次のとおりです。
1番目のユニット(ケースの側面に電力が出力され、上部に緑と赤のLEDとマイクが見えます)

2番目のユニット(電源はケースの側面からも出力されます。上部には2つのソケットがあり、1つは常に電話のアダプターを介してマイクロコントローラーに電力を供給するために電力を供給されます。

結果を見てみましょう:
まとめ
- Arduinoはクールです。 安価なマイクロコントローラー、多数のセンサー、インターネット上の多くの種類のガイド、およびC ++
- あなたは夕方に本当に自分でそのようなことをすることができます。
- このデバイスは、PCの電源を入れるだけでなく、ランプなどの他の電化製品の電源を入れるためにも使用できます。 そしてこれは大きなプラスです
- このアイデアは、たとえば、そのようなデバイスを多数作成し、それらを単一のネットワークに接続し、スマートフォンを使用してBluetooth経由で制御することにより拡張できます。