資料介紹
描述
探索醫(yī)療保健和醫(yī)藥行業(yè)等眾多行業(yè)的所有可能奇跡已成為一項(xiàng)關(guān)鍵而艱巨的任務(wù),在這些行業(yè)中,手術(shù)涉及精確度和來(lái)自世界各地專家的意見(jiàn),在化學(xué)制造廠、包裝和生產(chǎn)行業(yè)等地方,以及所有具有惡劣化學(xué)環(huán)境的商業(yè)領(lǐng)域。該項(xiàng)目只是所有所述問(wèn)題的解決方案。Nero 是一個(gè)飛躍,使所有僅靠人工干預(yù)和技能無(wú)法完成的任務(wù)成為可能。
這種手勢(shì)控制的智能機(jī)器人手套使我們能夠使用現(xiàn)有技術(shù)實(shí)現(xiàn)經(jīng)濟(jì)的解決方案。它可以用于控制和自動(dòng)化機(jī)器,如機(jī)械臂、傳送帶、滑輪、起重機(jī)和無(wú)數(shù)其他設(shè)備。
您的想象力是 Nero 效率的極限。該項(xiàng)目為我們提供了非凡的精度、準(zhǔn)確性,并為進(jìn)一步的可訪問(wèn)性和自動(dòng)化提供了自由。
尼祿在行動(dòng)!
概述
在這個(gè)項(xiàng)目中,我們基本上有 2 個(gè)主要部分,傳輸端和接收端。我們利用 WIZnet 串口轉(zhuǎn)以太網(wǎng)板將從 arduino 接收到的數(shù)據(jù)發(fā)布到 MQTT 代理,并使用 nodeMCU 在接收端訂閱數(shù)據(jù)。兩端的技術(shù)步驟將在下一節(jié)中詳細(xì)介紹。
?

?
腳步
發(fā)射端
電路連接:
第 1 步:將霍爾效應(yīng)傳感器 (A3144) 和陀螺儀傳感器 (MPU6050) 連接到 arduino,如下所示。(請(qǐng)參閱連接的引腳圖)
o 霍爾傳感器連接到 arduino 的 d9 和 d6
?

第 2 步:使用 RS-232 電纜將 Arduino Uno 連接到 WIZ750SR 板(帶有串口到以太網(wǎng)轉(zhuǎn)換器),如下所示:
o Arduino Uno 的發(fā)送引腳(本例中為引腳 11)使用 RS-232 電纜和跳線連接到 WIZ750SR 串口轉(zhuǎn)以太網(wǎng)的接收引腳。
o Arduino 的接收引腳(本例中為引腳 10)連接到發(fā)送引腳。
o Arduino 的接地引腳連接到 WIZnet 板的接地引腳。

?
第 3 步:使用以太網(wǎng) LAN 電纜將 WIZnet 板連接到網(wǎng)絡(luò)(用于 MQTT 連接)。
第 4 步:將兩塊板連接到 PC 以上傳代碼。
?
-發(fā)送方代碼:
將代碼上傳到串口轉(zhuǎn)以太網(wǎng)板的步驟:
1. 將開機(jī)開關(guān)從正常模式推到開機(jī)模式。
2、使用ISP工具軟件打開串口。
3. 顯示“serial open complete”后,上傳“os.mbed”編譯代碼。
4.將開機(jī)開關(guān)推回正常位置,重新設(shè)置wiz板。
5.板子接收到的數(shù)據(jù)可以使用“COOLTERM”進(jìn)行監(jiān)控。
?

//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 步:將三個(gè)伺服電機(jī)連接到 NodeMCU。
第二步:按照下圖定位伺服電機(jī)。
第三步:通過(guò)PC將代碼上傳到NodeMCU(ESP8266)。
第 4 步:檢查串行監(jiān)視器上的輸出。
?

?
- 接收方代碼:
將代碼上傳到 NodeMCU 的步驟:
- 將 NodeMCU (ESP8266) 連接到 PC。
- 從工具->端口選擇正確的 COM 端口。
- 將所需的庫(kù)添加到 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();
}
未來(lái)的改進(jìn)
我們的目標(biāo)是減少延遲時(shí)間并開發(fā)客戶端監(jiān)控應(yīng)用程序作為進(jìn)一步改進(jìn),使該項(xiàng)目可在各種行業(yè)中實(shí)施。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
- 智能手套开源构建0次下载
- 智能手套开源项目0次下载
- 带远程arduino的蓝牙智能手机控制0次下载
- 探究LRC产品在智能手机中的应用.pdf13次下载
- 远程手机控制开关应用5次下载
- 如何实现手机远程控制电源开关5次下载
- 基于JJBoover的远程控制ARDUNO自平衡机器人资料下载2次下载
- 使用OpenWrt设计智能家居远程控制系统的论文免费下载11次下载
- 智能家居服务是什么?为什么需要关注它?9次下载
- 远程电源管理控制器23次下载
- 智能电话远程家电控制系统的设计33次下载
- 智能家用远程控制仪的设计与实现25次下载
- 智能型电话远程复合控制系统14次下载
- 基于智能手机的电脑远程控制系统设计32次下载
- 具有远程控制和远程报警功能的智能测控器24次下载
- 远程断电控制器的大小怎么选559次阅读
- 智能电表是如何与远程控制系统连接的?988次阅读
- 智能电表远程控制系统是如何工作的?856次阅读
- HDJS-6智能绝缘手套(靴)耐压试验装置的使用手册642次阅读
- 什么是远程IO控制器?它有哪些作用?3318次阅读
- 采用RC4和RSA混合加密方式实现蓝牙远程控制功能4967次阅读
- 工业自动化设备远程监控实现/系统功能5447次阅读
- 基于Internet远程串口通信实现机械手远程控制系统的设计5690次阅读
- ZETAOTA提供远程升级服务 提高实用性832次阅读
- 更小更智能的电机控制器推进HEV/EV市场1398次阅读
- 对未来智能手机的展望9435次阅读
- HiNet智能网关在工业设备自动化检测和控制设备中的应用2091次阅读
- 智能手环怎么用_智能手环使用教程111854次阅读
- 智能手环到底有啥用_智能手环的功能及用途53681次阅读
- 光电自动手套机电路3231次阅读
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論