简单的Hexabot与IR远程电视或MP3

简介:带有IR远程电视或MP3的简单六边形

你喜欢机器人吗?想要拥有一个,但是机器人是如此昂贵,为什么不制造一个?您仍然可以拥有一个机器人,甚至可以自己制作,相信我,您可以轻松地做到这一点,而且您不必付出很多钱,因为它真的很便宜。

补给品

步骤1:切割丙烯酸框架

  • 使用此布局与2mm丙烯酸制作框架
  • 确保大小合适,不要留下任何零件。

步骤2:框架插件

  • 准备丙烯酸框架和6pcs MG90微伺服器,您需要此步骤的丙烯酸胶
  • PIC.1这是腿部零件,将小零件连接到腿上,确保Smal零件的孔适合腿部的切割区域,用胶固定,然后使用螺栓安装伺服器制作,对另一腿做同样的事情。总数为4 LED,这是针对拐角处的四个腿。
  • 中间图片中还有2条腿。4-5,只是用螺钉在中腿中攻击伺服器。
  • PIC 6-11就是将中间腿连接到主框架的方式,使用胶水修复。
  • PIC 12-14将所有腿都固定在主框架上。
  • 在安装伺服器之前,不要忘记,将角伺服器放在丙烯酸框架的孔上。

步骤3:硬件插件

  • 丙烯酸框架已经准备好添加了伺服器,现在您准备将套件安装到框架上,看看图片。
  • PIC.1打开/关闭的开/关加入后侧机器人。用胶将其固定。
  • PIC.2 UBEC 3A放置在靠近ON/OW Switch的附近
  • 图片3将Arduino放在身体中间,用螺钉将其固定在物体框架上的孔中
  • PIC.4打开迷你面包板背面的贴纸盖,将其粘在Arduino的背面
  • PIC.5将超声销插入面包板前中间
  • PIC.6还将IR传感器接收器插入面包板中,请确保可以看到传感器
  • PIC.7还将电池安装在机器人主体的底部,使用螺钉或胶将其固定
  • 通过用螺钉添加垫片来安装顶盖。
  • Last Pictute是可选的,可用于机器人的鞋子,由3D打印设置打印制成,无需支撑。

步骤4:接线

  • 查看pic.1或打开接线.pdf以获取更多详细信息并清除
  • 将所有正伺服电线和负电线放在一起。将其插入与Arduino Vin Pin连接的面包板中,以进行正电缆和Arduino gnd Pin,用于负电缆
  • 对于伺服数据引脚,我们将通过将2条电缆和伺服器连接到一条线中,将6个伺服器分为3个数据输出线。前腿数据电缆到Arduino D7引脚,右中腿,左中腿延伸到Arduino D4引脚,左前腿,左后腿到Arduino D2引脚
  • IR接收器传感器将VCC引脚到5V引脚Arduino,Gdn Pin tu Gnd arduino和引脚S到A0 Arduino Pin
  • Utrasonic Sensor VCC至5V Arduino PIN,GND到GND Arduino Pin,回声为A3 Arduino Pin,Trig to a4 arduino Pin
  • 电池:Positif Wire以固定/关闭电源继续输入 + UBEC,GND线到GND输入UBEC。
  • Outpu UBEC:VCC导线插入Vin Arduino,并将GND插入GND Arduino。
  • 注意:伺服器在图片中的位置为90度

步骤5:编程

1.如果您没有软件,请安装Arduino IDE。可以在这里下载

https://code.google.com/p/arduino/downloads/detail?name=arduino-1.0.5-windows.execan = 2

2.复制已提供的Arduino-Iromote-Master文件,然后打开Arduino

在本地磁盘/programfiles/arduino/库粘贴文件上的计算机上文件

Arduino-Irolemote-Master。

3.运行Arduino IDE软件,单击“打开文件”,然后选择IR_Receiver文件

已提供或仅在ir_receiver.ino文件上双击

4. Prepare arduino uno

5.包含在包装中的T-SOP或IR接收器中。我们给了颜色

T-sop的每条腿,红色为VCC,黑色用于GND,蓝色或黄色用于

输入模拟引脚A0。

6.连接已与T-SOP安装的Arduino并上传IR_Receiver。如果成功,

在Arduino IDE上打开串行监视器。通过单击右角的放大镜图标

软件和新窗口现在将出现在已提供的遥控器中的按钮,您可以使用任何IR遥控器,例如远程电视MP3。

如果数字或价值出现,则意味着您已经成功了

stage.now打开ir_onggobot.ino文件,在单击ir_command_codes.h选项和

将出现机器人动作的命令。您的任务现在替换值

XXXXXXX在IR_COMMAND_CODES.H中,您选择的每个键的键都执行命令。

例如,您选择1号按钮前进,然后按数字按钮1

串行监视器将显示一个值,例如12345678,现在打开IR_COMMAND_CODES.H

您从按下按钮输入号码的窗口

'const long ir_command_forward_codes [] = {xxxxxxxxxx};'你用值12345678更改xxxx

从串行监视器按钮1号获得,因此'const long ir_command_forward_codes [] = {12345678};

并选择另一个按钮以进行反向转向命令和其他按钮。

7.如果一切都填补了,将ir.kolomonggobot.ino上传到arduino。上传完成后。

意味着机器人准备从遥控器中接收命令。

8.安装电池,您的机器人准备就绪

9.代码https://github.com/ericdir/ir_-hexabot


源代码 :

//使用IR遥控器的Hexabot

#include“ iremote.h”


#include“ ir_command_codes.h”


#include


// // //模拟引脚ROF IR接收器传感器

const int ir_pin = a0;


//针对伺服器的PIN

const int left_servo_pin = 2;

const int central_servo_pin = 4;

const int right_servo_pin = 7;


//默认角度

const long left_servo_zero_value = 90;

const long right_servo_zero_value = 90;

const long central_servo_zero_value = 90;


const long side_servos_full_amplitude = 30;

const long side_servos_half_amplitude = 15;

const long central_servo_amplitude = 20;


const long step_period_very_slow = 2000;

const long step_period_slow = 1500;

const long step_period_fast = 1000;

const long step_period_very_fast = 500;


最后的最后米利斯;

长全球阶段;

float angleshiftleftservo;

float angleshiftrightservo;

Float AngleshiftCentralserv;

长stepperiod;

长幅度;

长振幅射击;

布尔人iSattach;

布尔人被阻止;


// // EN:Inreceiver代码

InRecv iNRECV(ir_pin);


伺服左派;

Servo Priestervo;

Servo Centralserv;


void attachservos(){

如果(!iSattached){

leftServo.Attach(left_servo_pin);

Attach(right_servo_pin);

centralservo.attach(central_servo_pin);

isattached = true;

}

}


void distachservos(){

如果(ISATTACHED){

lewservo.detach();

promistervo.detach();

Centralservo.detach();

isattached = false;

}

}


void setup(){

InRecv.YableIrin();

arthsservos();

ISSTOPPED = true;

lastmillis = millis();


AngleShiftLeftServo = 0;

AngleShifTrightServo = 0;

AngleshiftCentralservo = 0;

stepperiod = step_period_fast;

}


int getangle(长振幅,长phasemillis,float shiftangle){

float alpha = 2 * pi * phasemillis / stepperiod + shiftangle;

浮点角=振幅 * sin(alpha);

返回(int)角度;

}


模板

boolean hascode(t(&commandcodes)[n],长代码){

for(int i = 0; i

if(commandcodes [i] ==代码){

返回true;

}

}

返回false;

}


void loop(){

Long millisnow = millis();

Long MillisPassed = Millisnow -LastMillis;

if(ISSTOPPED){

if(millispassed> = 500){

LastMillis = 0;

distachservos();

}


globalphase = 0;

} 别的 {

lastmillis = millisnow;

Globalphase += millisPassed;

globalphase = globalshase%stepperiod;

}

DECODE_RESULTS结果;

if(irecv.decode(&result)){

if(hascode(ir_command_forward_codes,results.value)||

hascode(ir_command_forward_left_codes,results.value)||

hascode(ir_command_forward_right_codes,results.value)){

arthsservos();

ISSTOPPED = false;

AngleShiftLeftServo = 0;

AngleShifTrightServo = 0;

AngleshiftCentralservo = pi/2;

amplitudeleftservo = side_servos_full_amplitude;

ampliterightServo = side_servos_full_amplitude;

if(hascode(ir_command_forward_left_codes,results.value)){

amplitudeleftservo = side_servos_half_amplitude;

} else if(hascode(ir_command_forward_right_codes,results.value)){

ampliterightServo = side_servos_half_amplitude;

}

} else if(hascode(ir_command_backward_codes,results.value)||

hascode(ir_command_backward_left_codes,results.value)||

hascode(ir_command_backward_right_codes,results.value)){


arthsservos();

ISSTOPPED = false;

AngleShiftLeftServo = 0;

AngleShifTrightServo = 0;

AngleshiftCentralservo = -pi/2;


amplitudeleftservo = side_servos_full_amplitude;

ampliterightServo = side_servos_full_amplitude;

if(hascode(ir_command_backward_left_codes,results.value)){

ampliterightServo = side_servos_half_amplitude;

} else if(hascode(ir_command_backward_right_codes,results.value)){

amplitudeleftservo = side_servos_half_amplitude;

}

} else if(hascode(ir_command_turn_left_codes,results.value)){

arthsservos();

ISSTOPPED = false;

AngleShiftLeftServo = 0;

AngleShifTrightServo = pi;

AngleshiftCentralservo = -pi/2;

amplitudeleftservo = side_servos_full_amplitude;

ampliterightServo = side_servos_full_amplitude;

} else if(hascode(ir_command_turn_right_codes,results.value)){

arthsservos();

ISSTOPPED = false;

AngleShiftLeftServo = 0;

AngleShifTrightServo = pi;

AngleshiftCentralservo = pi/2;

amplitudeleftservo = side_servos_full_amplitude;

ampliterightServo = side_servos_full_amplitude;

} else if(hascode(ir_command_stop_codes,results.value)){

arthsservos();

ISSTOPPED = true;

AngleShiftLeftServo = 0;

AngleShifTrightServo = 0;

AngleshiftCentralservo = 0;

amplitudeleftservo = side_servos_full_amplitude;

ampliterightServo = side_servos_full_amplitude;

} else if(hascode(ir_command_very_slow_codes,results.value)){

// Globalphase Koreksi Untuk Menyimpan Posisi Servo Ketika Mengubah Pereode。

globalphase = globalphase * step_period_very_very_slow / stepperiod;

stepperiod = step_period_very_slow;

} else if(hascode(ir_command_slow_codes,results.value)){

globalphase = globalphase * step_period_slow / stepperiod;

stepperiod = step_period_slow;

} else if(hascode(ir_command_fast_codes,results.value)){

globalphase = globalphase * step_period_fast / stepperiod;

stepperiod = step_period_fast;

} else if(hascode(ir_command_very_fast_codes,results.value)){

globalphase = globalphase * step_period_very_very_fast / stepperiod;

stepperiod = step_period_very_fast;

}

inrecv.resume();

}

如果(ISATTACHED){

leftServo.Write(left_servo_zero_value + getangle(amplitudeleftservo,globalphase,angleshiftLeftServo));

promistervo.write(right_servo_zero_value + getangle(ampliterightservo,globalphase,angleshiftrightservo));

centralservo.write(central_servo_zero_value + getangle(central_servo_amplitude,globalphase,globalphase,angleshiftCentralservo));

}

}



ir_command_codes.h

//从远程IR收到的命令代码。一个命令可以分配给许多代码

//您可以输入几个IR远程的代码

//您可以键入多个IR远程的代码^^ //替换XXXXXXXXX用SerialMonitor从SerialMonitor出现的值替换,当我们按下按钮时,选择“来回”的按钮,然后选择。

const long ir_command_forward_codes [] = {16619623};

const long ir_command_backward_codes [] = {16615543};

const long ir_command_turn_left_codes [] = {16607383};

const long ir_command_turn_right_codes [] = {16591063};

const long ir_command_forward_left_codes [] = {16593130};

const long ir_command_forward_right_codes [] = {16609423};

const long ir_command_backward_left_codes [] = {16584943};

const long ir_command_backward_right_codes [] = {16601263};

const long ir_command_stop_codes [] = {16623703};

const long ir_command_very_slow_codes [] = {16580863};

const long ir_command_slow_codes [] = {16613503};

const long ir_command_fast_codes [] = {16597183};

const long ir_command_very_fast_codes [] = {16621663};

步骤6:完成

完成,现在您可以制作另一个机器人....:D


谢谢,埃里克·迪尔加哈尤

机器人竞赛

参加
机器人竞赛

成为第一个分享的人

    建议

    • 垃圾

      垃圾
    • 玩具和游戏竞赛

      玩具和游戏竞赛
    • 家庭装修比赛

      家庭装修比赛

    9条评论

    0
    Deonjwessels

    4个月前

    超酷!对于我的电子学生来说,这可能是一个了不起的项目 - 各种传感器的空间。我有许多Arduino Nanos-他们会用作UNO的替换吗?

    0
    Deonjwessels

    回复4个月前

    那太棒了。谢谢。

    0
    Markus Opitz

    6个月前

    非常简单,非常好。做得好,祝比赛好运。

    0
    Markus Opitz

    6个月前回复

    我再次简化了移动机器人,并将伺服数量减少到三个。对于每个易于重建的人。看一看:
    //www.e-randoseru.com/robo-lizard/

    0
    拉努加

    小费6个月前

    很棒的项目。您可以使用油炸绘制接线图。