Created
November 2, 2016 17:03
-
-
Save PonDad/1cf410bc3ab5cc9903c96357ac0d2fde to your computer and use it in GitHub Desktop.
PonBot
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var express = require("express"); | |
var app = express(); | |
var path = require("path"); | |
var server = require('http').Server(app); | |
var io = require('socket.io')(server); | |
var fs = require('fs'); | |
var request = require('request'); | |
var five = require('johnny-five'); | |
var exec = require('child_process').exec; | |
var OpenJTalk = require('openjtalk'); | |
var mei = new OpenJTalk({ htsvoice: '/home/pi/ponbot/node_modules/openjtalk/voice/mei/mei_happy.htsvoice' }); | |
var MeCab = new require('mecab-async') | |
var mecab = new MeCab(); | |
var array = []; | |
var reply = []; | |
server.listen(3000, function () { | |
console.log('listening on *:3000'); | |
}); | |
app.use(express.static(__dirname + '/public')); | |
app.get('/', function(req, res) { | |
res.sendFile(path.join(__dirname + '/index.html')); | |
}); | |
io.sockets.on('connection', function(socket) { | |
socket.on('chat_message', function(data) { | |
MeCab.command = "mecab -d /usr/lib/mecab/dic/mecab-ipadic-neologd" | |
MeCab.parseFormat(data, function(err, morphs) { | |
if (err) throw err; | |
morphs.map(function(morph) { | |
if (morph.lexical === '感動詞') { | |
array.push(morph.original); | |
reply = '!' | |
console.log(array); | |
} | |
if (morph.compound === '固有名詞') { | |
array.push(morph.original); | |
reply = 'っていいね。' | |
console.log(array); | |
} | |
if (morph.lexical === '形容詞' | morph.compound === '自立') { | |
array.push(morph.original); | |
console.log(array); | |
reply = 'よね。' | |
} | |
}); | |
if(array.length <= 0){ | |
bot_reply = 'そうなんだ。' ; | |
}else{ | |
bot_reply = array[Math.floor(Math.random() * array.length)] + reply; | |
} | |
io.emit('msg','action'); | |
mei.talk(bot_reply); | |
array = []; | |
reply = []; | |
}); | |
}); | |
}); | |
board = new five.Board(); | |
board.on("ready", function() { | |
var a = new five.Motor({ | |
controller: "GROVE_I2C_MOTOR_DRIVER", | |
pin: "A", | |
}); | |
var b = new five.Motor({ | |
controller: "GROVE_I2C_MOTOR_DRIVER", | |
pin: "B", | |
}); | |
var proximity = new five.Proximity({ | |
controller: "HCSR04", | |
pin: 7 | |
}); | |
io.sockets.on('connection', function (socket) { | |
socket.on('click_servo_yes', function (degree_y) { | |
console.log('サーボ1: ' + degree_y); | |
var options_y = { | |
uri: 'https://us.wio.seeed.io/v1/node/GroveServoD1/angle/' + degree_y, | |
form: { access_token: 'アクセストークン' }, | |
json: true | |
}; | |
request.post(options_y, function(error, response, body){ | |
if (!error && response.statusCode == 200) { | |
} else { | |
console.log('error: '+ response.statusCode); | |
} | |
}); | |
}); | |
socket.on('click_servo_no', function (degree_n) { | |
console.log('サーボ0: ' + degree_n); | |
var options_n = { | |
uri: 'https://us.wio.seeed.io/v1/node/GroveServoD0/angle/' + degree_n, | |
form: { access_token: 'アクセストークン' }, | |
json: true | |
}; | |
request.post(options_n, function(error, response, body){ | |
if (!error && response.statusCode == 200) { | |
console.log(body); | |
} else { | |
console.log('error: '+ response.statusCode); | |
} | |
}); | |
}); | |
proximity.on("data", function() { | |
console.log("cm: ", this.cm); | |
socket.emit('message', this.cm); | |
}); | |
socket.on('click_motor_forward', function () { | |
a.rev(252); | |
b.fwd(252); | |
setTimeout(function(){ | |
a.stop(); | |
b.stop(); | |
},500); | |
}); | |
socket.on('click_sound_robot', function () { | |
exec('aplay /home/pi/ponbot/public/robot.wav', function(error, stdout, stderr) { | |
if (error != null) { | |
console.log(error); | |
} | |
}); | |
}); | |
socket.on('click_motor_stop', function () { | |
a.stop(); | |
b.stop(); | |
}); | |
socket.on('click_motor_right', function () { | |
a.rev(381); | |
b.rev(381); | |
setTimeout(function(){ | |
a.stop(); | |
b.stop(); | |
},300); | |
}); | |
socket.on('click_motor_right_turn', function () { | |
a.rev(381); | |
b.rev(381); | |
}); | |
socket.on('click_motor_left', function () { | |
a.fwd(381); | |
b.fwd(381); | |
setTimeout(function(){ | |
a.stop(); | |
b.stop(); | |
},300); | |
}); | |
socket.on('click_motor_left_turn', function () { | |
a.fwd(381); | |
b.fwd(381); | |
}); | |
socket.on('click_motor_backward', function () { | |
a.fwd(252); | |
b.rev(252); | |
setTimeout(function(){ | |
a.stop(); | |
b.stop(); | |
},500); | |
}); | |
}); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="ja"> | |
<head> | |
<meta charset="utf-8"> | |
<title>PonBot</title> | |
<meta name="viewport" content="width=device-width, initial-scale=1"> | |
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> | |
<link href="https://fonts.googleapis.com/css?family=Orbitron" rel="stylesheet"> | |
<link rel="stylesheet" href="style.css"> | |
</head> | |
<body> | |
<article> | |
<h1>PonBot</h1> | |
<article> | |
<div class="spinner"> | |
<div class="bounce1"></div> | |
<div class="bounce2"></div> | |
<div class="bounce3"></div> | |
</div> | |
<p id="caption"></p> | |
</article> | |
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> | |
<script src="http://code.jquery.com/jquery-1.11.1.js"></script> | |
<script src="//cdnjs.cloudflare.com/ajax/libs/annyang/2.4.0/annyang.min.js"></script> | |
<script> | |
$(document).ready(function() { | |
var socket = io.connect('http://192.168.x.xx'); | |
if (annyang) { | |
var commands = {'*i': function() {console.log("実行")}}; | |
annyang.setLanguage('ja-JP') | |
annyang.addCommands(commands); | |
annyang.start(); | |
console.log('録音開始'); | |
annyang.addCallback('resultMatch', function(userSaid) { | |
console.log('録音: ' + userSaid); | |
socket.emit('chat_message', userSaid); | |
}); | |
}; | |
socket.on('msg', function(msg) { | |
console.log('アクション'); | |
if(msg === 'action'){ | |
setTimeout(function(){ | |
socket.emit('click_sound_robot'); | |
socket.emit('click_servo_yes',60); | |
socket.emit('click_motor_left'); | |
setTimeout(function(){ | |
socket.emit('click_servo_yes',120); | |
socket.emit('click_motor_right'); | |
setTimeout(function(){ | |
socket.emit('click_servo_yes',60); | |
socket.emit('click_motor_left'); | |
setTimeout(function(){ | |
socket.emit('click_servo_yes',120); | |
socket.emit('click_motor_right'); | |
setTimeout(function(){ | |
socket.emit('click_servo_yes',90); | |
},1500); | |
},1200); | |
},900); | |
},600); | |
},300); | |
}; | |
}); | |
}); | |
</script> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "ponbot", | |
"version": "1.0.0", | |
"main": "app.js", | |
"scripts": { | |
"test": "echo \"Error: no test specified\" && exit 1" | |
}, | |
"author": "pon_dad", | |
"license": "ISC", | |
"dependencies": { | |
"express": "^4.14.0", | |
"johnny-five": "^0.10.3", | |
"mecab-async": "^0.1.0", | |
"openjtalk": "^0.1.6", | |
"request": "^2.76.0", | |
"socket.io": "^1.5.1" | |
}, | |
"devDependencies": {}, | |
"description": "" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment