仿生毛毛虫机器人源码

仿生毛毛虫机器人Arduino源码

在这里插入图片描述

操作端是blinker
esp32通信
前后两个电机,一个舵机
主要涉及到电机调速, 舵机控制角度
没有多线程, 主要依靠中断处理程序

以下代码仅供参考
#include <ServoESP32.h>
#define BLINKER_WIFI
#include <Blinker.h>
#include <Arduino.h>
#define MOTOR1_STEPPIN 19
#define MOTOR1_DIRPIN 18
#define MOTOR2_STEPPIN 5
#define MOTOR2_DIRPIN 17
#define SERVO_PIN 16
#define MOTOR1_PWM 2
#define MOTOR2_PWM 0
 
char auth[] = "***";
char ssid[] = "***";
char pswd[] = "****";
int Speed1=0;
int Speed2=0;
int power=0;
int speed_direction=1;
int ANGLE = 90;
int UPPER_HIGH = 20;

// 新建组件对象
BlinkerButton Servo_state1("btn-servo1");
BlinkerButton Servo_state2("btn-servo2");
BlinkerButton Servo_state3("btn-servo3");
BlinkerButton switch_power("switch_power");
BlinkerButton speed_dir("speed_dir");
BlinkerSlider Slider_speed1("Slider_speed1");
BlinkerSlider Slider_speed2("Slider_speed2");
BlinkerSlider Slider_angle("Slider_angle");
Servo myservo;

bool setServoPos(char cmd){
    int pos;
    if(cmd == '0'){
        pos=90-ANGLE;
    }else if(cmd == '1'){
        pos=90;
    }else if(cmd == '2'){
        pos=90+ANGLE;
    }else{
        return false;
    }
    myservo.write(pos);
    delay(5);
    return true;
}

// 按下按键即会执行该函数
void Servo_state1_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    if (state=="tap"&&setServoPos('0')){
      Servo_state1.print("Servo_state1 set success");
    }else{
      Servo_state1.print("Servo_state1 set failed");
    }
}

void Servo_state2_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    if (state=="tap"&&setServoPos('1')){
      Servo_state2.print("Servo_state2 set success");
    }else{
      Servo_state2.print("Servo_state2 set failed");
    }
}

void Servo_state3_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    if (state=="tap"&&setServoPos('2')){
      Servo_state3.print("Servo_state3 set success");
    }else{
      Servo_state3.print("Servo_state3 set failed");
    }
}

void Speed1_set_callback(int s){
  Speed1 = s;
  Slider_speed1.print(s);
}

void Speed2_set_callback(int s){
  Speed2 = s;
  Slider_speed2.print(s);
}

void switch_power_callback(const String & state){
  if(state=="tap"){
    power=(power+1)%2;
    if(power){
      switch_power.print("power on");
      if(speed_direction){
      digitalWrite(MOTOR1_DIRPIN, HIGH);
      digitalWrite(MOTOR1_STEPPIN, LOW);
      digitalWrite(MOTOR2_DIRPIN, HIGH);
      digitalWrite(MOTOR2_STEPPIN, LOW);
      }else{
      digitalWrite(MOTOR1_STEPPIN, HIGH);
      digitalWrite(MOTOR1_DIRPIN, LOW);
      digitalWrite(MOTOR2_STEPPIN, HIGH);
      digitalWrite(MOTOR2_DIRPIN, LOW);
      }
    }else{
      switch_power.print("power off");
      digitalWrite(MOTOR1_DIRPIN, LOW);
      digitalWrite(MOTOR1_STEPPIN, LOW);
      digitalWrite(MOTOR2_DIRPIN, LOW);
      digitalWrite(MOTOR2_STEPPIN, LOW);
    }
  }
}

void speed_dir_callback(const String & state){
  if(state=="tap"){
    speed_direction=(speed_direction+1)%2;
    if(speed_direction){
      speed_dir.print("direction 1");
    }else{
      speed_dir.print("direction 0");
    }
  }
  if(speed_direction){
      digitalWrite(MOTOR1_DIRPIN, HIGH);
      digitalWrite(MOTOR1_STEPPIN, LOW);
      digitalWrite(MOTOR2_DIRPIN, HIGH);
      digitalWrite(MOTOR2_STEPPIN, LOW);
  }else{
      digitalWrite(MOTOR1_STEPPIN, HIGH);
      digitalWrite(MOTOR1_DIRPIN, LOW);
      digitalWrite(MOTOR2_STEPPIN, HIGH);
      digitalWrite(MOTOR2_DIRPIN, LOW);
   }
}

void Slider_angle_callback(int a){
  ANGLE = a;
  Slider_angle.print(a);
}

void setup() {
    // 初始化串口
    Serial.begin(115200);
    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);
    pinMode(MOTOR1_STEPPIN, OUTPUT);
    pinMode(MOTOR2_STEPPIN, OUTPUT);
    pinMode(MOTOR1_DIRPIN, OUTPUT);
    pinMode(MOTOR2_DIRPIN, OUTPUT);
    ledcAttachPin(MOTOR1_PWM, 3);
    ledcAttachPin(MOTOR2_PWM, 2);
    ledcSetup(3, 12000, 8);
    ledcSetup(2, 12000, 8);
    Blinker.begin(auth, ssid, pswd);
    //舵机的三个状态
    myservo.attach(SERVO_PIN);
    Servo_state1.attach(Servo_state1_callback);
    Servo_state2.attach(Servo_state2_callback);
    Servo_state3.attach(Servo_state3_callback);
    switch_power.attach(switch_power_callback);
    speed_dir.attach(speed_dir_callback);
    Slider_speed1.attach(Speed1_set_callback);
    Slider_speed2.attach(Speed2_set_callback);
    Slider_angle.attach(Slider_angle_callback);
}
 
void loop() {
    Blinker.run();
    for(int i=0;i<UPPER_HIGH;i++){
      if(power){
        ledcWrite(3,150+Speed1);
        delay(20);
        ledcWrite(2,150+Speed2);
      }else{
        ledcWrite(1,0);
        ledcWrite(2,0);
      }  
    }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 仿生跳跃机器人是一种基于仿生学原理设计的机器人,它能模仿人类的跳跃动作并具备一定的自主能力。CSND(CSDN社区)是一个持续关注科技发展的社区平台,为了推动机器人技术的应用与发展,CSND团队研发了这款仿生跳跃机器人。 这款机器人采用了先进的传感器技术和动力控制系统,能够感知周围环境并做出相应的跳跃动作。它可以通过视觉传感器获取跳跃目标的位置和高度,通过多关节运动装置实现准确的跳跃动作。 此外,仿生跳跃机器人具备一定的自主能力。它可以根据不同的跳跃目标和环境条件,通过自主学习和智能决策,调整跳跃动作的力度和距离,以达到最佳效果。 CSND对于这款机器人的研发具有多重目的。首先,它可以应用于娱乐和体育领域,例如用于表演和娱乐活动中,增加互动性和娱乐性。其次,它还可以用于科学研究和实验室实验,例如模拟人类跳跃动作,进一步研究人类运动机理。最后,它还可以应用于教育和培训领域,例如作为教学工具,帮助学生更好地理解运动原理和仿生学概念。 总之,仿生跳跃机器人是一项具有广泛应用前景的科技创新。它结合了仿生学原理和机器人技术,能够模仿人类跳跃动作并具备一定的自主能力。这款机器人的研发对于推动机器人技术的发展和应用具有重要的意义。 ### 回答2: 仿生跳跃机器人是一种模仿生物跳跃运动能力的机器人。它利用先进的传感器技术和人工智能算法来实现高效的跳跃动作。 首先,仿生跳跃机器人拥有优秀的感知能力。它配备了多种传感器,如摄像头、惯性测量单元和力传感器等,能够准确地感知周围环境和自身状态。通过收集环境信息并实时处理,它可以快速适应不同的跳跃环境,并做出相应的跳跃动作。 其次,仿生跳跃机器人具备智能的控制系统。机器人内置了强大的人工智能算法,可以根据环境条件和任务要求进行动作规划和控制。通过深度学习等技术,机器人可以自主地学习和优化跳跃策略,达到更高的跳跃效率和准确性。 此外,仿生跳跃机器人的机械结构设计也十分重要。它通常采用轻量化材料和灵活的关节,以提高机器人的灵活性和驱动效率。机器人的腿部结构灵感来于生物动物,可以更好地适应不同的支撑环境,提供更稳固的跳跃支撑力。 最后,仿生跳跃机器人具有广泛的应用前景。它可以应用于救援任务中,可以跳过障碍物、突破困境,快速到达目标地点。此外,它还可以用于探索险峻地形,进行高空跳跃等极限运动。同时,仿生跳跃机器人还可以在工业生产中承担重要的物流运输任务。 总而言之,仿生跳跃机器人是一种融合了感知技术、智能控制和生物学原理的先进机器人。随着技术的不断发展,我们相信它将在各个领域展示出更加出色的表现。 ### 回答3: 仿生跳跃机器人是一种基于仿生学原理设计的机器人,其外形与人类的身体结构相似,具备人类类似的弹跳能力。CSND是一家知名的技术论坛,这里分享了关于仿生跳跃机器人的信息。 仿生跳跃机器人的设计灵感自于人类的运动方式和动物的跳跃能力。它的身体结构采用了类似人体骨骼和肌肉的机械结构,可以通过类似于人体关节的部件实现动作的协调和控制。这种仿生设计使得机器人能够更加灵活地进行跳跃动作,并且具备较高的稳定性和能量转换效率。 仿生跳跃机器人的应用领域广泛,可以用于探索险峻的地形,进行搜救任务,甚至是参与娱乐活动。它可以通过弹跳跨越障碍物,迅速移动到目标地点,完成任务。在搜救任务中,它能够跳跃到灾难现场,寻找被困者并进行救援。在娱乐活动中,仿生跳跃机器人可以展示出人类所不能及的高度和灵活性,为观众带来独特的视觉享受。 为了实现这种跳跃能力,仿生跳跃机器人配备了先进的感知和控制系统。它通过激光雷达、摄像头和其他传感器实时感知周围环境,实现对地形和障碍物的识别。同时,它采用了强大的算法和控制器,能够实时调整肌肉的张力和关节的运动,以保持平衡和精准的跳跃。 总之,仿生跳跃机器人是一种利用仿生学原理设计的机器人,具备人类类似的弹跳能力。它可以应用于各种领域,如探险、搜救和娱乐等,为人类带来更多便利和乐趣。在CSND上,你可以找到更多关于仿生跳跃机器人的技术和研究内容,了解更多关于这一领域的最新进展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值