亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

蓝牙 Nerf 炮塔

组件和用品

Arduino Nano R3
× 1
HC-05 蓝牙模块
× 1
LM2596 降压转换器
× 1
MG-90s 舵机
× 3
130 型直流电机
× 2
FR207 整流二极管
× 1
RFP30N06LE mosfet
× 1
2.1x5.5mm 插头
× 1
电阻 10kΩ
× 1
电阻 330Ω
× 1
电阻 680Ω
× 1
M2x10 自攻螺丝
× 30
M5*20 沉头螺钉
× 4
杜邦连接器
× 15
1.5mm 金属棒
× 1
线
× 1
热缩管
× 1
20mm 橡皮筋
× 1
9V 电源(最低 2.5 安培)
× 1

必要的工具和机器

螺丝刀
剥线钳
钳子
烙铁
万用表
压接工具
3D 打印机

应用和在线服务

Microsoft Windows 10

关于这个项目

感谢您检查我的蓝牙控制的 Nerf 炮塔项目。我不认为这里有太多解释要做,这是一个 Nerf 炮塔,通过蓝牙从 Android 设备或 PC 控制。

.................... https://www.littlefrenchkev.com/bluetooth-nerf-turret.................. ......

它是如何运作的?

没有什么超级复杂的。俯仰和平移运动由 Arduino Nano 驱动的 2 个伺服系统处理。

飞镖使用由 2 个小型直流电机旋转的 2 个滚轮射出。发射命令时,伺服将飞镖推入滚轮。弹匣可容纳7个飞镖。

如上所述,它是通过蓝牙从安卓设备或 PC 控制的。

如何构建它?

组装:

三脚架和弹匣有两个不同的版本。一种是为 MG-90s 舵机设计的,另一种是为 MG996r 舵机设计的。 MG996r 舵机可能会耗电。如果您决定使用它们,请确保您的电源能够胜任工作。

三脚架:

杂志:

接线:

软件和测试!!!

一些额外的照片,因为为什么不!!!


代码

  • Arduino 代码
Arduino 代码Arduino
上传到arduino的代码。无论您选择通过安卓应用程序还是PC控制炮塔,代码都保持不变。
#include //-----声明舵机和变量Servo recoil_servo;Servo pan_servo;Servotilt_servo;const字节 pan_limit_1 =0;常量字节 pan_limit_2 =180;常量字节倾斜_限制_1 =65;常量字节倾斜_限制_2 =180;常量字节后坐力_rest =180; // 静止时舵机的角度字节 recoil_pushed =125; // 舵机推dart需要达到的角度//-----串口数据处理相关变量byte byte_from_app;const byte buffSize =30;byte inputBuffer[buffSize];const byte startMarker =255;const byte endMarker =254;byte bytesRecvd =0;boolean data_received =false;//-----与电机计时和点火相关的变量bool is_firing =false;bool can_fire =false;bool recoiling =false;unsigned long fire_start_time =0;unsigned long fire_current_time =0;const long fire_time =150;unsigned long recoil_start_time =0;unsigned long recoil_current_time =0;const long recoil_time =2 * fire_time;const byte motor_pin =12;boolean motor_ON =false;//8============================Dvoid setup(){ //-----定义电机引脚模式 pinMode(motor_pin, OUTPUT);数字写入(motor_pin,低); //-----将伺服连接到引脚 recoil_servo.attach(9); pan_servo.attach(10);倾斜伺服.附加(11); //-----启动序列 recoil_servo.write(recoil_rest); pan_servo.write(90);延迟(1000);倾斜伺服.写(105); Serial.begin(9600); // 开始串行通信}//8==========================Dvoid loop(){ getDataFromPC();设置电机(); if (data_received) { move_servo(); set_recoil();设置电机(); } fire();}//8==========================Dvoid getDataFromPC() { //预期的数据结构[起始字节,平移量,倾斜量,电机开启,按下发射按钮,结束字节] //开始字节 =255 //平移量 =0 到 253 之间的字节 //倾斜量 =0 到 253 之间的字节 //电机开启 =0 用于off - 1 on //触发按钮按下 =0 表示未按下 - 1 表示按下 // 结束字节 =254 if (Serial.available()) { // 如果数据在串行中可用 byte_from_app =Serial.read(); //读取下一个可用字符 if (byte_from_app ==255) { // 查找起始字节,如果找到:bytesRecvd =0; //将接收到的字节重置为0(从头开始填充inputBuffer) data_received =false; } else if (byte_from_app ==254) { // 查找结束字节,如果找到:data_received =true; // 将 data_received 设置为 true 以便可以使用数据 } else { // 将接收到的字节添加到缓冲区 inputBuffer[bytesRecvd] =byte_from_app; //添加字符到输入缓冲区bytesRecvd++; // 增加接收到的字节(作为索引) if (bytesRecvd ==buffSize) { // 只是为了防止 inputBuffer 填满(不应该发生) bytesRecvd =buffSize - 1; // 如果 bytesReceived> 缓冲区大小设置 bytesReceived 小于缓冲区大小 } } }//8==========================Dvoid move_servo( ) { byte pan_servo_position =map(inputBuffer[0], 0, 253, pan_limit_2, pan_limit_1);//将输入缓冲区值转换为舵机位置值 pan_servo.write(pan_servo_position); //设置平移伺服位置字节tilt_servo_position =map(inputBuffer[1], 0, 253,tilt_limit_2,tilt_limit_1); //将输入缓冲区值转换为伺服位置值tilt_servo.write(tilt_servo_position); //设置平移伺服位置}//8============================Dvoid set_recoil() { if (inputBuffer[3] ==1) { //如果按下开火按钮 if (!is_firing &&!recoiling) { //并且还没有开火或反冲 can_fire =true; //设置可以触发为真(见void fire()中的效果) } } else { // 如果没有按下触发按钮 can_fire =false; //set 可以触发为 false(参见 void fire() 中的效果)}}//8============================Dvoid set_motor () { //-----使用 MOSFET 晶体管启动和停止电机。 if (inputBuffer[2] ==1) { //如果触摸到屏幕 digitalWrite(motor_pin, HIGH); //打开电机 motor_ON =true; } else { //如果屏幕没有被触摸 digitalWrite(motor_pin, LOW); //关闭电机 motor_ON =false; }}//8==========================Dvoid fire() { //如果电机字节打开,打开电机并检查if (can_fire &&!is_firing &&motor_ON) { //if (can_fire &&!is_firing) { fire_start_time =millis(); recoil_start_time =毫秒(); is_fireing =true; fire_current_time =毫秒(); recoil_current_time =毫秒(); if (is_firing &&fire_current_time - fire_start_time  recoil_time) { is_firing =false; }}
python 文件
可执行文件和 android 应用程序可以在这里找到:https://www.littlefrenchkev.com/bluetooth-nerf-turrethttps://github.com/LittleFrenchKev/Bluetooth_Nerf_turret

示意图

这是主要的接线图。
布线分为小段,使用杜邦连接器连接在一起。这是为了便于组装。 这里是HC-05蓝牙接线。
这条接线包括一个分压器,允许将来自 arduino 的 5V 电压降低到 HC-05 接收器引脚的 3.3V 左右。

制造工艺

  1. 电阻
  2. 集成电路
  3. 自主神经哨兵炮塔
  4. Arduino 数字骰子
  5. 多温度传感器
  6. 将遥控车变成蓝牙遥控车
  7. Arduino 游戏控制器
  8. MotionSense
  9. Arduino 带蓝牙控制 LED!
  10. MOSMusic
  11. 钻孔机的组成
  12. 内燃机的组成部分