質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

569閲覧

超音波距離センサーで計測した距離を%表示させたい

nahogoris

総合スコア1

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2022/06/15 10:21

編集2022/06/17 02:51

Arduino初心者です、質問お願いいたします。

1.前提・実現したいこと
Arduino互換品と超音波距離センサーHC-SR04で計測した距離(水タンクの残量、上から水面を計測)を、一定の範囲で%表示させたいと考えています。水タンクが満タン(例えば距離10㎝)であれば100%、空(例えば距離150㎝)であれば0%といった形です。

2.発生している問題
ソーテック社のArduino電子工作実践講座のサンプルプログラムを利用して距離測定はできたのですが、%表示に換算する方法が分かりません。
検索してもちょうどいい情報が見つけられず、ヒントだけでも頂けるとありがたいです。 

3.該当のソースコード

#include "HCSR04.h" const int TRIG = 6; const int ECHO = 7; HCSR04 hcsr04( TRIG, ECHO ); void setup(){ hcsr04.begin(); Serial.begin( 9600 ); } void loop(){ float distance; distance = hcsr04.get_length(); if ( distance != -1 ){ Serial.print("Distance:"); Serial.print( distance ); Serial.println("cm"); } else { Serial.println("Out Range."); } delay (1000); }

4.使っているツールのバージョンなど補足情報
・Arduino互換品 ELEGOO UNO R3
・超音波距離センサーHC-SR04
・ArduinoIDE 1.8.19

よろしくお願いいたします。

※追記
より回答が得られるよう以下アドレスの他サイトにも同じ質問をしておりましたが、マルチポストは推奨されていないとお知らせいただきましたので追記します。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10263351910

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2022/06/15 14:37

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10263351910 ヘルプ( https://teratail.com/help#posted-otherservice )を読んで、 「やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。 また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください」の対応をしてください。 くれぐれも、回答のついている質問を削除して「なかったことにする」ようなことはされませんよう。
nahogoris

2022/06/17 02:43

マルチポストは推奨されていないとは知りませんでした、失礼いたしました。
guest

回答2

0

ベストアンサー

Arduinoであればmap関数が用意されていると思います。
入力の最小値と最大値、出力の最小値と最大値を指定することで入力値を任意の出力範囲に置き換えた結果が得られます。

質問の内容であれば、

cpp

1map(inputValue, 150, 10, 0, 100)

出力例:

>>> map(150, 150, 10, 0, 100) 0.0 >>> map(10, 150, 10, 0, 100) 100.0 >>> map(80, 150, 10, 0, 100) 50.0

ちなみにmap関数の実装内容は以下のようになっています。

cpp

1long map(long x, long in_min, long in_max, long out_min, long out_max) { 2 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; 3}

投稿2022/06/16 08:38

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nahogoris

2022/06/17 02:55

回答ありがとうございます。 教えていただいたmap関数及び他サイトでいただいた回答を参考に、以下コードに修正し%表示できました。 重ねて御礼申し上げます。 以下修正コード #include "HCSR04.h" const int TRIG = 6; const int ECHO = 7; HCSR04 hcsr04( TRIG, ECHO ); void setup(){ hcsr04.begin(); Serial.begin( 9600 ); } void loop(){ float distance; distance = hcsr04.get_length(); long par; if(distance>=10 && distance<=150){ par=map(distance,10,150,100,0); Serial.print(par); Serial.println("%"); } else { Serial.println("Out Range."); } delay (1000); }
guest

0

  1. 満タンと空の距離の差、の100/1を出しておいて、
  2. 現在の距離と空の距離の差、割る、1.の値

とすれば%の値が出ます

投稿2022/06/15 11:05

編集2022/06/15 11:05
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/06/15 14:43

無茶苦茶。
Zuishin

2022/06/16 22:57

これに高評価入れてる人って、本気でこれで計算できると思ってるんですかね。
nahogoris

2022/06/17 02:57

回答ありがとうございます。 教えていただいた情報及び他サイトでいただいた回答を参考にコードを修正し%表示できました。 重ねて御礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問