广告
大牛教你DIY机器人:附详细步骤及代码,小白也能一学就会
导语:亲手DIY机器人是很多人的梦想,无奈大多数人都是非专业人士,更有一些是完全没接触过类似知识的小白,怎么办,梦想只能就此放弃了吗?最近,wikihow上发表了一篇DIY机器人的文章,详细讲述了大牛DIY机器人的全过程,甚至连程序代码都有,相信你也能跟着他做一个属于自己的机器人。
亲手DIY机器人是很多人的梦想,无奈大多数人都是非专业人士,更有一些是完全没接触过类似知识的小白,怎么办,梦想只能就此放弃了吗?最近,wikihow上发表了一篇DIY机器人的文章,详细讲述了大牛DIY机器人的全过程,甚至连程序代码都有,相信你也能跟着他做一个属于自己的机器人。

以下是文章全文:

你想要DIY一个属于自己的机器人?有很多不同类型的机器人,你自己就能DIY出来。大多数人希望看到机器人执行从A点到B点的简单任务,其实这并不难,只要购买一些模拟器件或者入门工具包就可以了。DIY机器人是自学电子学和计算机编程的一种非常好的方式。

# 第一步:组装机器人



1、收集电子元器件。

DIY机器人需要一些简单的电子元器件,在附近的电子市场(比如华强北)或者在线零售商店(比如某宝)你可以买到其中的大部分,当然,一些基础的套件也可能包含所有所需元器件。这个机器人是不需要焊接的:

• Arduino UNO(或者其他的微控制器)
• 2个连续旋转舵机
• 2个适合上述舵机的轮子
• 1个连铸机辊
• 1个小型无焊料的试验电路板(要找一个每边有两个正负线的电路板)
• 1个远程传感器(有四脚连接器电缆)
• 1个包含1个1万欧姆的电阻的按钮开关
• 1套线对板连接器
• 1个6 x AA的电池支架,包含一个9V DC插座
• 1包跨接线或者22 gauge的布线用电线
• 强力双面胶带或者热粘接剂



2、翻转电池组,背面朝上。

我们用这个电池组作为基础DIY机器人的身体。



3、将两个舵机与电池组的一端对齐。

这应该是电池组的电线伸出来的一端。舵机应该触到底部,并且每个舵机的旋转部分应该在电池支架的两边。舵机被合理的对齐是很重要的,这是为了让轮子放的直一些。舵机的电线应该从电池组的背部出来。



4、用胶带或胶水粘贴舵机。

确定它们被牢牢地粘在一起。舵机的背部应该和电池支架的背部紧紧地贴在一起。舵机现在应该占了电池组背部的一半。



5.将电路板平行贴在电池组背部空下的区域。

它要跟电池组前端有一点点距离,横向在电池组两边应该露出一小部分。在下一步之前,确定它粘附的很牢。“A”排应该很接近舵机。



6.将Arduino微控制器粘在舵机的顶部。

如果两个舵机放的位置很合适的话,它们之间的接触部分应该有一段平整的区域,将Arduino微控制器放在这部分区域上,让Arduino的USB和电源线朝后(远离电路板)。Arduino的前端应该刚好与线路板有重叠。



7.将轮子装在舵机上。

将轮子紧紧地装到舵机的旋转部分,这可能需要很大的力气,因为轮子就是为了紧紧嵌入舵机来提供最大的牵引力。



8.将连铸辊接在接线板底部。

把机身反过来,应该可以看到电路板露在外边一点。将连铸辊装到露在外面的部分,必要的话可以使用立管。连铸辊作为前轮,方便机器人转向。

如果你买了一个工具包,里面可能附带了一些对应连铸辊的立管,可以保证连铸辊接触地面。

# 第二步:给机器人接线



1.改造两个三脚连接器。

用它们将舵机连到电路板上,移动针部,让两边距离相等。



2.将两个连接器插入电路板E排的1-3插口和6-8插口。

确保它们被牢固地插入电路板上。



3.将舵机电缆接到连接器上,黑色电缆在左边(接到1口和6口上)。

这就将舵机与电路板连接在一起。确定左边的舵机连接到左边的连接器上,右边的舵机连接到右边的连接器上。



4.红色跳线分别从C2针和C7针连到红色导轨(正级)针上。

确定你用的是电路板后部的红色导轨针(red rail)(靠近机身的其他部分区域的红色导轨针)。



5.将黑色跳线分别从B1针和B6针接到蓝色导轨针(地线)上。

确定你用的是电路板后部的蓝色导轨针(blue rail pins),不要插到红色导轨针上。



6.白色跳线从Arduino 的针12和针13连接到A3和A8上。

这样,Arduino就能控制舵机和轮子了。



7.将传感器装到电路板前面。

它不能插到电路板的外部电源区域中,应该插到第一排J行中。确定你精确地插到了中间区域,两边有数量相等的针数剩余。



8.黑色跳线连接针I14和传感器左侧第一个可用的蓝色针,让传感器接地。





9.黑色跳线连接针I 17和传感器右侧第一个可用的红色针,给传感器供电。





10.白色跳线连接针I 15和Arduino上的针9,类似地,再连接针I16和针8,将传感器的信号传递给微控制器。



# 第三步:连接电源



1.翻转机身,让电池组的电线从左下角伸出。





2.用红色的电线连接左下角的弹簧。

一定要确定电池组放置位置正确。



3.用黑色电线连接右下角最后一个弹簧。

这两根电线给Arduino供电。



4.将上述红色和黑色的电线连到电路板最右边红色和蓝色的针上。

黑色电线应该插入到蓝色导轨针的针30处。红色电缆线应该插到红色电缆线的针30处。



5.黑色电线连接Arduino上的GND针和电路板后部的蓝色导轨针。

蓝色导轨针处连接位置是针28。



6.一个黑色电线连接电路板后部的蓝色导轨针和前部的蓝色导轨针(位置均在针29处)。

不要连接红色导轨,那样很可能损坏Arduino。



7.连接电路板前部的红色导轨针(针30)到Arduino上的5V针,给Arduino供电。





8.在两排的间隔处针24-26处插入按钮开关,这样不需要拔电源就能关闭机器人。





9.用一根红色线连接H24和传感器右侧下一个可用的针,给按钮供电。





10.用电阻连接H26和蓝色导轨针。

直接将电阻与针连接,并连到几步之前用到的黑色线旁边。



11.用一根白色线连接G26和Arduino的针2处,让Arduino可以给按钮注册。



# 第四步:安装Arduino软件



1.下载并提取Arduino IDE。

这是Arduino的开发环境,这样,你可以将指令编程并上传到你的Arduino微型控制器中。你可以从arduino.cc/en/main/software网站中免费下载它。解压下载下来的文件,找到该文件夹,不需要安装程序,只需要双击arduino.exe来运行它。



2.将电池组连到Arduino上。

给Arduino的连接器接上电池组来为其供电。



3.用USB将Arduino接入电脑。

Windows很有可能识别不了这个设备。



4.按下win+R,并输入“devmgmt.msc”,调出设备管理器。





5.右键点击 “其他设备”选项中的“未知设备”,并选择“更新驱动软件”。

如果你没有看到这个选项,点击“属性”,选择“驱动”标签,接着点击“更新驱动”。



6.选择“浏览我的电脑来寻找驱动软件。

”选择Arduino IDE中自带的驱动软件。



7.点击“浏览”,接着找到你之前下载并解压好的文件夹。

你会在文件夹里找到一个名为“drivers”的文件夹。



8.选择“drivers”文件夹,并点击“确定”。

如果你被警告“这是未知软件”,确认你想要继续。

# 第五步:给机器人编程



1.双击IDE文件夹中的“arduino.exe”启动Arduino IDE,新建一个空白的工程。





2、将以下代码粘贴进去,你的机器人就可以走直线了。



#include // this adds the "Servo" library to the program

// the following creates two servo objects
Servo leftMotor;
Servo rightMotor;

void setup()
{
leftMotor.attach(12); // if you accidentally switched up the pin numbers for your servos, you can swap the numbers here
rightMotor.attach(13);
}

void loop()
{
leftMotor.write(180); // with continuous rotation, 180 tells the servo to move at full speed "forward."
rightMotor.write(0); // if both of these are at 180, the Robot will go in a circle because the servos are flipped. "0" tells it to move full speed "backwards."
}



3.构建并上传代码。

点击左上角的“向右的箭头”来将代码构建并上传到USB连接着的Arduino。

你可能要先把机器人拿起来,因为一旦代码上传好,它会不断向前移动。



4.增加关闭开关功能。

增加代码以下到源代码的“void loop()”部分中来激活关闭开关功能。具体位置在“void loop()”中“write()”函数上面。

if(digitalRead(2) == HIGH) // this registers when the button is pressed on pin 2 of the Arduino
{
while(1)
{
leftMotor.write(90); // "90" is neutral position for the servos, which tells them to stop turning
rightMotor.write(90);
}
}



5.上传并测试你的代码。

增加关闭开关功能后,就可以将代码上传并测试机器人了。在按下按钮之前,机器人不断前进,按下按钮后,它将停止。全部代码如下

#include

// the following creates two servo objects
Servo leftMotor;
Servo rightMotor;

void setup()
{
leftMotor.attach(12);
rightMotor.attach(13);
}


void loop()
{
if(digitalRead(2) == HIGH)
{
while(1)
{
leftMotor.write(90);
rightMotor.write(90);
}
}

leftMotor.write(180);
rightMotor.write(0);
}

到这里,一个非常简单的机器人就做好了,是不是觉得有点兴奋呢?不过,这个机器人的运动略为简单了一些,因此我们再提供另一段代码给大家,它使用了机器人的传感器,当机器人遇到障碍时,就会左转。代码中的注释解释了代码每个部分是用来做什么的。

#include

Servo leftMotor;
Servo rightMotor;

const int serialPeriod = 250; // this limits output to the console to once every 1/4 second
unsigned long timeSerialDelay = 0;

const int loopPeriod = 20; // this sets how often the sensor takes a reading to 20ms, which is a frequency of 50Hz
unsigned long timeLoopDelay = 0;

// this assigns the TRIG and ECHO functions to the pins on the Arduino. Make adjustments to the numbers here if you connected differently
const int ultrasonic2TrigPin = 8;
const int ultrasonic2EchoPin = 9;

int ultrasonic2Distance;
int ultrasonic2Duration;

// this defines the two possible states for the Robot: driving forward or turning left
#define DRIVE_FORWARD 0
#define TURN_LEFT 1

int state = DRIVE_FORWARD; // 0 = drive forward (DEFAULT), 1 = turn left

void setup()
{
Serial.begin(9600);

// these sensor pin configurations
pinMode(ultrasonic2TrigPin, OUTPUT);
pinMode(ultrasonic2EchoPin, INPUT);

// this assigns the motors to the Arduino pins
leftMotor.attach(12);
rightMotor.attach(13);
}


void loop()
{
if(digitalRead(2) == HIGH) // this detects the kill switch
{
while(1)
{
leftMotor.write(90);
rightMotor.write(90);
}
}

debugOutput(); // this prints debugging messages to the serial console

if(millis() - timeLoopDelay >= loopPeriod)
{
readUltrasonicSensors(); // this instructs the sensor to read and store the measured distances

stateMachine();

timeLoopDelay = millis();
}
}


void stateMachine()
{
if(state == DRIVE_FORWARD) // if no obstacles detected
{
if(ultrasonic2Distance > 6 || ultrasonic2Distance < 0) // if there's nothing in front of the Robot. ultrasonicDistance will be negative for some ultrasonics if there is no obstacle
{
// drive forward
rightMotor.write(180);
leftMotor.write(0);
}
else // if there's an object in front of us
{
state = TURN_LEFT;
}
}
else if(state == TURN_LEFT) // if an obstacle is detected, turn left
{
unsigned long timeToTurnLeft = 500; // it takes around .5 seconds to turn 90 degrees. You may need to adjust this if your wheels are a different size than the example

unsigned long turnStartTime = millis(); // save the time that we started turning

while((millis()-turnStartTime) < timeToTurnLeft) // stay in this loop until timeToTurnLeft has elapsed
{
// turn left, remember that when both are set to "180" it will turn.
rightMotor.write(180);
leftMotor.write(180);
}

state = DRIVE_FORWARD;
}
}


void readUltrasonicSensors()
{
// this is for ultrasonic 2. You may need to change these commands if you use a different sensor.
digitalWrite(ultrasonic2TrigPin, HIGH);
delayMicroseconds(10); // keeps the trig pin high for at least 10 microseconds
digitalWrite(ultrasonic2TrigPin, LOW);

ultrasonic2Duration = pulseIn(ultrasonic2EchoPin, HIGH);
ultrasonic2Distance = (ultrasonic2Duration/2)/29;
}

// the following is for debugging errors in the console.
void debugOutput()
{
if((millis() - timeSerialDelay) > serialPeriod)
{
Serial.print("ultrasonic2Distance: ");
Serial.print(ultrasonic2Distance);
Serial.print("cm");
Serial.println();

timeSerialDelay = millis();
}
}


# 网友问答时间

1.DIY机器人需要多长时间?



答:这主要取决于机器人的复杂程度。简单的机器人只需要一天左右,比较复杂的机器人,可能需要几个月。

2. 我可以用Arduino的旧手机吗?



答:当然可以。蓝牙模块可用于连接Arduino与手机。

3.哪里可以找到需要的材料?



答:Amazon或者其他购物网站,比如国内的某宝。

4.让机器人的手、手臂和腿运动的设备叫什么?



答:伺服电机。常规舵机的寿命有限。

5. 为什么需要下载Arduino软件?



答:Arduino代码非常简化,基于C ++。 其他微控制器也可以使用其他软件。

6.DIY的机器人可以用来做什么?



答:从理论上说,你可以用它来送餐、洗碗、扫地……这主要取决于你的编程技巧。

7. arduino是什么?



答:Arduino就像手机的操作系统,但它是机器人的操作系统。有很多这样的程序,如C ++或Java等。

8.这是一个简单的机器人吗?



答:是的,可能是最简单的。DIY基本机器人所需的主要必要部件列在页面的顶部。唯一困难的是布线,真的。

9. 机器人会避障吗?



答:可以通过编程来实现。所以,如果想要把机器人做得更好,就需要更好地学习编程。

10. 我无法将代码下载到Arduino板上,该怎么办?



答:您可能需要另外购买一个Arduino板,它有可能破损。在此之前,你可以先尝试将代码系统更新到更高的级别。

11.10岁的孩子能完成这项任务吗?



答:只要按照上述步骤,任何人都能完成。孩子如果看不懂的话,可能需要家长帮忙。

12.DIY这个机器人需要多少钱?



答:影响的因素实在太多了,例如你购买哪些材料,在哪里购买的,等等。

(编译:Yufy Zhang)
Write
注:机器人网原创文章,欢迎转载与分享,转载请注明出处。
广告
推荐使用浏览器内置分享