Arduino无人机四轴飞行器(esp8266)

2023-10-29

想要更多项目私wo!!!

一、电路设计

 硬件组成:   

  • Arduini Nan
  • ESP8266
  • MPU6050 模块
  • 有刷电机
  • 螺旋桨
  • 电池包
  • Si2302场效应管
  • 无人机架

ESP8266模块

        为了与无人机通信,我们需要蓝牙或WIFI连接,所以我们使用ESP8266 Wi-Fi模块,因为它有内置的Wi-Fi,我们可以使用它进行通信。

ESP8266开源、互动、可编程、低成本、简单、智能、最低成本的Wi-Fi硬件。

至于无人机的飞行范围。测试已经得到了范围大约是70米,使用三星手机充当WiFi热点和远程控制器。

MPU6050

        MPU6050 IMU,一个低成本的设备,包含陀螺仪和加速计。

我们将使用MPU-6050和ESP8266模块来做一个无人机。

二、效果图

 

三、部分代码

#include<Wire.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
WiFiUDP UDP;
char packet[4];
//IPAddress local_IP(192, 168, 203, 158);
//IPAddress gateway(192, 168, 1, 158);
//IPAddress subnet(255, 255, 0, 0);
//_________________________________________//  
int ESCout_1 ,ESCout_2 ,ESCout_3 ,ESCout_4;
int input_PITCH = 50;
int input_ROLL = 50;
int input_YAW = 50;
volatile int input_THROTTLE = 0;
int Mode = 0;

boolean wall_car_init = false;
boolean set_motor_const_speed = false;
int8_t target_axis=0;
int8_t target_dirr=0;
boolean wheal_state = false;

uint8_t pwm_stops;
int arr[] = {20,10,20,10};
volatile int order[] = {0,0,0,0}; //volatile key
int temp_arr[] = {0,0,0,0};
int pulldown_time_temp[] = {0,0,0,0,0};
int pulldown_time[] = {0,0,0,0,0};
volatile int pulldown_time_temp_loop[] = {0,0,0,0,0}; //volatile key
uint8_t pin[] = {14,12,13,15};
int i,j,temp_i,temp;
boolean orderState1,orderState2,orderState3,orderState4,Timer_Init;

int16_t gyro_x, gyro_y, gyro_z, acc_x, acc_y, acc_z, temperature, acc_total_vector;
float angle_pitch, angle_roll,angle_yaw,prev_roll,prev_pitch,prev_yaw;
boolean set_gyro_angles;
float angle_roll_acc, angle_pitch_acc;
float angle_pitch_output, angle_roll_output, angle_yaw_output;
long Time, timePrev;
float elapsedTime,P_factor;
float acceleration_x,acceleration_y,acceleration_z;
long gyro_x_cal, gyro_y_cal, gyro_z_cal;
float pitch_PID,roll_PID,yaw_PID;
float roll_error, roll_previous_error, pitch_error, pitch_previous_error, yaw_error, yaw_previous_error;
float roll_pid_p, roll_pid_d, roll_pid_i, pitch_pid_p, pitch_pid_i, pitch_pid_d, yaw_pid_p, yaw_pid_i, yaw_pid_d;
float roll_desired_angle, pitch_desired_angle, yaw_desired_angle; 
double twoX_kp=5;      //5
double twoX_ki=0.003;   //0.003   
double twoX_kd=1.4;     //1.4
double yaw_kp=8;      //5
double yaw_ki=0;  //0.005
double yaw_kd=4;      //2.8



void ICACHE_RAM_ATTR PWM_callback() {
  switch (pwm_stops){
    case 0:
      pulldown_time_temp[0] = pulldown_time_temp_loop[0];
      pulldown_time_temp[1] = pulldown_time_temp_loop[1];
      pulldown_time_temp[2] = pulldown_time_temp_loop[2];
      pulldown_time_temp[3] = pulldown_time_temp_loop[3];
      pulldown_time_temp[4] = pulldown_time_temp_loop[4];
      pwm_stops = 1;
      if(input_THROTTLE!=0){GPOS = (1 << 14);GPOS = (1 << 12);GPOS = (1 << 15);GPOS = (1 << 13);}
      timer1_write(80*pulldown_time_temp[0]);
      break;
    case 1:
      pwm_stops = 2;
      GPOC = (1 << pin[order[0]]);
      timer1_write(80*pulldown_time_temp[1]);
      break;   
    case 2:
      pwm_stops = 3;
      GPOC = (1 << pin[order[1]]);
      timer1_write(80*pulldown_time_temp[2]);
      break;
    case 3:
      pwm_stops = 4;
      GPOC = (1 << pin[order[2]]);
      timer1_write(80*pulldown_time_temp[3]);
      break;
    case 4:
      pwm_stops = 0;
      GPOC = (1 << pin[order[3]]);
      timer1_write(80*pulldown_time_temp[4]);
      break;             
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Arduino无人机四轴飞行器(esp8266) 的相关文章

  • 如何在Arduino上将int转换为字符串?

    如何转换 int n 到一个字符串 以便当我通过串行发送它时 它作为字符串发送 这是我到目前为止所拥有的 int ledPin 13 int testerPin 8 int n 1 char buf 10 void setup pinMod
  • 批处理文件:从串口接收数据并将其写入txt文件

    我正在尝试通过 USB 串行端口从 Arduino 提取一些数据并将其写入 txt 文件 因此 我使用批处理文件 Windows 7 普通cmd 它发送例如 d 从 Arduino 请求所需的数据 收到 d 后 Arduino 开始向 PC
  • printf 的包装

    我在Arduino下编码 我想开发串行打印格式化功能 所以我尝试使用sprintf未知大小的缓冲区 基本上 我们可以避免谈论 Arduino 及其串行输出 并考虑将文本写入缓冲区 然后使用printf 我试过这个 include
  • Arduino:使用串口和软件串口与蓝牙模块

    我的目的是使用 Arduino 通过 HC 05 蓝牙模块在 PC 和 Android 设备之间建立通信 我使用 PC 和 Arduino 串行监视器 之间的 USB 通信以及 SoftwareSerial 来连接到 HC 05 我的问题是
  • 如何将值从 Arduino 发送到 Python,然后使用该值

    我正在构建一个使用 Python 进行远程控制的机器人 通过简单的 GUI 通过互联网发送控制消息 我的部分代码 GUI 和控制系统 运行得很好 但我陷入了困境 我正在尝试使用视差平传感器来获取与物体的距离信息Arduino Mega ht
  • DCF77 解码器与噪声信号

    我几乎完成了我的开源 DCF77 解码器项目 当我注意到标准 Arduino DCF77 库在噪声信号上表现非常差时 这一切就开始了 特别是当天线靠近计算机或洗衣机正在运行时 我永远无法从解码器中获取时间 我的第一个方法是向输入信号添加 数
  • Java RXTX 库不加载本机库

    基本上我想使用 Arduino 编写一个简单的通信工具java 的 RXTX 库 http rxtx qbang org wiki index php Main Page并且在加载动态库时严重失败 我的系统规格 操作系统 OS X 优胜美地
  • 同时使用 GPRS 和 GSM

    我正在尝试使用 GSM GPRS 调制解调器的 GPRS 功能将数据发送到远程服务器 但我无法这样做 我在 Arduino 论坛上发布了一个问题 但没有得到任何回复 这是问题的链接 https robotics stackexchange
  • C++ Linux (Ubuntu) 正确写入串行(对于 Arduino)

    我想知道是否有一种标准方法可以与高效的串行设备进行通信 我应该使用标准库吗 如果有 是哪一个 现在我正在摆弄让 LED 根据输入的数字以给定的量亮起 Arduino 代码如下 只是练习一些东西 看我过于简单且低效的测试 include
  • C-如何使用PROGMEM存储和读取char数组

    我有三个字符数组 我不希望 Arduino 将它们存储在SRAM http en wikipedia org wiki Static random access memory 所以我想使用PROGMEM来存储和读入flash http en
  • 如何实现Android Open Accessory模式即服务?

    我一直在研究 Android 开放配件开发套件 依照指示Google 提供的 DemoKit 示例 http developer android com guide topics usb accessory html 我在使解决方案适应我的
  • Arduino - 高效地迭代 C 数组

    我有以下数组 PROGMEM prog uint16 t show hide info 4216 8900 4380 580 500 600 500 580 1620 580 500 600 500 580 500 600 480 600
  • ESP8266 I2C从机不确认数据

    我有一个 TM4C123 处理器作为 I2C 主处理器 一个 ESP8266 作为从处理器 对于 ESP 我使用的是 Arduino IDE 并在 2 5 2 版安装了 ESP8266 支持 它应该支持 I2C 从模式 但是 我无法让它工作
  • 使用 Java 控制 Arduino

    我正在寻找一个LED http en wikipedia org wiki Light emitting diode用Java程序打开和关闭 我用 C 完成了这个项目大约 5 分钟 但用 Java 似乎更具挑战性 我让 Arduino 等待
  • 是否可以在 Arduino 上运行 ZeroMQ

    我想知道是否可以通过 ZeroMQ 与 Arduino 进行通信 我想使用 Arduino 来控制一些设备 并希望将大部分应用程序放在计算机上 为此 如果 Arduino 和控制器可以通过 Zeromq 以及 WiFi 或以太网扩展板进行通
  • 使用 Ardulink 命令 Arduino Uno

    我试图在我的 JAVA 应用程序中使用 Ardulink 库来命令我的 Arduino Uno 但没有成功 我不知道我错过了什么 这是我的代码 Link link Link getDefaultInstance boolean connec
  • Arduino Nano 33 IoT 的软件序列号

    我计划从旧的 5V Arduino Nano 迁移到新的 Arduino Nano 33 IoT 我已经使用软件串行 SoftwareSerial h 为旧的 5V Arduino Nano 编写了一个功能代码 以便与 Sim800L 模块
  • 如何使用基于HM-10蓝牙模块的BLE Shield?

    我是 arduino 项目的新手 我想请你帮忙 我从 http imall iteadstudio com development platform arduino shields im130704001 html http imall i
  • Arduino 串行输出丢弃字符

    当我尝试为我的 Arduino Uno 编写一些代码时 我遇到了一个奇怪的串行输出 我有这个原始代码 MyClass myclass void setup Serial Begin 9600 Serial println Starting
  • 是否值得为 EEPROM 实现小型文件系统

    我买了一个I2C EEPROM 我想存储传感器和电压数据 我假设该值可以大于一个字节 并且可以有很多数据 在这种情况下是否值得实现具有小文件分配表的文件系统 例如 这会让我更容易查看 EEPROM 我发现 EEPROM 上出现 FAT 有两

随机推荐

  • 计算机网络笔记四(应用层:DNS协议、FTP协议)

    1 DNS协议 1 1DNS协议基本概念 1 1 1什么是域名 域名 英语 Domain Name 又称网域 是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称 用于在数据传输时对计算机的定位标识 有时也指地理位置
  • 逻辑器件1

    1 COMS器件 常用的74LV 74AC 74AHC 74HC等系列都属于CMOS器件 输入端是上P下N MOS组成的电路 2 缺点是高低电平之间有一段非稳态区间 这个区间PMOS和NMOS部分导通 输出会有振荡 3 逻辑器件 TTL C
  • Windows环境下pcl点云库 安装配置全流程(精简、有效)

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net zaibeijixing article details 130770476 本文为W
  • brk(), sbrk() 用法详解

    http blog csdn net ssjhust123 article details 7772153 brk sbrk 的声明如下 cpp view plain copy include
  • H无穷控制器在Matlab中的实现

    H无穷控制器在Matlab中的实现 H无穷控制器是一种广泛应用于控制系统设计中的方法 它可以用来设计具有鲁棒性和性能要求的控制器 在本文中 我们将介绍如何在Matlab中实现H无穷控制器 并提供相应的源代码 H无穷控制器的设计主要涉及到两个
  • python 用OpenCV统计图片中黄色部分的个数。

    原图片 我的想法是 先将图片中除了黄色的部分全部变为白色 然后再利用 cv2 findContours 函数来识别轮廓 直接统计轮廓的个数就是黄色部分的个数 程序代码 coding utf 8 import os import cv2 im
  • 2023mathorcupA题量子计算机在信用评分卡组合优化中的应用思路

    2023mathorcup A题 量子计算机在信用评分卡组合优化中的应用思路 gzh数模孵化园 出品 先说说这题难在哪 主要在于计算 计算 还是计算 优化算法的计算 三道题都是考察这个 而且是转变为QUBO 形式并求解 问题1要求在100个
  • angular蚂蚁_angular api文档

    AngularJS 中的友好 URL 移除URL 中的 已翻译100 AngularJS 默认将会使用一个 号来对URL进行路由 例如 http example com http example com about http example
  • vue+element ui中的tableData中的数据格式

    tableData接收的是一个数组 数组中的元素是一个个的键值对 如图 tableData接收从后端返回的值 遍历一维数组 就是说 tabelData member 那么从纵向而言 就是遍历数组的个数 tableData从member中 取
  • android内存优化面试题,如何成为一个更好的Android开发者

    前言 事情是这样的 今年年初 在某个大博主那里拿到一份Android面试宝典合集 然后就一直躺在盘里吃灰 直到5月份的时候 有了要跳槽的计划和打算 就想着要刷刷面试题 所以就把这套 积灰 的面试宝典拿出看了看 因为这份文档是一位Alibab
  • Android Handler机制

    Android开发中经常用到handler来发送消息 比如将消息抛到主线程去更新UI handler机制涉及到四个核心的类 Looper 消息循环 有一个Messagequenue 不断从消息队列中取出消息 MessageQuenue 消息
  • cnn 预测过程代码_【交通+AI】使用CNN+LSTM实时出租车出行预测(上)

    这篇论文主要讲述了使用成都的出租车轨迹数据进行建模后生成出行强度图 使用CNN和LSTM进行学习之后通过反卷积生成出行强度预测图 非常适合上手这个领域 主要有两点原因 第一 出租车出行强度只包含了上车下车的频次信息 不涉及OD 路线等复杂问
  • hbase region拆分的三种方式

    我们都知道 region在数据量大到一定程度的时候 会进行拆分 最开始由一个变成二个 而拆分的方式有三种 包括预拆分 自动拆分 手动强制拆分 下面就来介绍介绍拆分的方式 预拆分 预拆分 pre splitting 就是在建表的时候就定义好了
  • 使用Python模拟登陆虎扑,获取cookies

    模拟的虎扑app登录逻辑 import requests import hashlib import re def login username password headers Host games mobileapi hupu com
  • java的remove方法_Java 中remove()方法的使用

    Java 中remove 方法的使用 1 在对集合进行迭代的时候删除其中的元素 最好使用迭代器Iterator的 remove方法进行删除 Iterator ite list iterator while ite hasNext Objec
  • 森林正版服务器,《森林》正式版服务器怎么设置 游戏专用服务器设置教程

    导 读 对于想要联机的小伙伴来说如果拥有自己的服务器那是一件再好不过的时间了 所以今天小编为大家带来的就是玩家 ccsingtao 翻译整理分享的森林游戏专用服务器设置教程 不会创建设置的玩家还不点击进来看看 对于想要联机的小伙伴来说如果拥
  • Jquery serializeObject

    获取Form表单数据 param string form param Array
  • unity中开启物理效果时,用A方块击打B方块,A会直接穿过B(当速度比较大时)

    unity中开启物理效果时 用A方块击打B方块 A会直接穿过B 当速度比较大时 这个有什么好办法解决不 谢谢 最核心的是 限制A方块的速度 以下是网友的建议 可以提高运行次数 减少速度 1 方块A的速度不要乘上Time deltaTime
  • 南开大学软件学院2021年秋季学期研究生算法课程(复习)非确定算法:随机与近似

    非确定算法 随机与近似 确定性算法Deterministic algorithms 对于给定的输入 算法的输出和运行时间不变 非确定性算法Non deterministic algorithms 对于给定的输入 算法的输出或运行时间是不确定
  • Arduino无人机四轴飞行器(esp8266)

    想要更多项目私wo 一 电路设计 硬件组成 Arduini Nan ESP8266 MPU6050 模块 有刷电机 螺旋桨 电池包 Si2302场效应管 无人机架 ESP8266模块 为了与无人机通信 我们需要蓝牙或WIFI连接 所以我们使