UltrasonicEyes
コンポーネントと消耗品
> ![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 2 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて
いくつかの8x8マトリックスLEDといくつかの超音波センサーを使用して風変わりなプロジェクトを作りたかった...他の人が通常超音波で作るものとは異なるもの-そしてそれを楽しく遊び心のあるものにしたかった。
そこで、私は UltrasonicEyes と呼ぶものを作成しました -人々が動き回る場所の近くに座って、人々がどこにいるのかを見て、まばたきして、楽しく不気味な方法であなたを奇妙にさせる楽しいプロジェクト!
何が必要ですか?
超音波センサーモジュールは、障害物を検出し、障害物がどれだけ離れているかを判断するように設計されているため、通常、検出距離は最大3〜4メートルです。これは、このプロジェクトを居間やオフィス内に配置するのに適した距離です。エリア。

私はe-Bayから拾った2xHC-SR04モジュールを使用しています。あなたはそれらを超安いもので見つけることができます。
モジュールは非常に簡単に使用でき、Arduinoマイクロコントローラーに接続するのに必要なワイヤーは3本または4本だけです。
私が使用することを選択した8x8LED Matrixモジュールはチェーンを許可するため、そのうちの1つだけをArduinoに接続する必要があり、2番目のモジュールは最初のモジュールに接続します。

モジュールはSPIを使用するため、両方のディスプレイの目の画像を制御するためにArduinoに接続するのに必要なワイヤーは5本だけです。もちろん2本必要です!
注: 提供されているコードはハードウェアSPI を使用しています 、したがって、Nanoとは異なるArduinoボードを使用している場合は、どのピンがMOSIおよびSCKのハードウェアSPIピンであるかを確認し、それに応じて配線してください。

また、ある種のArduino互換のマイクロコントローラーも必要です。 Nano(互換)を使用しているのは、ケースに収まるほど小さく、ファームウェアの電源/プログラミング用のUSBがあり、すべてを接続するためのGPIOのスタックがあるためです。

ハーフブレッドボードと同じサイズのプロトボードにすべてをはんだ付けしましたが、プロジェクトははんだ付けを必要とせず、簡単に引き離すことができるため、最初にすべてをハーフサイズのブレッドボードに構築することをお勧めします。変更されました。
最後に必要なものは、光を検出するためのLDR(フォトレジスター)、330オームの抵抗器、およびオスからメス、メスからメスの両方のブレッドボードワイヤーの束です。
注: このプロジェクトでは任意のカラーワイヤーを使用できます...私が指定したのと同じ色を使用する必要はありませんが、 、POWERとGNDには赤と黒を使用し、他の配線には他の色を使用することをお勧めします。これにより、どのワイヤに電力が流れているか、どのワイヤがデータと信号に使用されているかを簡単に識別できます。
すべてをまとめる
まず、Nanoをブレッドボードの最後に接続して、USBが端からぶら下がるようにしますが、すべてのピンをボードに接続したままにします。
POWERおよびGND接続
次に、NanoのGND接続からブレッドボードのGNDレールに黒いワイヤーを接続します。次に、赤いワイヤーで同じことを行い、3V(またはそれだけの場合は5V)をブレッドボードのPOWERレールに接続します。

GNDとPOWERの作業中に、ブレッドボードの両側にある2本のGNDレールの間に黒いワイヤーを接続しましょう。赤いワイヤーと2本のPOWERレールでも同じようにします。
*注: 一部のマトリックスLEDパネルは、ブランドによっては3.3Vではなく5Vを必要とする場合があります。信頼できない結果が見つかった場合は、Arduinoの5Vピンを使用してみてください。
超音波センサーを配線しましょう
各超音波センサーのGNDピンとブレッドボードのGNDレールの間に黒いワイヤーを接続します。センサーの赤いワイヤーとVCC(POWER)ピン、およびブレッドボードのPOWERレールでも同じことを行います。

次に、次の白と青のワイヤーを接続します。
- センサー1のTRIGピンからArduinoのデジタルピン2への白いワイヤー
- センサー1のECHOピンからArduinoのデジタルピン3への青いワイヤー
- センサー2のTRIGピンからArduinoのデジタルピン4への白いワイヤー
- センサー2のECHOピンからArduinoのデジタルピン5への青いワイヤー
よくやった!これが超音波センサーの処理です!
2つの8x8LEDマトリックスディスプレイを接続する
LEDマトリックスディスプレイの1つにある入力GNDピンとブレッドボードのGNDレールの間に黒い線を接続します。赤い線とディスプレイの入力VCC(POWER)ピン、およびブレッドボードのPOWERレールについても同じようにします。

ディスプレイ1の出力GNDピンとディスプレイ2の入力GNDピンの間に黒い線を接続します。赤い線とディスプレイ1の出力VCCピン、およびディスプレイ2の入力VCCピンについても同じようにします。
2つのディスプレイの間にワイヤーを接続している間に、その部分を仕上げましょう...
- ディスプレイ1の出力SCK(クロック)ピンとディスプレイ2の入力SCKピンの間に黄色のワイヤーを接続します。
- ディスプレイ1の出力MOSI(データ)ピンとディスプレイ2の入力MOSIピンの間に青いワイヤーを接続します。
- ディスプレイ1の出力CS(選択)ピンとディスプレイ2の入力CSピンの間に白いワイヤーを接続します。
素晴らしい!次に、ディスプレイの残りの部分をブレッドボードに接続しましょう...
- ディスプレイ1の入力SCKピンとArduinoのデジタルピン13の間に黄色のワイヤーを接続します。
- ディスプレイ1の入力MOSIピンとArduinoのデジタルピン11の間に青いワイヤーを接続します。
- ディスプレイ1の入力CSピンとArduinoのデジタルピン10の間に白いワイヤーを接続します。
覚えておいてください: 提供されているコードはハードウェアSPI を使用しています 、したがって、Nanoとは異なるArduinoボードを使用している場合は、どのピンがMOSIおよびSCKのハードウェアSPIピンであるかを確認し、それに応じて配線してください。
素晴らしい。次に、最終的な配線手順に進みます...
LDRと抵抗を接続して周囲光を検出する
これらのワイヤーを接続する前に、なぜこのステップを実行するのですか?さて、あなたが尋ねてくれてうれしいです! Arduinoに接続されたLDRを使用すると、UltrasonicEyesの周囲が明るいか暗いかを検出でき、その情報を使用してLEDディスプレイを明るくしたり暗くしたりします。

暗い光のように夜間にディスプレイを超明るくしたくないのですが、明るさが30%前後でもディスプレイはかなりよく見えますが、日中や明るい部屋では、明るさをより高くパンチする必要があります。ディスプレイをより見やすくします。
さて、この最後のステップを完了して、3Dケースに入れることに移りましょう!
上記の配線図のように、ブレッドボード上の2列のピンにLDRを接続します。 Arduinoに接続する抵抗器とワイヤーを配置するためのスペースを残します。
LDRの片側にある1列のピンとブレッドボードのGNDレールの間に330Ωの抵抗を接続します。
LDRの反対側にあるピンの列とブレッドボードのPOWERレールの間に赤いワイヤーを接続します。
最後に、330オームの抵抗が接続されているピンの列とArduinoのアナログピン5(A5)の間に茶色のワイヤーを接続しましょう。デジタルピンから取得するように、0と1だけでなく、LDR(光強度)から0から255までの値を読み取る必要があるため、アナログピンである必要があります。
電源を入れてコードをアップロードしましょう
わかりました、それだけです、私たちは皆配線されています。 USBケーブルをArduinoとコンピューターの間に接続し、以下に示すUltrasonicEyesスケッチをアップロードして、すべてが機能することを確認します。
電源を入れてコードをアップロードしたら、センサーの前を歩き回るか、センサーの前で手を動かして何が起こるかを確認します。
それをより永続的にしたいですか?
UltrasonicEyesをより永続的にしたいとお考えですか?ブレッドボードバージョンを取得してプロトボードにはんだ付けする方法について説明している私のビデオをここでチェックしてください...
次に、ケースの2つの部分を任意の3Dプリンターで印刷し、ビデオで行ったように組み立てます!
また、UltrasonicEyesを拡張して、さまざまな目の形を循環する静電容量式タッチボタン(または通常のボタン)を使用することも検討しています...ここで私の実験を見ることができます...
私のプロジェクトとビデオの残りの部分は... unexpectedmaker.comでチェックできます
Twitter、Facebook、Instagram、tindieでフォローしてください
https://www.patreon.com/unexpectedmaker
以上です!
コード
- 超音波の目
超音波の目 C / C ++
#include//これを使用して8x8 LEDマトリックスディスプレイを制御します-まだ持っていない場合は、ライブラリマネージャーからこのライブラリをインストールする必要があります。#include // NewPingを使用して超音波センサーを制御します-まだ持っていない場合は、ライブラリマネージャーからこのライブラリをインストールする必要があります。//LEDマトリックスディスプレイに接続されたピンを定義します1 //#define CLK_PIN 13 / /ハードウェアSPIを使用しています-CLKピンをデバイスのハードウェアCLKピンに接続していることを確認してください//#defineDATA_PIN 11 //ハードウェアSPIを使用しています-MOSIピンをハードウェアMOSIピンに接続していることを確認してくださいデバイス上#defineCS_PIN 10 //チップセレクトピン#defineMAX_DEVICES 2 //ディスプレイの数-2つ必要です-各目ごとに1つ#define LIGHT A5 //アナログピン5を使用してLDRから光の値を読み取ります/ /自動的にMD_MAX72XXmx =MD_MAX72XX(CS_PIN、MAX_DEVICES);であるハードウェアSPIを使用しています。 // 2マトリックスディスプレイを初期化します#definet1 2 //超音波センサー1のトリガーピン#define e1 3 //超音波センサー1のエコーピン1#define t2 4 //超音波センサー2のトリガーピン2#define e2 5 //エコー超音波センサー2のピン#define maxDist 400 //超音波パルスの最大距離NewPingeyeR(t2、e2、maxDist); //超音波センサーを初期化します2NewPingeyeL(t1、e1、maxDist); //超音波センサーを初期化する1 //この整数変数を使用してシステムの現在の状態を追跡します。これにより、瞬きした後、最後の方向を見ることができます//考えられる状態は次のとおりです:// 0:前向き// 1:右向き// 2:左向きcurrentState =-1; //各超音波センサーのpingの時間と距離をこれらの変数に格納しますlongduration1、duration2; int distance1、distance2; //点滅をサイクルフロートにランダムに挿入しますnextBlink =millis()+ 1000; //現在の光の強度をこの変数に格納しますfloatlightAmount =0; uint8_t eye_forward [COL_SIZE] ={0b00111100、0b01000010、0b01011010、0b10101101、0b10111101、0b10011001、0b01000010、0b00111100}; uint8_t eye_right [COL_SIZE] ={ 0b11011001、0b11111001、0b10110001、0b01000010、0b00111100}; uint8_t eye_left [COL_SIZE] ={0b00111100、0b01000010、0b01001110、0b10010111、0b10011111、0b10001101、0b01000010、0b00111100}; uint8_ 0b10111101、0b11000011、0b01111110、0b00111100}; void setup(){//マトリックス表示ライブラリを初期化しますmx.begin(); //超音波センサー1のピンモードを設定しますpinMode(t1、OUTPUT); pinMode(e1、INPUT); //超音波センサー2のピンモードを設定しますpinMode(t2、OUTPUT); pinMode(e2、INPUT); //超音波センサーの各トリガーピンをLOWで開始するように設定しますdigitalWrite(t1、LOW); digitalWrite(t2、LOW); // LDRのピンモードをINPUTに設定しますpinMode(LIGHT、INPUT); //楽しみにしている目から始めますShowEye_Forward(); currentState =0;} void loop(){//現在の光レベルを読み込むlightAmount =analogRead(LIGHT); //ライトの値がディスプレイの最大強度の範囲内にあることを確認しますlightAmount =(lightAmount / 255)* MAX_INTENSITY; //強度を設定しますmx.control(MD_MAX72XX ::INTENSITY、lightAmount); // 5の再帰で左目をpingしますdistance1 =eyeL.ping_median(5); //右目をpingする前に500ミリ秒遅延するため、競合する結果が発生しませんdelay(500); // 5の再帰で右目をpingしますdistance2 =eyeR.ping_median(5); //まばたきを挿入しようとする時間かどうかを確認if(nextBlink 0){ShowEye_Right(); currentState =1; } //ここで、distance2がdistance1より大きく、distance2も0より大きい場合、左を見る必要がありますif(distance1 0){ShowEye_Left(); currentState =2; } //ループを250ミリ秒遅らせて、目が正しく表示される時間を確保しますdelay(250);} / ************************** ************* // *********** MAX7219スタッフ************ // ******* ******************************** / void ShowEye_Right(){//表示をクリアしますmx.clear(); //現在のディスプレイの明るさを設定しますmx.control(MD_MAX72XX ::INTENSITY、lightAmount); //ディスプレイの各行をループしますfor(uint8_t row =0; row
カスタムパーツとエンクロージャー
3Dプリンターで印刷し、特定の設定は必要ありません。3Dプリンターで印刷し、特定の設定は必要ありません。 回路図

製造プロセス