Skip to content

Instantly share code, notes, and snippets.

@PonDad
Created November 2, 2016 17:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PonDad/1cf410bc3ab5cc9903c96357ac0d2fde to your computer and use it in GitHub Desktop.
Save PonDad/1cf410bc3ab5cc9903c96357ac0d2fde to your computer and use it in GitHub Desktop.
PonBot
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);
});
});
});
<!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>
{
"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