Skip to content

ufoo68/clovaRegistorValueConverter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

clovaRegistorValueConverter

Clovaスキル「抵抗値換算」のレポジトリです。サーバはFirebaseを使ってます。

「抵抗値換算」について

電子工作に使う抵抗素子には「カラーコード」と呼ばれるものが表示されています。このカラーコードの並びから抵抗値を読み取ることができますが、電子工作に慣れていない人には「カラーコード -> 抵抗値」への変換がすぐには難しいです。そこでこのスキルを使ってClovaの前でカラーコードの色の並びを読み上げて、それを抵抗値に変換したものをClovaに読んでもらうものを作りました。
このスキルでは精密抵抗器を無視した4つのカラーコードの並びで、このサイトの「よく使われる抵抗の一覧表」の抵抗素子に対応します(ArduinoでLEDやセンサを使う場合は1kか10kの数値のものしか基本は使わないかと)。カスタムスロットとして同一レポジトリのcolorCodeValue.tsvを用いています。

Firebaseの環境構築方法

初期設定

手順についてはこの記事を参考にしてます。
まずはFirebase CLIをインストールします。
npm install -g firebase-tools
-gを使ってグローバルにインストールします。場合によってはpermissionではじかれる可能性もあるのでsudoが必要かも?
次にログインします。
firebase login
ここら辺はターミナルに言われるまま操作すれば問題ないかと。次にプロジェクトを作成します。
firebase init functions
既存のプロジェクトを選択・新しくプロジェクトを作成する、の2択が選べます。
次にFirebaseにデプロイします。
firebase deploy --only functions,hosting

その他の設定

環境変数は以下のコマンドで設定可能です。
firebase functions:config:set clova.extension.id="your extension id"
環境変数の確認は以下のコマンドを用います。
firebase functions:config:get
コード上で用いたい場合は、以下のようにして呼び出します。

const extensionId = functions.config().clova.extension.id;

また、firebase.jsonは以下のように設定しました。

{
    "hosting": {
        "public": "./",
        "rewrites": [{
            "source": "/clova",
            "function": "clova"
        }],
        "ignore": [
            "firebase.json",
            "**/.*",
            "**/node_modules/**"
        ]
    }
}

Clovaの開発について

expressを用いたスキルの開発はこのサイトを参照して行いました。
functions/上で以下のコマンドを用いて必要なpackageをインストールします。
npm install --save https://github.com/TanakaMidnight/clova-cek-sdk-nodejs express
Clovaの公式SDKを用いない理由はこの記事を参照してください。

カラーコードから抵抗値への変換

まず連想配列を用意しました。色をkeyに対応する数値をvalueに設定してます。

const colorcodes = { :'0', :'1', :'2', :'3', :'4', :'5', :'6', :'7', :'8', :'9' };

抵抗値の計算は以下の式で求めます

const registorValue = (1番目のカラーコード * 10 + 2番目のカラーコード) * 10 ** 3番目のカラーコード;

しかしこの抵抗値を言葉としてアウトプットさせるときは「キロ」などの読み変換させるほうが自然になります。
そこでregistorValueへの代入式を以下のように拡張させました。

const registorValue = thirdValue => { 
    switch(thirdValue) {
        case '0':
            return `${firstValue}${secondValue}`;
        case '1':
            return `${firstValue}${secondValue}0`;
        case '2':
            if (secondValue === '0') {
                return `${firstValue}キロ`;
            } else {
                return `${firstValue}${secondValue}キロ`;
            }                       
        case '3':
            return `${firstValue}${secondValue}キロ`;
        case '4':
            return `${firstValue}${secondValue}0キロ`;
        default:
            return '?';
    }
}

firstValue, secondValue, thirdValueはそれぞれ1番目~3番目のカラーコードに対しています。case 5: ~ case 9:の実装をしていませんが、元々スロットを用意していないので省略しました。

抵抗値 -> カラーコードへの変換

半角の数字スロットを受け取ったときに、その各桁の数値に対応する色のkeyを取得していくような処理を以下のように実装しました。

const registorValue  = String(slots.number);
if (typeof Number(registorValue) === 'number' && registorValue.length >= 2) {
    const firstColor = Object.keys(colorcodes).filter(key => { 
        return colorcodes[key] === registorValue.slice(0, 1)
    });
    const secondColor = Object.keys(colorcodes).filter(key => { 
        return colorcodes[key] === registorValue.slice(1, 2)
    });
    const thirdColor = Object.keys(colorcodes).filter(key => { 
        return colorcodes[key] === String(registorValue.length - 2)
    });
    const colorcode = `${firstColor}${secondColor}${thirdColor}`;
    speech.value = `${registorValue}Ωのカラーコードは${colorcode}金です。`
}

抵抗値を2桁以上と制限をかけていますが、通常は3桁以上の抵抗値をよく使うので実用上は問題ないと思います。今回は誤差の値は考慮しないので4番目のカラーコードをデフォルトで金にしました。

カラーコードの覚え方

以下のような連想配列を用意しました。DataBaseを使おうと思いましたが、使うほどの内容ではないので逃げました使わないという判断をしました。

const howToMemorize = {
     : "橙はミカン",
     : "ハイヤー",
     : "四苦八苦",
     : "紫しち部",
     : "さつきみどり",
     : "茶を一杯",
     : "赤いニンジン",
     : "青虫",
     : "四季の色",
     : "黒い礼服"
};

覚え方はこのサイトと自分が過去に使った覚え方を参考にしました。

About

Clovaスキル「抵抗値換算」のレポジトリです

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published