基本情報

このページではIoTコンテンツ(だれかきたセンサ)を「編集」できます。編集したコンテンツは、プロジェクトの一覧ページでは元のコンテンツを置き換えて表示されます。新しい項目として足したい場合は「 フォーク」してください。

※写真URLは.jpg, .jpeg, .pngのいずれかで終わるもの、またはGyazoへアップロードされたページのURL(https://gyazo.com/hogehogeなど)に対応しています。

{ "dependencies": { "twitter": "latest" } }

※IoTコンテンツの説明、エントリポイントに関する情報 main: index.js およびf3jsモジュールへの依存情報 dependencies: { f3js: (略) } は、この欄の内容とマージされるため記入不要です。

カードのプレビュー
だれかきたセンサ
'16/9/20 8:9
背後に誰かが来たらお知らせします
石田啓介

プライベートコンテンツ

このコンテンツはすでに公開されているのでプライベートにできません。「 フォーク」ならプライベートにできます。

ソースコード

マイコン・小型コンピュータのプログラムのソースコードを記述してください。f3jsパッケージをrequireすることで筐体設計が可能です。詳しくはAPIドキュメントをご覧ください。

// LCD var LCD = require('jsupm_i2clcd'); var myLcd = new LCD.Jhd1313m1(0, 0x3E, 0x62); // Buzzer var upmBuzzer = require("jsupm_buzzer"); var myBuzzer = new upmBuzzer.Buzzer(6); myBuzzer.setVolume(0.01); myBuzzer.stopSound(); // Slider var upm_grove = require('jsupm_grove'); var mySlide = new upm_grove.GroveSlide(0); // Ultrasonic var ultrasonic = require("jsupm_groveultrasonic"); var mySonic = new ultrasonic.GroveUltraSonic(8); // Motion var grove_motion = require('jsupm_biss0001'); var myMotion = new grove_motion.BISS0001(2); // Servo var servoModule = require("jsupm_servo"); var myServo = new servoModule.ES08A(5); myServo.haltPwm(); ///////////////////////////////////////// var __ = require("underscore"); var Twit = require('twit'); function TweetBuzzer(keys) { var client = new Twit(keys); var r=100, g=100, b=100; // var words = ['love', 'happy', 'hate', 'like', 'angry', 'sad']; // var words = ['apple', 'google', 'microsoft', 'twitter']; var words = [ 'love' // Tweet Search Keyword (High) , 'hate' // Tweet Search Keyword (Low) ]; var myLcd, myBuzzer, mySlide; var status, stream; var beep = false; this.run = function(lcd, buzzer, slide, stt) { myLcd = lcd; myBuzzer = buzzer; mySlide = slide; status = stt; var stream = client.stream("statuses/filter", {track: words}); stream.on("tweet", function(tw){ if (status.iru && !beep) onTweet(tw); }); }; this.destroy = function() { stream.destroy(); stream = null; }; //////////////////////// var onTweet = function(tw) { myLcd.setCursor(0,0); myLcd.write(" "); myLcd.setCursor(0,0); myLcd.write("@"+tw.user.screen_name); var note = 3000; var hit = false; myLcd.setCursor(1, 0); myLcd.write(Array(words.length+1).join('_')); __.each(words, function(w, i){ var re = new RegExp(w, 'i'); if (tw.text.match(re)) { myLcd.setCursor(1, words.length-(i+1)); myLcd.write("+"); myLcd.setCursor(1, words.length+1); myLcd.write(Array(15-words.length).join(' ')); myLcd.setCursor(1, words.length+1); myLcd.write(w); note /= words.length - i; hit = true; } }); if (hit) { var vol = mySlide.voltage_value(); if (status.iru && !status.kita && !beep ) { beep = true; if (vol >= 0.1) { myBuzzer.setVolume(0.2*(vol-0.1)); myBuzzer.playSound(note, 50000); myBuzzer.stopSound(); } setTimeout(function(){beep = false}, 10); } } }; } var tb = new TweetBuzzer({ "consumer_key" : "" // Twitter consumer key , "consumer_secret" : "" // Twitter consumer secret , "access_token" : "" // Twitter access token , "access_token_secret" : "" // Twitter access token secret }); ///////////////////////////////////////// function Dareka() { var oshirase_shita = false; var before_dist = 0; var myLcd, upmBuzzer, myBuzzer, myMotion; var status; var kitaInterval; var timeout_iru = 60000 * 3; this.check = function(lcd, upm_buzzer, buzzer, sonic, motion, servo, stt) { status = stt; myLcd = lcd, upmBuzzer = upm_buzzer, myBuzzer = buzzer; mySonic = sonic, myMotion = motion, myServo = servo; kitaInterval = setInterval(function() { if (myMotion.value() === true) { myLcd.setCursor(1, 15); myLcd.write("*"); if (!status.iru) { setTimeout(function(){ status.iru = false; myLcd.setColor(100,100,100); }, timeout_iru); } status.iru = true; myLcd.setColor(255,255,0); } else { myLcd.setCursor(1, 15); myLcd.write(" "); } if (status.iru) { check_dist(); } }, 300); }; this.destroy = function() { clearInterval(kitaInterval); myServo.haltPwm(); }; var check_dist = function() { var travelTime = mySonic.getDistance(); if (travelTime > 0) { var distance = (travelTime / 29 / 2).toFixed(3); // myLcd.setCursor(1,0); // myLcd.write(Math.round(distance)+"[cm]"); // console.log(Math.round(distance)+"[cm]"); if (before_dist - 50 > distance) { if (!status.kita) oshirase(); } before_dist = distance; } }; var oshirase = function() { console.log("Darekairu!"); status.kita = true; myLcd.setColor(255, 0, 0); myBuzzer.setVolume(0.3); myBuzzer.playSound(upmBuzzer.SI/4, 100000); myBuzzer.playSound(upmBuzzer.SI/5, 100000); myBuzzer.playSound(upmBuzzer.SI/6, 100000); /* myBuzzer.playSound(1000000/(440* Math.pow(2, (3/12))/2), 100000); myBuzzer.playSound(1000000/(440* Math.pow(2, (7/12))/2), 100000); myBuzzer.playSound(1000000/(440* Math.pow(2, (10/12))/2), 100000); */ myBuzzer.stopSound(); setTimeout(function(){ status.kita = false; if (status.iru) { myLcd.setColor(255, 255, 0); } else { myLcd.setColor(100, 100, 100); } }, 1000); }; } var dareka = new Dareka(); ///////////////////////////////////////// var stt = { iru: false, kita: false }; tb.run(myLcd, myBuzzer, mySlide, stt); dareka.check(myLcd, upmBuzzer, myBuzzer, mySonic, myMotion, myServo, stt); var f3js = require('f3js'); var dep = 2, w = 2; // 本体ケース var c = f3js.createContainer(); c.x = 8, c.y = 130; var p = c.createPath(); p.moveTo(0, 0); p.jointTo(75, 0, w, dep); p.jointTo(75, 74, w, dep); p.lineTo(65, 74); p.lineTo(65, 45); p.jointTo(28, 45, w, dep); p.lineTo(28, 130); // p.jointTo(0, 130, w, dep); p.lineTo(0, 130); p.jointTo(0, 0, w, dep); p.close(); var plates = p.extrude(114); plates[0].x = 10; plates[0].y = 10; f3js.add(plates[0]); f3js.drawRectangle(66,150,7,15); plates[1].x = 88; plates[1].y = 10; var front = plates[1]; f3js.drawText( "isyda" // Engraved mark , 20 , 14 ); myLcd.rotation = 10; front.add(myLcd, 27, 66, -90); front.add(myBuzzer, 57, 36, 90); front.add(mySlide, 37, 16); front.add(myMotion, 57, 86, 90); f3js.add(plates[1]); plates[2].x = 165; plates[2].y = 10; f3js.add(plates[2]); plates[3].x = 210; plates[3].y = 10; f3js.add(plates[3]); plates[4].x = 90; plates[4].y = 130; f3js.add(plates[4]); plates[5].x = 100; plates[5].y = 130; f3js.add(plates[5]); // Sonicケース var sc = f3js.createContainer(); sc.x = 180, sc.y = 130; var sp = sc.createPath(); sp.moveTo(0, 0); sp.jointTo(60, 0, w, dep); sp.lineTo(60, 50); sp.jointTo(0, 50, w, dep); sp.lineTo(0, 0); sp.close(); f3js.drawRectangle(202.5, 148, 15, 7); var splates = sp.extrude(60); splates[0].x = 180, splates[0].y = 185; f3js.add(splates[0]); splates[1].x = 245, splates[1].y = 130; f3js.add(splates[1]); splates[2].x = 245, splates[2].y = 195; splates[2].add(mySonic, 30, 17) f3js.add(splates[2]); f3js.drawCircle(320, 35, 1); f3js.drawCircle(320, 35+52, 1); // When exiting: clear interval and print message process.on('SIGINT', function() { console.log("Exiting..."); dareka.destroy(); tb.destroy(); myLcd.setColor(100, 100, 100); myBuzzer.stopSound(); process.exit(0); });
カスタマイズ

このコンテンツにはカスタマイズできる項目がありません。

表示オプション
ソースコード中で変数宣言にコメントをつけるとカスタマイズ項目としてGUIウィジェットが表示されます。グレーアウトしているウィジェットはユーザが提案した項目で、ソースコード末尾の変数宣言に対応しています。

設計のダウンロード

モジュール

このプロジェクトは組み立てにモジュールを必要としません。

レイアウト
プログラム

ログインしないと使えない機能です。