Kinect + OpenNi + Osceleton + Processing + Arduino + Windows
1- Primer de tot hem de instal·lar els driver i el paquet SDK de OpenNI. Per fer-ho segueix el següent enllaç:
compte amb el pas 4, seria millor que seguir el pas 4 suggerit aquí:
2- Baixa i descomprimeix OSCeleton-1.0_win32.zip al següent enllaç:
3 - Per usar Osceleton a Processing segueix el següent enllaç:
4 - Per usa Arduino com a comandament infraroig del televisor segueix l'enllaç:
5 - Finalment per usar-ho, executa Osceleton, executa el codi el codi Arduino i finalment el codi Processing.
Recorda que cal posar-te en posició 'Croisant' per que Osceleton et reconegui.
Per cert et recomano que iniciis Oceleton amb els paràmetres '-w -r' que mostra la càmera infraroja en imatge no especular (-h es ajuda).
6- El codi Arduino i Processing a continuació:
Codi Arduino:
Recorda que cal posar-te en posició 'Croisant' per que Osceleton et reconegui.
Per cert et recomano que iniciis Oceleton amb els paràmetres '-w -r' que mostra la càmera infraroja en imatge no especular (-h es ajuda).
6- El codi Arduino i Processing a continuació:
Codi Arduino:
/*
* IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
* An IR LED must be connected to Arduino PWM pin 3.
* Version 0.1 July, 2009
* Thans to Ken Shirriff for IR code
* http://arcfn.com
*/
// http://www.benryves.com/products/sonyir
// http://www.arcfn.com/search/label/ir
// http://lirc.sourceforge.net/remotes/sony/RM-ED035
// http://www.arcfn.com/2010/03/understanding-sony-ir-remote-codes-lirc.html
#include
IRsend irsend;
unsigned long irCommand;
byte command;
void setup() {
Serial.begin(115200);
}
void loop() {
if (Serial.available() >=6) {
if(Serial.read()==0xFF && Serial.read()==0xFE && Serial.read()==0xFD && Serial.read()==0xFC){
command = Serial.read();
Serial.flush();
switch(command){
case 1:
irCommand = 0x30; break; // Send AV1 Command
case 2:
irCommand = 0x250; break; // Send TV Command
}
for (int i = 0; i < 4; i++) {
irsend.sendSony(irCommand, 12);
delay(40);
}
delay(100);
}
}
}
Codi Processing:
Canvieu el mètode 'draw()' de l'exemple 'Stickmanetic' del conjunt d'exemples d'Oscelleton que podeu descarregar aquí:
import processing.serial.*;
Serial port;
void draw() {
for (Skeleton s: skels.values()) {
if((s.rHandCoords[1] < s.headCoords[1]) && (s.lHandCoords[1] > s.headCoords[1])){ // si la ma dreta es per sobre del cap
port.write(0xFF); port.write(0xFE); port.write(0xFD); port.write(0xFC); port.write((byte)1);
}else if((s.rHandCoords[1] < s.headCoords[1]) && (s.lHandCoords[1] < s.headCoords[1])){
port.write(0xFF); port.write(0xFE); port.write(0xFD); port.write(0xFC); port.write((byte)2);
}
}
}
i afageix la següent línia al mètode 'setup()':
port = new Serial(this, Serial.list()[0], 115200);
* IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
* An IR LED must be connected to Arduino PWM pin 3.
* Version 0.1 July, 2009
* Thans to Ken Shirriff for IR code
* http://arcfn.com
*/
// http://www.benryves.com/products/sonyir
// http://www.arcfn.com/search/label/ir
// http://lirc.sourceforge.net/remotes/sony/RM-ED035
// http://www.arcfn.com/2010/03/understanding-sony-ir-remote-codes-lirc.html
#include
IRsend irsend;
unsigned long irCommand;
byte command;
void setup() {
Serial.begin(115200);
}
void loop() {
if (Serial.available() >=6) {
if(Serial.read()==0xFF && Serial.read()==0xFE && Serial.read()==0xFD && Serial.read()==0xFC){
command = Serial.read();
Serial.flush();
switch(command){
case 1:
irCommand = 0x30; break; // Send AV1 Command
case 2:
irCommand = 0x250; break; // Send TV Command
}
for (int i = 0; i < 4; i++) {
irsend.sendSony(irCommand, 12);
delay(40);
}
delay(100);
}
}
}
Codi Processing:
Canvieu el mètode 'draw()' de l'exemple 'Stickmanetic' del conjunt d'exemples d'Oscelleton que podeu descarregar aquí:
import processing.serial.*;
Serial port;
void draw() {
for (Skeleton s: skels.values()) {
if((s.rHandCoords[1] < s.headCoords[1]) && (s.lHandCoords[1] > s.headCoords[1])){ // si la ma dreta es per sobre del cap
port.write(0xFF); port.write(0xFE); port.write(0xFD); port.write(0xFC); port.write((byte)1);
}else if((s.rHandCoords[1] < s.headCoords[1]) && (s.lHandCoords[1] < s.headCoords[1])){
port.write(0xFF); port.write(0xFE); port.write(0xFD); port.write(0xFC); port.write((byte)2);
}
}
}
i afageix la següent línia al mètode 'setup()':
port = new Serial(this, Serial.list()[0], 115200);