#author("2018-03-27T13:06:53+09:00","default:distance_switch","distance_switch") #author("2018-04-22T09:41:24+09:00","default:distance_switch","distance_switch") * Distance Switch [#k2bd0bc2] &ref(DistanceSwitch/ds-1.JPG,25%); ** 概容 [#ga27fcba] 超音波センサで計測した距離が、半固定抵抗で決めた値より短く成ったら、 Arduino nano のD10ピンをHighにして、そうでなかったら、Lowにするハードウェアとスケッチ(プログラム)です。 計測した距離と、半固定抵抗で決めた値をI2C-LCD (秋月I2C接続小型キャラクタLCDモジュール 8x2行 [AQM0802A-RN-GBW]) に表示します。 ** 動作例 [#i07ac0a7] *** 音を反射する物体が近くにないとき [#z6b44d6c] - &ref(DistanceSwitch/ds-no-object.JPG,20%); - LCDの上の段に表示されている値が下の段の値よりずっと大きく成っています。D10ピンの電圧が低く成って、それに接続された赤いLEDが消えています。Arduino Nano のボード上のLED (D13pin)も消えています。下の表示の値は、半固定抵抗を回すことによって、変更することができます。 *** 音を反射する物体が近くにあるとき [#xff7220f] - &ref(DistanceSwitch/ds-object.JPG,20%); - LCDの上の段に表示されている値が下の段の値より小さくなっています。D10ピンの電圧が高くなって、それに接続された赤いLEDが点灯しています。Arduino Nano のボード上のLED (D13pin)も点灯しています。下の表示の値は、半固定抵抗を回すことによって、変更することができます。 ** 謝辞 [#p96c5d21] - 以下の情報を参考にしました。ライブラリも利用させていただいています。感謝します。 -- オレ工房「I2C液晶のArduinoライブラリ – ST7032」 https://ore-kb.net/archives/195 -- アルゴリズム雑記「【Arduino】超音波距離センサ(HC-SR04)の使い方 」 &br; https://algorithm.joho.info/arduino/ultrasonic-distance-sensor-hc-sr04/ ** ハードウェア [#j1336770] *** 使用部品 [#s3e3d561] - Arduino Nano - 超音波距離センサ HC-SR04 - I2C-LCD AQM0802A-RN-GBW - 半固定抵抗 10KΩ 103 ... 200KΩ 204 でも動きました。 - ブレッドボード - ジャンパ線 *** 回路図 [#j3882fbd] - fritzing ... I2C-LCDは、実際に使っているLCDの部品が見当たらなかったので、I2Cが使える別のLCDを使っています。fritzing 上で配置するため、実際の接続とは異なっていますが、論理的には動くと思います。 -- &ref(DistanceSwitch/distance_switch_1.png,30%); - Schematic -- &ref(DistanceSwitch/distance_switch_circuit_1.png,25%); ** ソフトウェア(Sketch) [#g8663c49] - [[このページ:https://ore-kb.net/archives/195]]のライブラリ, ST7032, をダウンロードして、解凍して、re-name して、事前に arduino の libraries に入れておくことが必要になります。 #code(C){{ /* 超音波センサで計測した距離が、半固定抵抗で決めた値より短く成ったら、 10版ピンをOnにして、そうでなかったら、Offにするスケッチ。 計測した距離と、半固定抵抗で決めた値をI2C-LCD (秋月I2C接続小型キャラクタLCDモジュール 8x2行 [AQM0802A-RN-GBW]) に表示します。 http://www.yama-lab.org/class/maker/distance_switch/ 以下の情報を参考にしました。ライブラリも利用させていただいています。感謝します。 オレ工房「I2C液晶のArduinoライブラリ – ST7032」 https://ore-kb.net/archives/195 アルゴリズム雑記「【Arduino】超音波距離センサ(HC-SR04)の使い方 」 https://algorithm.joho.info/arduino/ultrasonic-distance-sensor-hc-sr04/ ハードウェア Arduino Nano 超音波距離センサ HC-SR04 I2C-LCD AQM0802A-RN-GBW 半固定抵抗 10KΩ 103 Takashi Yamanoue http://www.yama-lab.org/~yamanoue/wiki/ 2018 3/26 */ #include <Wire.h> #include <ST7032.h> ST7032 lcd; int trig = 8; // 出力ピン int echo = 9; // 入力ピン int a1=1; //Analog Input A1 pin int ledPin=13; //LED int xout=10; //if the echo distance is shorter than the vr value, High, else Low; void setup() { // Serial.begin(9600); pinMode(trig,OUTPUT); pinMode(echo,INPUT); lcd.begin(8, 2); lcd.setContrast(30); // Serial.print("setup"); pinMode(ledPin,OUTPUT); pinMode(xout,OUTPUT); digitalWrite(ledPin,LOW); digitalWrite(xout,LOW); } void loop() { // 超音波の出力終了 digitalWrite(trig,LOW); delayMicroseconds(1); // 超音波を出力 digitalWrite(trig,HIGH); delayMicroseconds(11); // 超音波を出力終了 digitalWrite(trig,LOW); // 出力した超音波が返って来る時間を計測 int t = pulseIn(echo,HIGH); // 計測した時間と音速から反射物までの距離を計算 float distance = t*0.017; // 計算結果をシリアル通信で出力 String dx=String(distance); dx=dx+"cm"; lcd.setCursor(0, 0); lcd.print(dx); // アナログ入力 A1 int a1x=analogRead(a1); float a1f=a1x*300.0/1023; String ax=String(a1f); // LCD表示(2行目) lcd.setCursor(0, 1); lcd.print(ax); if(a1f>distance){ digitalWrite(ledPin,HIGH); digitalWrite(xout,HIGH); } else{ digitalWrite(ledPin,LOW); digitalWrite(xout,LOW); } delay(500); } }} ** 応用例 [#v5ff24fa] - An Arduino Controlled Fountain -- https://youtu.be/AJOA1MNv6sQ ---- #counter