制作arduino机器人

本文档介绍了如何使用arduino制作一个具备红外遥控功能的机器人,包括小夜灯、闹钟、室温检测、照明检测和遥控编舞等五大功能。机器人配备多种传感器和舵机,能够根据遥控器指令执行不同任务,如改变RGB灯光、调整亮度、显示温度、检测光线,并执行预设舞蹈动作。
摘要由CSDN通过智能技术生成

硬件

arduino主控板
舵机 *6
蜂鸣器
RGB三色LED模块
2位全彩RGB
温度传感器
光线传感器
按键 *4
红外接收模块
红外遥控器
电机 *2

环境

arduino IDE

构思

  1. 红外遥控功能
    —— 1 小夜灯
    —— 2 闹钟
    —— 3 照明检测
    —— 4 温度检测
    —— 5 遥控编舞
  2. 头部按键功能
    —— 1 眼睛切换
    —— 2 扭腰动作
    —— 3 伸展运动
    —— 4 1分钟beat it舞蹈

一、陪伴小夜灯
首先选择小夜灯模式,遥控器按下1,接下来我们通过←键或→键是切换机器人胸口的全彩RGB灯光,↑键或↓键是调节灯光亮度,按下0键后退出当前模式,回到五个功能的菜单选择。

二、定时闹钟
遥控器按下2键,进入定时闹钟模式,先按下★键,接着按下数字键(09)来选择需要定时多少小时,确定时钟时间后,按下OK键确认,接着通过按下#键后,选择数字键(09)设置定时的分钟,确定分钟的时间后,按下OK键确认,时钟和分钟均确认后,再次按下OK键确认后,机器人开始计时。如果只需要计时分钟,只需设置分钟部分便可,退出当前模式则按下0键,回到五个功能的菜单选择。

三、室温检测
遥控器按下3键,机器人进入室温检测模式,当温度大于25℃,小于30℃为正常状态,胸口指示灯光为紫色,当温度大于30℃为闷热状态,胸口指示灯光为红色,当温度小于25℃为凉爽状态,胸口指示灯光为蓝色。退出当前模式则按下0键,回到五个功能的菜单选择。

四、照明检测
遥控器按下4键,机器人进入照明检测模式,当光线较亮是,机器人眼睛为红色,当光线适度时,机器人眼睛为红绿色,当光线较弱时,机器人眼睛为绿色。退出当前模式则按下0键,回到五个功能的菜单选择。

五、遥控编舞
遥控器按下5键,机器人进入遥控编舞模式,每次选择动作前,需先按下★键,接着通过数字键(16)选择动作,动作选择完成后,通过数字键(19)选择执行次数时,需先按下#键,当动作与执行次数均确定后,按下OK键确认,机器人开始表演舞蹈。退出当前模式则按下0键,回到五个功能的菜单选择。

注意:
1.机器人收到遥控信号时,眼睛将会红光闪烁,如按下后眼睛未闪烁,请重新遥控控制。
2.0键均为退出当前模式

程序在这里插入图片描述

电路

传感器 机器人
18b20温度 A2
红外遥控接收 D2
光敏 A1
胸口RGB D13
蜂鸣器 D8
眼睛RGB D7、D9、D10
头部那件 D4、D5、D6、D7
电机 D3、A3、D11、D12

在这里插入图片描述

程序

#include <IRremote.h>//红外
#include <IRremoteInt.h>

#include "Timer.h"        //计时器头文件
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS A2 //温度 使用A2端口

Timer t;                //计时器对象
int buzzer_pin=8;     //蜂鸣器的pin
boolean buzzer_state=true;       //蜂鸣器状态
boolean hours_state=false;      //小时设置
boolean minutes_state=false;   //分钟设置
long hours=0;   //默认0小时
long minutes=600000; //默认十分钟
long Ttime;    //定时总时间
int a=1;  //count方法传入个数

#include <Adafruit_NeoPixel.h>//RGB
#define PIN 13
#define MAX_LED 9
//#define add_length sizeof(key_add)/sizeof(key_add[0])+1
Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );

int key_add[100] ;
int init_light=100;//初始亮度
int init_color = 0;//初始颜色
uint32_t color_green = strip.Color(255,0,0); 
uint32_t color_red = strip.Color(0,255,0); 
uint32_t color_blue = strip.Color(0,0,255); 
uint32_t color_yellow = strip.Color(255,255,0); 
uint32_t color_white = strip.Color(255,255,255); 
uint32_t color[] = {color_red,color_green,color_blue,color_yellow,color_white};
int length = sizeof(color)/sizeof(color[0])-1;//颜色数组长度
int add_length=0;

int RECV_PIN = 2;
int GM=A1;
int WD=A2;
bool flag;
bool flag_n=true;
int gm;
float wd;
int key;
int second;

int label;
int _add_;
int next;
bool flag_add=false;
bool flag_next=false;
int _ok;
int w=0;
IRrecv irrecv(RECV_PIN);//红外
OneWire oneWire(ONE_WIRE_BUS);//温度
DallasTemperature sensors(&oneWire);//温度
decode_results results;

/*****************语音动作相应********************************/
int yu_ying[6];
int i=0;
int j=0;
bool flag_sing=false;                  //唱歌类       0X02
bool flag_awaken=false;                //唤醒语句     0X01
bool flag_dialogue=false;              //对话类       0X03
bool flag_common_sense =false;         //常识类       0X04    
bool flag_English=false;               //英语类       0X05
bool flag_arithmetic=false;            //算术类       0X06
bool flag_weather=false;               //天气类       0X07
bool flag_qita=false;                  //其他类       0X08
//+++++++++++电机++++++++++++++++++++++++++++++++++
#define forward 1
#define backoff 2
#define leftturn 3
#define rightturn 4
#define M1 3
#define M2 11


/****************头部按键**************************************/
int RedPin = 9; //select the pin for the red LED
int BluePin =7; // select the pin for the  blue LED
int GreenPin =10;// select the pin for the green LED

int stand_ang[6] = { 512,512,512,512,894,130 };//894=512+382  130=512-382

float stand_ang_[6] = { 512,512,512,512,894,130 };//894=512+382  130=512-382
int head_key=0;

int zuohuishou[3][6] ={ 
{ 512,512,512,512,894,130 },//初始
{512,512,512,512,130,130},//举起左手
{512,512,512,512,360,130},//挥动左手
};

int niuyao_buf[2][6] = 
{
  {347,606,794,534,449,560},
  {441,703,477,208,448,559}
};

int ceyatui_bufs[6][6] = 
{
{388,574,737,528,681,225},

{344,620,826,528,630,300},
{425,540,668,529,300,720},//you

{468,641,484,328,713,389},

{384,689,496,216,630,450},
{485,593,484,370,300,720}

};

int dancefs[25][6]={
{512,512,512,512,272,130},    //0
{412,512,512,512,272,130},    //1

{512,512,512,512,894,752},    //2
{512,612,512,512,894,752},    //3

{443,512,588,512,894,720},    //左Post4
{394,512,588,512,894,720},    //左Post踮脚5

{512,581,512,436,304,130},    //右Post6
{512,630,512,436,304,130},    //右Post踮脚7

{512,512,512,512,120,130},    //举左手8
{512,512,512,512,894,904},    //举右手9

{512,581,512,436,304,130},    //10
{512,630,512,436,204,130},    //11

{443,512,588,512,894,720},    //左Post12
{394,512,588,512,894,820},    //13

{512,512,512,512,612,612},    //举左手14
{512,512,512,512,412,412},    //举右手15

{470,485,546,546,512,512},    //举左手16
{550,560,478,478,512,512},    //举右手17

{474,550,533,491,226,780},    //18
{512,512,512,512,800,224},    //19

{512,512,512,512,612,412},    //20
{412,612,512,512,794,230},    //21

{512,512,512,512,512,512},

{512,512,512,512,420,430},    //举左手
{512,512,512,512,594,604},    //举右手
};

int dancef[11][6]={
{512,512,512,512,512,130},    //
{412,512,512,512,512,130},    //

{512,512,512,512,894,512},    //
{512,612,512,512,894,512},    //

{512,512,512,512,312,712},    //
{412,612,512,512,612,412},    //

{390,558,635,509,512,512},    //
{466,634,515,389,512,512},    //

{512,662,526,506,894,894},    //
{362,512,518,498,130,130},    //

{512,512,800,224,312,712},    //
};

void one(){//飞翔姿势,踮脚双挥手
  eyeRGB(0,0,0);
  weifen(dancef[5],dancef[4],20,10);
  eyeRGB(255,0,0);
  weifen(dancef[4],dancef[5],20,10);
}

void two(){//左踮脚举高左手
  eyeRGB(0,0,0);
  weifen(dancefs[0],dancefs[1],20,10);
  eyeRGB(0,255,0);
  weifen(dancefs[1],dancefs[0],20,10);
}

void three(){//右踮脚举高右手
   eyeRGB(0,0,0);
   weifen(dancefs[2],dancefs[3],20,10);
   eyeRGB(0,0,255);
   weifen(dancefs[3],dancefs[2],20,10);
}

void four(){//左踮脚举平左手
   eyeRGB(0,0,0);
   weifen(dancef[0],dancef[1],20,10);
   eyeRGB(255,255,0);
   weifen(dancef[1],dancef[0],20,10);
}

void five(){//左踮脚举平右手
  eyeRGB(0,0,0);
  weifen(dancef[2],dancef[3],20,10);
  eyeRGB(255,0,255);
  weifen(dancef[3],dancef[2],20,10);
}

void six(){//举手
    eyeRGB(0,0,0);
    weifen(dancefs[8],dancefs[9],20,20);
    eyeRGB(0,255,255);
    weifen(dancefs[9],danc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沸腾石灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值