LoginSignup
0
0

More than 5 years have passed since last update.

TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介(15)第六回(2016)アプリケーション開発部門R2CAクラス 金賞 歩きスマホ用障害物検知 山内健司(東京都市大学計算機ソフトウェア研究室)共同作業者:小畑太治郎,市村歩

Last updated at Posted at 2018-06-24

TOPPERS「活用アイデア」・「アプリケーション開発」コンテスト
は、2011年から毎年実施されています。
https://www.toppers.jp/contest.html

「アプケーション開発」は、ソースコードの公開を前提としています。
「活用アイデア」でも、その後実現したソースコードなどもある。探しながら紹介。

なお、この記事は、TOPPERSプロジェクトの公式見解ではなく、
小川清 の 技術者個人の考えに基づいています。

目的(purpose)

TOPPERS開発アイデア・アプリケーション開発コンテスト受賞作品には、良質な算譜、技術的に崇高な志向、目的を達成するための意思などが感じられる。広く、source codeを表示して紹介し、次の応募作品を促す。

成果(outcome)

応募作品の算譜を眺めると、その技術者の得意分野や技法を感じることができる。応募作品のソースコードを使ってみようという気になる。ソースコードを一度コンパイルしたくなる。自分も良い作品を作ろうという気になる。

TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介(14)第六回(2016)アプリケーション開発部門 R2CAクラス 金賞

歩きスマホ用障害物検知

山内健司(東京都市大学計算機ソフトウェア研究室)共同作業者:小畑太治郎,市村歩

応募資料(application material)等

コンテスト応募資料
https://www.toppers.jp/docs/contest/2016/歩きスマホ用障害物検知.pdf

Download

ソースコード
https://www.toppers.jp/docs/contest/2016/src_歩きスマホ用障害物検知.zip

関連資料(related URL)

算譜(source code)

rca_app.cpp
#include "rca.h"

#define echoPin 5 // Echo Pin(超音波センサー?)
#define trigPin 6 // Trigger Pin(超音波センサー?)


#define TOUCH_PIN 3
#define LED_PIN  4


double Distance = 0; //障害物との距離(cm)
double Threshold_1 = 30; //通知閾値(cm)
double Threshold_2 = 80; //通知閾値(cm)

int LEDstate = LOW; //LEDを点滅させるときに使う.
bool alert = false; //通知判定用共有変数.task2が書き込み,task3が読み込む.

int SoundState = 0;
/*
 *  メインタスクの設定.
 *  デバッグ出力させるなら,シリアルポートは115200にしておくこと.
 */ 
void setup() {
    Serial.begin(115200);//デバッグ出力しないならコメントアウトでよろし
    delay(1);        
}

//メインタスク
void loop() {
    delay(1000);
}

/*
 *  タスク1の設定.
 *  超音波センサーの初期化を行う.
 */
void task1_setup() {
    pinMode(echoPin, INPUT);
    pinMode(trigPin, OUTPUT);
}

/*
 *  タスク1.
 *  超音波センサーによる測距を行う.
 *  測距の結果はcm単位でDistance変数に格納される.
 */
void task1_loop() {
    //ここから測定本体
    double Duration = 0; //超音波を受信した間隔
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH); //超音波を出力
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    Duration = pulseIn(echoPin, HIGH); //センサからの入力
    //ここまで測定本体
    //ここからDistance算出
    if (Duration > 0) {
        Duration = Duration / 2; //往復距離を半分にする
        Distance = Duration * 340 * 100 / 1000000; // 音速を340m/sに設定
        //Serial.println(Distance); //デバッグ出力をオフにするなら不要.
    }
    //ここまでDistance算出
    delay(10);
}


int tonewaiter1 = 0;
int tonewaiter2 = 0;
void task2_setup() {}
void task2_loop() {
    if (SoundState != 0) {
        if (Threshold_1 >= Distance) {
            tonewaiter2 = 0;
            if (tonewaiter1 == 25) {
                tone(12, 4000, 50);
                tonewaiter1 = 0;
            }
            tonewaiter1++;
        }
        else if (Threshold_2 >= Distance) {
            tonewaiter1 = 0;
            if (tonewaiter2 == 50) {
                tone(12, 4000, 50);
                tonewaiter2 = 0;
            }tonewaiter2++;

        }
    }

    delay(10);
}

int PreTouchValue = 0;
int TouchState = 0;


void task3_setup() {

    pinMode(TOUCH_PIN, INPUT_PULLUP);
    pinMode(LED_PIN, OUTPUT);
    digitalWrite(LED_PIN, LOW);

}  
void task3_loop() {
    int TouchValue = digitalRead(TOUCH_PIN);

    if ((PreTouchValue == 0) && (TouchValue == 1) && (TouchState = 0)) {
        TouchState = 1;
    }

    if ((PreTouchValue == 1) && (TouchValue == 0) && (TouchState = 1)) {
        TouchState = 0;
        if (SoundState == 0) {
            SoundState = 1;
            Threshold_1 = 30; //近いほうの通知閾値を30(cm)に設定
            digitalWrite(LED_PIN, HIGH);
            tone(12, 4000, 50);
            delay(30);
            tone(12, 4000, 50);
            digitalWrite(LED_PIN, LOW);
        }
        else if(SoundState == 1) {
            SoundState = 2;
            Threshold_1 = 50; //近いほうの通知閾値50(cm)に設定
            digitalWrite(LED_PIN, HIGH);
            tone(12, 6000, 100);
            delay(30);
            digitalWrite(LED_PIN, LOW);
        }
        else {
            SoundState = 0;
            digitalWrite(LED_PIN, HIGH);
            tone(12, 4000, 200);
            delay(20);
            digitalWrite(LED_PIN, LOW);
        }
    }
    PreTouchValue = TouchValue;

    delay(10);
}



source

参考資料(reference)

「TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介」まとめ
https://qiita.com/kaizen_nagoya/items/72b882d96b2841f25faf

TOPPERS活用アイデア・アプリケーション開発コンテストを振り返る
https://researchmap.jp/joxkbxlck-1778110/
「応募すると何が嬉しい」TOPPERS活用アイデア・ アプリケーション開発コンテスト
https://www.slideshare.net/kaizenjapan/ss-78528931

「TOPPERS活用アイデア・アプリケーション開発コンテスト」への道

文書履歴(document history)

ver. 0.10 初稿 20180624

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0