
Dans un précédent billet, j’avais fais plusieurs tests d’Avatar basés sur des Hologrammes de manière à fournir un visage à SARAH.
Depuis, j’ai reçu un nouveau projet KickStarter ! Un animatronic de chez Toonimal !
L’idée est très intéressante !
- Le squelette est en Acrylic découpé au laser
- Les moteurs sont connectés à un Ardruino UNO
- La peau est tout bêtement du papercraft
Ensuite j’ai connecté l’Arduino à SARAH
- Installer l’IDE Ardruino
- Passer des heeeuuurresss à configurer le port série
- Utiliser johnny-five pour piloter le tout dans un plugin SARAH
Voici un résultat à l’arrache sans la peau !!!
Le Code:
[crayon]
var five = false;
var board = false;
var servo = false;
var eyeV = false;
var eyeH = false;
exports.init = function(SARAH){
if (five) return;
console.log(‘Init Animatronic !’);
five = require("./lib/johnny-five");
board = new five.Board({ port : ‘\.COM6’ });
board.on("ready", function() {
console.log(‘Board is ready !’);
// Init mouth servo
servo = new five.Servo({ pin: 10, range: [95, 160] });
board.repl.inject({ servo: servo });
// Init eye vertical
eyeV = new five.Servo({ pin: 9, range: [20, 160], continuous: ‘continuous’ });
board.repl.inject({ servo: eyeV });
// Init eye horizontal
eyeH = new five.Servo({ pin: 8, range: [80, 120], continuous: ‘continuous’ });
board.repl.inject({ servo: eyeH });
eyes();
});
}
exports.speak = function(tts, async, SARAH){
var s = syllables(tts);
console.log(‘Speak: [‘+tts+’]’, s);
speak(s);
return tts;
}
exports.action = function(data, callback, config, SARAH){ }
// ——————————————
// ANIMATRONIC
// ——————————————
var speak = function(count){
console.log(‘speak’);
if (count <= 0) { servo.stop(); return; }
servo.to(160);
setTimeout(function(){ servo.to(100); }, 200);
setTimeout(function(){ speak(count-1); }, 400);
}
var eyes = function(){
setTimeout(function(){
var pause = Math.round(Math.random()*4);
if (pause == 4){
eyeV.stop();
eyeH.stop();
}
else {
var dV = Math.round(Math.random()*140+20);
var dH = Math.round(Math.random()*40 +80);
eyeV.to(dV,280);
eyeH.to(dH,280);
}
eyes();
},300);
}
var syllables = function(word) {
word = word.toLowerCase();
if(word.length <= 3) { return 1; }
word = word.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, »);
word = word.replace(/^y/, »);
return word.match(/[aeiouy]{1,2}/g).length;
}
[/crayon]



Répondre à Lamya Ramrami Annuler la réponse.