3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

littleBitsAdvent Calendar 2016

Day 8

littleBitsでレジっぽく商品をスキャンする

Last updated at Posted at 2016-12-08

こんにちは。mfunakiと申します。SAPという会社でDigital Transformationでビジネスを変える!との旗印のもと、デザイン思考のワークショップをファシリテートする中で、出てきたアイデアからBusiness Model Canvasを使ってビジネスモデルを導き出したり、(SAPではExperience Prototypingという言い方をしますが)完成度としてはLo-Fiな(最終プロダクトほどの完成度でなくとも)顧客体験を検証できるようなプロトタイプをクイックにお客さんと作るなんてお仕事をしています。平たく言うと、「アイデアが良いだの悪いだの評価するのはやめようぜ。プロトがイケてるイケてないを評価してクイックにバージョンアップ重ねていこうよ」と言い続けるお仕事です。

littleBitsらしさ

さて、みなさんの考えるlittleBitsらしさって何でしょう? 私にとっては、「磁石でくっついたり離れたりする(しかもいったん電源切ったりしなくていい)」というところです。littleBitsアドベントカレンダーに何回か書かせていただければと思いますが、まずは、PostIt感覚で張り替え(つなぎ変え)が気軽にできる利点を生かしたサンプルをご紹介させていただければと思います。

littleBitsを使った簡易レジの材料

ICタグでもバーコードでも何でもいいのですが、商品情報を読み取るようなレジを作っていきたいと思います。とはいうものの、littleBitsにはバーコードリーダーbitがあるわけでも、RFIDリーダーbitがあるわけでもないので、Arduino bitを使ってちょっと工夫してみます。
材料はこちら。

  • p1 power x 1 (および電池、電池ケーブル)
  • w1 wire x 5
  • w2 branch x 1
  • w6 arduino x 1
  • w7 fork x 1
  • i1 slide switch x 3 (説明する上で見やすいのでslide使っていますが、実際にはi6 dimmer x 3のほうが良いと思います)
  • o14 bright led x 3

これらのbitを次の写真に挙げるようにつなげます。
IMG_20161208_083040.jpg

プログラミング

Arduino bitにはこんなプログラムを流し込みます。

boolean LED1 = false;
boolean LED2 = false;
boolean LED3 = false;

void setup(){

  pinMode(1, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(9, OUTPUT);
  
  digitalWrite(1, LOW);
  digitalWrite(5, LOW);
  digitalWrite(9, LOW);
}

void loop(){
  Serial.begin(115200);
  
  int pot = analogRead(A0);
  int val = float(pot)/1023.5 * 99.9;
  
  delay(10);
    
  checkVal(val);
}


void checkVal(int v) {
   if (v >= 0 && v <= 25) { LED1 = false; LED2 = false; LED3 = false; } 
   if (v > 25 && v <= 50) { LED1 = true;  LED2 = false; LED3 = false; }
   if (v > 50 && v <= 75) { LED1 = false; LED2 = true;  LED3 = false; }
   if (v > 75 && v <= 99) { LED1 = false; LED2 = false; LED3 = true;  }
   
   if (LED1) {digitalWrite(1, HIGH);} else {digitalWrite(1, LOW);}
   if (LED2) {analogWrite(5, v);  } else {analogWrite(5, 0);}
   if (LED3) {analogWrite(9, v);  } else {analogWrite(9, 0);}
}

簡単に言えば、Arduinoのアナログ入力(a0)に入った値によって、4つの状態(オフ、値1、値2、値3)に場合分けし、3つのLEDをオン、オフするというものです。入力の値はslide switchやdimmerを使いますが、値にはアナログなゆらぎがあるので、幅を持たせるようにしています。

slide switchをスライドさせながら、出力される値の増減に応じてLEDが付いたり消えたりする動きをご覧ください。

littleBits - Arduino使ってLED順番にチカチカ

品物スキャン

スライドのさせ具合を変えたslide switchを3種類用意して、つなぎ変えることで、品物スキャン的な動作をさせることができます。ここでは、イチゴ、ブドウ、
オレンジに対応するslide switchをArduinoにつなげることで、対応するLEDが光っています。

littleBits - マグネット使って品物スキャン

さらに発展させるには

今回のサンプルでは、3つまでの品物のそれぞれについてLEDの点滅分けをしてみたわけですが、さらなる発展としては、

  • 点滅分けではなく、number bit(o21)に値段を表示させる
  • number bitを2つ接続し、スキャン(接続)した品物の値段、および合計金額を表示させる
  • 品物のスキャン(接続)時にbuzzer(o6)から音を出す
  • cloudBit(w20)でクラウドにつなぎ、購買履歴からリコメンデーションする

ほかにもいろいろ考えてプロトタイピングしてみていただければと思います。

昔話

以前はp1 power, p3 usb powerの他にp2 coin batteryというのがあったので、バッテリー+dimmerでもっとこじんまり、かつワイヤレスな品物実装ができたのですが、どこに行ってしまったんでしょうかね?

それではまたどこかでお会いしましょう。さようなら!

3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?