資料介紹
描述
探索醫(yī)療保健和醫(yī)藥行業(yè)等眾多行業(yè)的所有可能奇跡已成為一項關(guān)鍵而艱巨的任務(wù),在這些行業(yè)中,手術(shù)涉及精確度和來自世界各地專家的意見,在化學(xué)制造廠、包裝和生產(chǎn)行業(yè)等地方,以及所有具有惡劣化學(xué)環(huán)境的商業(yè)領(lǐng)域。該項目只是所有所述問題的解決方案。Nero 是一個飛躍,使所有僅靠人工干預(yù)和技能無法完成的任務(wù)成為可能。
這種手勢控制的智能機器人手套使我們能夠使用現(xiàn)有技術(shù)實現(xiàn)經(jīng)濟的解決方案。它可以用于控制和自動化機器,如機械臂、傳送帶、滑輪、起重機和無數(shù)其他設(shè)備。
您的想象力是 Nero 效率的極限。該項目為我們提供了非凡的精度、準(zhǔn)確性,并為進一步的可訪問性和自動化提供了自由。
尼祿在行動!
概述
在這個項目中,我們基本上有 2 個主要部分,傳輸端和接收端。我們利用 WIZnet 串口轉(zhuǎn)以太網(wǎng)板將從 arduino 接收到的數(shù)據(jù)發(fā)布到 MQTT 代理,并使用 nodeMCU 在接收端訂閱數(shù)據(jù)。兩端的技術(shù)步驟將在下一節(jié)中詳細介紹。
?
?
腳步
發(fā)射端
電路連接:
第 1 步:將霍爾效應(yīng)傳感器 (A3144) 和陀螺儀傳感器 (MPU6050) 連接到 arduino,如下所示。(請參閱連接的引腳圖)
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. 將開機開關(guān)從正常模式推到開機模式。
2、使用ISP工具軟件打開串口。
3. 顯示“serial open complete”后,上傳“os.mbed”編譯代碼。
4.將開機開關(guān)推回正常位置,重新設(shè)置wiz板。
5.板子接收到的數(shù)據(jù)可以使用“COOLTERM”進行監(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 步:將三個伺服電機連接到 NodeMCU。
第二步:按照下圖定位伺服電機。
第三步:通過PC將代碼上傳到NodeMCU(ESP8266)。
第 4 步:檢查串行監(jiān)視器上的輸出。
?
?
- 接收方代碼:
將代碼上傳到 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();
}
未來的改進
我們的目標(biāo)是減少延遲時間并開發(fā)客戶端監(jiān)控應(yīng)用程序作為進一步改進,使該項目可在各種行業(yè)中實施。
- 智能手套開源構(gòu)建
- 智能手套開源項目
- 帶遠程arduino的藍牙智能手機控制
- 探究LRC產(chǎn)品在智能手機中的應(yīng)用.pdf 13次下載
- 遠程手機控制開關(guān)應(yīng)用
- 如何實現(xiàn)手機遠程控制電源開關(guān)
- 基于JJBoover的遠程控制ARDUNO自平衡機器人資料下載 2次下載
- 使用OpenWrt設(shè)計智能家居遠程控制系統(tǒng)的論文免費下載 11次下載
- 智能家居服務(wù)是什么?為什么需要關(guān)注它?
- 遠程電源管理控制器
- 智能電話遠程家電控制系統(tǒng)的設(shè)計
- 智能家用遠程控制儀的設(shè)計與實現(xiàn)
- 智能型電話遠程復(fù)合控制系統(tǒng)
- 基于智能手機的電腦遠程控制系統(tǒng)設(shè)計
- 具有遠程控制和遠程報警功能的智能測控器
- HDJS-6智能絕緣手套(靴)耐壓試驗裝置的使用手冊 175次閱讀
- 什么是遠程IO控制器?它有哪些作用? 1196次閱讀
- 采用RC4和RSA混合加密方式實現(xiàn)藍牙遠程控制功能 4292次閱讀
- 工業(yè)自動化設(shè)備遠程監(jiān)控實現(xiàn)/系統(tǒng)功能 4916次閱讀
- 基于Internet遠程串口通信實現(xiàn)機械手遠程控制系統(tǒng)的設(shè)計 5203次閱讀
- ZETAOTA提供遠程升級服務(wù) 提高實用性 686次閱讀
- 更小更智能的電機控制器推進HEV/EV市場 1105次閱讀
- 對未來智能手機的展望 9203次閱讀
- 智能工業(yè)設(shè)備遠程監(jiān)控系統(tǒng)設(shè)計方案 9373次閱讀
- HiNet智能網(wǎng)關(guān)在工業(yè)設(shè)備自動化檢測和控制設(shè)備中的應(yīng)用 1939次閱讀
- 【新專利介紹】一種可遠程控制式智能燃氣表 5485次閱讀
- 智能手環(huán)怎么用_智能手環(huán)使用教程 10.9w次閱讀
- 智能手環(huán)到底有啥用_智能手環(huán)的功能及用途 5.2w次閱讀
- 探討Wi-Fi智能插座,如何實現(xiàn)遠程開關(guān)控制 3.9w次閱讀
- 光電自動手套機電路 2756次閱讀
下載排行
本周
- 1明緯S-50-24開關(guān)電源電路圖.pdf
- 0.10 MB | 3次下載 | 5 積分
- 2如何正確測試電源的紋波
- 0.36 MB | 2次下載 | 免費
- 3Modbus測試工具
- 0.72 MB | 1次下載 | 2 積分
- 4550W充電機原理圖
- 0.13 MB | 1次下載 | 6 積分
- 5TMS320C54x DSP代數(shù)指令集參考集,第3卷
- 1.09MB | 次下載 | 免費
- 6TPS7H4010EVM用戶指南
- 4.02MB | 次下載 | 免費
- 7LMR23630DRREVM用戶指南
- 431.44KB | 次下載 | 免費
- 8意大利薩頓高頻電刀輸出功率偏小分析與處理
- 0.09 MB | 次下載 | 5 積分
本月
- 1使用單片機實現(xiàn)七人表決器的程序和仿真資料免費下載
- 2.96 MB | 44次下載 | 免費
- 2美的電磁爐維修手冊大全
- 1.56 MB | 22次下載 | 5 積分
- 33314A函數(shù)發(fā)生器維修手冊
- 16.30 MB | 13次下載 | 免費
- 4使用TL431設(shè)計電源
- 0.67 MB | 8次下載 | 免費
- 5感應(yīng)筆電路圖
- 0.06 MB | 8次下載 | 免費
- 6LZC3106G高性能諧振控制器中文手冊
- 1.29 MB | 7次下載 | 1 積分
- 7SMD LED選型手冊 貼片燈珠
- 5.47 MB | 5次下載 | 免費
- 8萬用表UT58A原理圖
- 0.09 MB | 4次下載 | 5 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評論
查看更多