Fuka が 2022年09月25日23時47分57秒 に編集
初版
タイトルの変更
距離センサを使ったランダムライト
タグの変更
DHT11
WS2812B
spresense
メイン画像の変更
記事種類の変更
製作品
本文の変更
## 概要 Spresenseと距離センサを使用して、 距離によって色が変わるライトを作成したので下記にまとめます。 ## 必要部材 - Spresenseボード ![キャプションを入力できます](https://camo.elchika.com/826764d447f6d9d37c2515f656283d61b0e5cd8d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313639316266322d353532392d343163372d383035302d6631303634653461393532652f36333235653266302d313435372d343636382d383164342d356538653064636134636536/) 今回使用するメインのマイコン。拡張ボードとドッキングして利用しました。 ※SPRESENSE™ 活用コンテスト 開催にあたり、ご提供頂くことが出来ました。 ありがとうございます! - 超音波センサ ![キャプションを入力できます](https://camo.elchika.com/7e9f7193d77ee48c0fabb699b45cbb7f153ddc8b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313639316266322d353532392d343163372d383035302d6631303634653461393532652f63383037333136342d626664642d343863332d383761332d616566356436393833323465/) 今回は距離センサとして、「HC-SR04」という超音波センサを使用しました。 秋月電子で購入が可能です。 [超音波距離センサー HC-SR04](https://akizukidenshi.com/catalog/g/gM-11009/) ## LEDボード ![キャプションを入力できます](https://camo.elchika.com/b97422fd1237cc7b69f4ccd58565db4278d9f557/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313639316266322d353532392d343163372d383035302d6631303634653461393532652f63346337376564362d646639622d343138312d613466312d663865336337373734613661/) 8×8のフルカラーマトリックスLEDボードです。 たしかamazonで購入しました。 ## その他 - ブレッドボード - 配線材等 必要に応じて準備が必要です。 ## 配線 まず、電源を5[V]仕様にします。(使用する超音波センサが5[V]仕様のため) 初期状態でジャンパーピンが5[V]側になっているはずですが一応確認しておきます。 ![キャプションを入力できます](https://camo.elchika.com/b2a498b303ea5cc7dd8237249acf0318ad7ac72b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313639316266322d353532392d343163372d383035302d6631303634653461393532652f61323636323161362d666530612d343632332d383961632d646138636465656261646539/) センサとLEDボードは下記の様に配線しました。 **超音波センサの接続** 基板面にピンが印字されているので、これを参考に配線します。 ![キャプションを入力できます](https://camo.elchika.com/f3beef57dd8acda4ff196133cca44eb96fe7d1d7/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313639316266322d353532392d343163372d383035302d6631303634653461393532652f65373339396433302d343464362d343664372d396534392d653762626338316436616362/) | Spresense I/O | 超音波センサ | |:---:|:---| | Vout | VCC | | GND | GND | | D4 | echoPin | | D5 | trigPin | **LEDボードの接続** 購入時には配線が取り付けられていなかったので、事前に配線しました。 ![キャプションを入力できます](https://camo.elchika.com/4235eca96e18ed5018070ae0d9020b20e8bc07a9/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33313639316266322d353532392d343163372d383035302d6631303634653461393532652f39373063653430622d636161382d343732342d393066332d326632656566343361373562/) | Spresense I/O | LEDボード | |:---:|:---| | 3.3V | +電源 (赤) | | GND | -電源 (黒)| | D7| 信号線(黄色)| ## ライブラリのインストール マトリックスLEDを使用するにあたって、SpresenseNeoPixelのライブラリを利用させて頂きました。 ==[SpresenseNeoPixel(GitHub)](https://github.com/hideakitai/SpresenseNeoPixel)== ## ソースコード 使用したコードを記載します。 ```arduino:動作サンプル #include <SpresenseNeoPixel.h> const uint16_t PIN = 7; //使用するピン const uint16_t NUM_PIXELS = 64; //8*8=64 SpresenseNeoPixel<PIN, NUM_PIXELS> neopixel; #define echoPin 4 // Echo #define trigPin 5 // Trigger double dura = 0; //間隔 double dist = 0; //距離 double dist_light = 0; void setup() { Serial.begin(9600); pinMode( echoPin, INPUT ); pinMode( trigPin, OUTPUT ); neopixel.clear(); neopixel.framerate(40); delay(1000); Serial.println("--start--"); } void loop() { static uint32_t prev_ms = millis(); static uint8_t state = 0; //超音波センサ出力設定 digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite( trigPin, HIGH ); delayMicroseconds( 10 ); digitalWrite( trigPin, LOW ); dura = pulseIn( echoPin, HIGH ); if (dura > 0) { dura = dura / 2; //往復距離割る2 dist = dura * 340 * 100 / 1000000; // 音速=340m/s Serial.print("距離 = "); Serial.print(dist); Serial.println(" cm"); } dist_light = dist; if (dist_light <= 10 && dist_light < 15) neopixel.set(255, 0, 0);//red else if (dist_light <= 15 && dist_light < 20) neopixel.set(0, 255, 0);//green else if (dist_light <= 20 && dist_light < 25) neopixel.set(0, 0, 255);//blue else if (dist_light <= 30 && dist_light < 35) neopixel.set(255, 255, 0);//yellow else if (dist_light <= 35 && dist_light < 40) neopixel.set(0, 255, 255);//aqua else if (dist_light <= 40) neopixel.set(255, 255, 255);//white neopixel.show(); delay(50); } ``` 改良の余地は十分にありそう... ## 完成品 @[youtube](https://youtu.be/skBcQY64h1Q) とりあえず、動かす事は出来た。 が、感度差などまだまだ工夫できるところはあると思うので 更に改良していきたいと思います。