Arduino人间大炮 - 使用Leap Motion控制
本帖最后由 红明 于 2014-1-25 22:44 编辑Arduino和Leap motion连接在同一台电脑上,通过Processin将手的位置传回,驱动Servo转动。
http://v.youku.com/v_show/id_XNjYyOTQyODA0.html
更新 2014-01-25
图中的LED Matrix替换为一个单色二极管。下面的图和代码也是依此更改。
原理:
Leap Motion捕捉手的位置,通过Processing取得部分数据,并传输给Arduino以控制两个舵机和一个LED。
主要硬件:
一个Arduino UNO
两个舵机Servo
一个红LED
一个200欧姆电Resistor
一个面包板
一包连接线
一个Leap Motion
与软硬件有关的网址
Leap Motion Dev社区
https://developer.leapmotion.com/
Processing
http://www.processing.org
LeapMotionForProcessing by Darius Morawiec
https://github.com/voidplus/leap-motion-processing
Arduino Servo
http://arduino.cc/en/reference/servo
连线图
Arduino代码
#include <Servo.h>
Servo leapservo;
Servo leapservo2;
int servopin=6;
int servo2pin=10;
int breadboardledpin = 4;
void setup(){
Serial.begin(9600);
leapservo2.attach(servo2pin);
leapservo.attach(servopin);
pinMode(breadboardledpin,OUTPUT);
}
void loop(){
if(Serial.available()){
char buffer;
Serial.readBytes(buffer,3);
int leaphandx = buffer;
if (leaphandx<=-76 && leaphandx >-128){
leaphandx = 256-abs(leaphandx);
}
else if (leaphandx > -76 && leaphandx<0){
leaphandx = 179;
}
else{
leaphandx = buffer;
}
int leaphandy = buffer;
if (leaphandy<=-76 && leaphandy >-128){
leaphandy = 256-abs(buffer);
}
else if (leaphandy > -70 && leaphandy<0){
leaphandy = 179;
}
else{
leaphandy = buffer;
}
int breadboardled = buffer;
if(breadboardled>=0 && breadboardled<110){
digitalWrite(breadboardledpin,HIGH);
}
else{
digitalWrite(breadboardledpin,LOW);
}
leapservo2.write(leaphandx);
leapservo.write(leaphandy);
}
Serial.flush();
}
Processing代码
import processing.serial.*;
import de.voidplus.leapmotion.*;
import development.*;
Serial port;
LeapMotion leap;
float processhandx;
float processhandy;
float processhandz;
void setup() {
size(800, 500, P3D);
background(255);
noStroke();
fill(50);
port = new Serial(this, Serial.list(), 9600);
leap = new LeapMotion(this);
}
void draw() {
background(100);
int fps = leap.getFrameRate();
for (Hand hand : leap.getHands()) {
hand.draw();
PVector hand_position = hand.getPosition();
PVector hand_dynamics = hand.getDynamics() ;
int finger_count = hand.countFingers();
booleanget_finger = hand.hasFingers();
if (hand_position.x<20) {
processhandx = 0;
}
else if (hand_position.x>=780) {
processhandx = 179;
}
else {
processhandx = map(hand_position.x, 20, 780, 0, 179);
}
if (hand_position.y<50) {
processhandy = 0;
}
else if (hand_position.y>=450) {
processhandy = 179;
}
else {
processhandy = map(hand_position.y, 50, 450, 0, 179);
}
if (hand_position.z< -50) {
processhandz = 0;
}
else if (hand_position.z>=50) {
processhandz = 179;
}
else {
processhandz = map(hand_position.z, -50, 50, 0, 179);
}
byte[] q = {
byte(processhandx), byte(processhandy), byte(processhandz)
};
println(q);
port.write(q);
}
}
bobo 发表于 2014-1-22 18:02
能公布一下代码和连接图吗?
你好,Bobo,我这几天在进行。。。算是程序员常说的“重构”吗,哈哈
之前只能传输两个值过来,舵机也会突然翻转,这几天慢慢可以稳定地重现手的位置、手指数量等的数量,身边的程序员都愿意帮忙,没有比这个更好的了。
明天下午,如果事情做完了,我就整理一下,分享给大家。
谢谢你。 Eric 发表于 2014-1-26 11:26
如果可以的话,能否同时检测到全身的动作数据,这样就可以同时控制一个人形机器人,就像铁甲钢拳的电影一样 ...
Leap Motion监测手的活动。
全身动作数据,得想别的办法,比如试试从Kinect取数据。 让生活更有趣 发表于 2018-10-9 11:42
楼主你好,我的情况同19楼,能否告知一下到哪里下载development这个库文件,万分感谢 ...
抱歉,时间太久,我也记不清楚了,刚才查了leapmotion和processing社区,没有发现对应的模块。 这个非常有意思。 能公布一下代码和连接图吗?:) 更新好了。能演示,不过也仅仅是能演示。
下午尝试同时取手的位置、姿态和手指数量,一堆舵机,后来发现速度变慢。
年后再细细研究。 大户啊 那个感应装置买来多少钱 如果可以的话,能否同时检测到全身的动作数据,这样就可以同时控制一个人形机器人,就像铁甲钢拳的电影一样,一定很爽啊!~~~ cj2q 发表于 2014-1-26 11:05
大户啊 那个感应装置买来多少钱
Leap Motion内测期间,提交了一个开发计划,审核通过后就能免费获得一个开发版,去年年初的事。现在淘宝上也有做代购的,5、6百块。 红明 发表于 2014-1-26 14:30
Leap Motion内测期间,提交了一个开发计划,审核通过后就能免费获得一个开发版,去年年初的事。现在淘宝 ...
楼主果然是技术型人才;P 用这个控制机械手 更有搞头,楼主怎么看 哈哈 您好,您的项目已被推荐至 DF创客社区“梦幻3D打印机大奖”,有机会赢取3D打印机大奖。
https://mc.dfrobot.com.cn/thread-941-1-1.html 有意思有前途 Leap Motion 听说真正的使用效果不怎么样?是不是 import development.*;
这个development包不存在,在哪里可以找到
楼主你码代码都不注释一下嘛~:$ toooo477 发表于 2016-3-23 12:26
楼主你码代码都不注释一下嘛~
你好,最近再写代码,我都加注释了。因为过一段时间,我自己都不知道某一段的含义,哈哈。 楼主你好,找不到你的development的库 我最近在用leap motion控制机械臂,processing做上位机,arduino做下位机,和楼主你这个很像,所以就借用了您的代码进行测试,但是就是找不到这个development的库文件,能否告知一下,我应该怎么进行添加,谢谢啦 楼主你好,processing中找不到development这个库,这个能在哪里下载呢? 楼主你好,我的情况同19楼,能否告知一下到哪里下载development这个库文件,万分感谢
页:
[1]
2