资料介绍
描述
探索医疗保健和医药行业等众多行业的所有可能奇迹已成为一项关键而艰巨的任务,在这些行业中,手术涉及精确度和来自世界各地专家的意见,在化学制造厂、包装和生产行业等地方,以及所有具有恶劣化学环境的商业领域。该项目只是所有所述问题的解决方案。Nero 是一个飞跃,使所有仅靠人工干预和技能无法完成的任务成为可能。
这种手势控制的智能机器人手套使我们能够使用现有技术实现经济的解决方案。它可以用于控制和自动化机器,如机械臂、传送带、滑轮、起重机和无数其他设备。
您的想象力是 Nero 效率的极限。该项目为我们提供了非凡的精度、准确性,并为进一步的可访问性和自动化提供了自由。
尼禄在行动!
概述
在这个项目中,我们基本上有 2 个主要部分,传输端和接收端。我们利用 WIZnet 串口转以太网板将从 arduino 接收到的数据发布到 MQTT 代理,并使用 nodeMCU 在接收端订阅数据。两端的技术步骤将在下一节中详细介绍。
脚步
发射端
电路连接:
第 1 步:将霍尔效应传感器 (A3144) 和陀螺仪传感器 (MPU6050) 连接到 arduino,如下所示。(请参阅连接的引脚图)
o 霍尔传感器连接到 arduino 的 d9 和 d6
第 2 步:使用 RS-232 电缆将 Arduino Uno 连接到 WIZ750SR 板(带有串口到以太网转换器),如下所示:
o Arduino Uno 的发送引脚(本例中为引脚 11)使用 RS-232 电缆和跳线连接到 WIZ750SR 串口转以太网的接收引脚。
o Arduino 的接收引脚(本例中为引脚 10)连接到发送引脚。
o Arduino 的接地引脚连接到 WIZnet 板的接地引脚。
第 3 步:使用以太网 LAN 电缆将 WIZnet 板连接到网络(用于 MQTT 连接)。
第 4 步:将两块板连接到 PC 以上传代码。
-发送方代码:
将代码上传到串口转以太网板的步骤:
1. 将开机开关从正常模式推到开机模式。
2、使用ISP工具软件打开串口。
3. 显示“serial open complete”后,上传“os.mbed”编译代码。
4.将开机开关推回正常位置,重新设置wiz板。
5.板子接收到的数据可以使用“COOLTERM”进行监控。
//Code to publish data from the Wiznet Board
#include "mbed.h"
#include "MQTTEthernet.h"
#include "MQTTClient.h"
#define ECHO_SERVER_PORT 7
Serial a(D1,D0);
Serial s(USBTX, USBRX);
int arrivedcount = 0;
void messageArrived(MQTT::MessageData& md)
{
MQTT::Message &message = md.message;
printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
++arrivedcount;
}
void baud(int baudrate) {
s.baud(baudrate);
}
int main (void)
{
baud(9600);
printf("Wait a second...\r\n");
char* topic = "Ultrasonic";
MQTTEthernet ipstack = MQTTEthernet();
MQTT::Client client = MQTT::Client(ipstack);
,>,> char* hostname = "172.16.73.4";
int port = 1883;
int rc = ipstack.connect(hostname, port);
if (rc != 0)
printf("rc from TCP connect is %d\n", rc);
printf("Topic: %s\r\n",topic);
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
data.MQTTVersion = 3;
data.clientID.cstring = "parents";
if ((rc = client.connect(data)) != 0)
printf("rc from MQTT connect is %d\n", rc);
if ((rc = client.subscribe(topic, MQTT::QOS0, messageArrived)) != 0)
printf("rc from MQTT subscribe is %d\n", rc);
MQTT::Message message;
char buf[100];
while (true)
{
char b;
int i=0;
char q[100];
if(a.readable())
{
for(i=0;i<=1;i++)
{
b= a.getc();
q[i]=b;
s.printf("%c",q[i]);
}
sprintf(buf,"%s",q);
message.qos = MQTT::QOS1;
message.retained = false;
message.dup = false;
message.payload = (void*)buf;
message.payloadlen = strlen(buf);
rc = client.publish("Ultrasonic", message);
client.yield(2000);
}
}
}
将代码上传到 Arduino Uno 的步骤:
- 将 Arduino Uno 连接到 PC。
- 从工具->端口选择正确的 COM 端口。
- 从 Tools->Boards 选择 Arduino Uno。
- 编译并上传代码。
//Arduino code to recieve values of the sensors and serially transmit it to the wiznet board
//defines pins numbers
#include#include"Wire.h"
//I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
//for both classes must be in the include path of your project
#include"I2Cdev.h"
#include"MPU6050.h"
//class default I2C address is 0x68
//specific I2C addresses may be passed as a parameter here
//AD0 low = 0x68 (default for InvenSense evaluation board)
//AD0 high = 0x69
MPU6050accelgyro;
int16_tax, ay, az;
int16_tgx, gy, gz;
SoftwareSerialmySerial(10, 11); // RX, TX
inthPin=9;
intvalue1;
intmyInts[2];
constint trigPin = 3;
constint echoPin = 2;
longduration;
intdistance;
inthPin1=6;
inthState1=0;
intvalue;
inthState=0;
intolds=0;
intod;
intolds1=0;
//accelerometer values
intaccel_reading;
intaccel_corrected;
intaccel_offset = 200;
floataccel_angle;
floataccel_scale = 1; // set to 0.01
voidsetup() {
//join I2C bus (I2Cdev library doesn't do this automatically)
Wire.begin();
accelgyro.initialize();
pinMode(trigPin,OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin,INPUT); // Sets the echoPin as an Input
//put your setup code here, to run once:
Serial.begin(9600);
//put your setup code here, to run once:
pinMode(hPin,INPUT);
pinMode(hPin1,INPUT);
mySerial.begin(9600);
pinMode(LED_BUILTIN,OUTPUT);
olds=olds1=80;
}
voidloop() {
digitalWrite(trigPin,LOW);
delayMicroseconds(2);
// Sets the trigPin onHIGH state for 10 micro seconds
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
// Reads the echoPin,returns the sound wave travel time in microseconds
duration =pulseIn(echoPin, HIGH);
// Calculating thedistance
distance=duration*0.034/2;
// Prints the distanceon the Serial Monitor
accelgyro.getMotion6(&ax,&ay, &az, &gx, &gy, &gz);
//accelerometer_X_Axis angle calc
accel_reading= ax;
accel_corrected= accel_reading - accel_offset;
accel_corrected= map(accel_corrected, -16800, 16800, -90, 90);
accel_corrected= constrain(accel_corrected, -90, 90);
accel_angle= (float)(accel_corrected * accel_scale);
// put your main code here, to run repeatedly:
hState=digitalRead(hPin);
hState1=digitalRead(hPin1);
if(hState != olds ||hState1 != olds1){
if(hState==LOW && hState1==LOW){
value=1;
olds = hState;
olds1 = hState1;
}
if (hState1==HIGH&& hState==LOW){
value=2;
olds = hState;
olds1 = hState1; }
if (hState1==LOW&& hState==HIGH){
value=3;
olds = hState;
olds1 = hState1;}
if (hState1==HIGH&& hState==HIGH){
value=4;
olds = hState;
olds1 = hState1;
}
}
else{
if(accel_angle>=0 &&accel_angle<=30)
{
value= 5;
od=value;
}
elseif(accel_angle>=30 && accel_angle<70)
{
value=6;
od=value;
}
elseif(accel_angle>=70 && accel_angle<=90)
{
value=7;
od=value;
}
else{
if(od==0){
value=5;
}
else{
value=od;}
}
}
mySerial.println(value);
Serial.println(value);
delay(1000);
}
接收方
- 电路连接
第 1 步:将三个伺服电机连接到 NodeMCU。
第二步:按照下图定位伺服电机。
第三步:通过PC将代码上传到NodeMCU(ESP8266)。
第 4 步:检查串行监视器上的输出。
- 接收方代码:
将代码上传到 NodeMCU 的步骤:
- 将 NodeMCU (ESP8266) 连接到 PC。
- 从工具->端口选择正确的 COM 端口。
- 将所需的库添加到 Ardunio 编译器。(参考 1.1)
- 从 Tools->Boards 选择 NodeMCU (ESP8266)。
- 编译并上传代码。
/*
This code basically sets up an ESP8266 board as a MQTT client and helps in subscribing to desired topics that are published.
It is required that the board in the 'Tools' section must be selected to NodeMCU and the ESP8266 drivers are installed.
The baud rate must be set at 115200
Here we are operating three servo motors using the nodeMCU based on the values received via the MQTT topic
*/
#include
#include
#include
// Creating objects for the 3 servo motors
Servo servo;
Servo servo1;
Servo servo2;
// The pins we have used for the servo motors are D1,D2 and D3
// Update these with values suitable for your network.
const char* ssid = "CDI";
const char* password = "Cdi*1717";
const char* mqtt_server = "172.16.73.4";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
char old ;
void setup() {
//Initial Setup Code
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
delay(1000);
}
//Code for connecting to the wifi
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
//This function is responsible for subscribing to a topic and receiving the values from it
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
old = (char)payload[0];
//detach each time to avoid jitter of the servo motors
servo2.detach();
servo.detach();
servo1.detach();
for (int i = 0; i < length; i++) {
Serial.println("Received message is :");
Serial.println((char)payload[i]);
servo.detach();
servo1.detach();
servo2.detach();
if((char)payload[i] == '1')
{
servo.detach();
servo2.detach();
servo1.detach();
servo.attach(0);
servo.write(89);
delay(1000);
servo.detach();
servo1.attach(4);
servo1.write(89);
delay(1000);
servo1.detach();
servo2.detach();
old='1';
break;
}
if((char)payload[i] == '2')
{
servo.detach();
servo2.detach();
servo1.detach();
servo1.attach(4);
servo1.write(89);
delay(1000);
servo1.detach();
servo2.detach();
old='2';
break;
}
if((char)payload[i] == '3')
{
servo.detach();
servo2.detach();
servo1.detach();
servo.attach(0);
servo.write(89);
delay(1000);
servo.detach();
servo2.detach();
old='3';
break;
}
if((char)payload[i] == '4')
{
servo.detach();
servo1.detach();
servo2.detach();
servo.attach(0);
servo.write(180);
delay(1000);
servo.detach();
servo1.attach(4);
servo1.write(180);
delay(1000);
servo1.detach();
servo2.detach();
old='4';
break;
}
if((char)payload[i]=='5')
{
servo2.detach();
servo2.attach(5);
servo2.write(179);
delay(1000);
servo2.detach();
}
if((char)payload[i]=='6')
{ servo2.detach();
servo2.attach(5);
servo2.write(89);
delay(1000);
servo2.detach();
}
if((char)payload[i]=='7')
{ servo2.detach();
servo2.attach(5);
servo2.write(2);
delay(1000);
servo2.detach();
}
servo2.detach();
}
servo.detach();
servo1.detach();
servo2.detach();
}
//This function is to reconnect once the connection is lost
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP8266Client")) {
Serial.println("connected");
// Once connected, publish an announcement...
// ... and resubscribe
client.subscribe("Ultrasonic");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
未来的改进
我们的目标是减少延迟时间并开发客户端监控应用程序作为进一步改进,使该项目可在各种行业中实施。
- 智能手套开源构建
- 智能手套开源项目
- 带远程arduino的蓝牙智能手机控制
- 探究LRC产品在智能手机中的应用.pdf 13次下载
- 远程手机控制开关应用
- 如何实现手机远程控制电源开关
- 基于JJBoover的远程控制ARDUNO自平衡机器人资料下载 2次下载
- 使用OpenWrt设计智能家居远程控制系统的论文免费下载 11次下载
- 智能家居服务是什么?为什么需要关注它?
- 远程电源管理控制器
- 智能电话远程家电控制系统的设计
- 智能家用远程控制仪的设计与实现
- 智能型电话远程复合控制系统
- 基于智能手机的电脑远程控制系统设计
- 具有远程控制和远程报警功能的智能测控器
- HDJS-6智能绝缘手套(靴)耐压试验装置的使用手册 175次阅读
- 什么是远程IO控制器?它有哪些作用? 1196次阅读
- 采用RC4和RSA混合加密方式实现蓝牙远程控制功能 4292次阅读
- 工业自动化设备远程监控实现/系统功能 4916次阅读
- 基于Internet远程串口通信实现机械手远程控制系统的设计 5203次阅读
- ZETAOTA提供远程升级服务 提高实用性 686次阅读
- 更小更智能的电机控制器推进HEV/EV市场 1105次阅读
- 对未来智能手机的展望 9203次阅读
- 智能工业设备远程监控系统设计方案 9373次阅读
- HiNet智能网关在工业设备自动化检测和控制设备中的应用 1939次阅读
- 【新专利介绍】一种可远程控制式智能燃气表 5485次阅读
- 智能手环怎么用_智能手环使用教程 10.9w次阅读
- 智能手环到底有啥用_智能手环的功能及用途 5.2w次阅读
- 探讨Wi-Fi智能插座,如何实现远程开关控制 3.9w次阅读
- 光电自动手套机电路 2756次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多