色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>距離裝置的程序執行

距離裝置的程序執行

2023-06-30 | zip | 0.78 MB | 次下載 | 免費

資料介紹

描述

為什么需要保持社交距離?這個項目的動機是什么?

COVID-19(也稱為新型冠狀病毒)是一種致命疾病,已感染超過 2400 萬人并導致超過 80 萬人死亡。

僅在美國,就有600 萬例病例。Worldometers.info 稱,最近 COVID-19 病例一直在增加。

pYYBAGN-z86ACxM3AAAs6i1TtkA782.png
?
?

疾病預防控制中心建議保持社交距離,這是一種人們分開 6 英尺的程序,除非他們是同一個家庭的成員。那么,作為一個社區,我們如何使用技術來執行這個程序呢?這就是這個項目的動機。

成本

為了讓每個人都可以使用這個項目,我們希望確保成本盡可能低。

一臺設備的成本:

  • Arduino Nano--10 售價 36.49 美元,因此每個售價 3.65 美元
  • HC-05--2 為 12.5 美元,因此每個為6.25 美元
  • LCD--2 售價 6.49 美元,因此每個售價 3.25 美元
  • 有源蜂鳴器——20 個,9.59 美元,所以每個是0.48 美元
  • 10K 歐姆電位器——20 個,6.39 美元,所以每個0.32 美元
  • 220 歐姆電阻器 - 100 個 5.69 美元,因此每個0.06 美元
  • 9V 電池——8 塊10.99 美元,所以每塊 1.37 美元
  • 9V 電池連接器面包板--40 個,售價 6.48 美元,因此每個售價 0.16 美元

總計高達15.54 美元。這是非常令人印象深刻的,因為這可以挽救無數生命。

準備步驟:安裝庫

第一步是安裝 LCD 庫,您將需要這兩個庫。這可能預裝在 Arduino IDE 上,但可能不在某些版本上。

轉到工具>管理庫。在這里,搜索“液晶”。

我們要查找的庫是列表中的第一個。如果您還沒有安裝它。

還使用了 SoftwareSerial 庫,但它已經預先安裝。

第 1 步:將 HC-05 配置為 AT 模式

第一步是將 HC-05 配置為 AT 模式。在這里,我們可以執行 AT+INQ 命令來掃描其他設備。

需要兩個或更多設備才能相互掃描。在所需的部分中描述了一種“設備”。

對于此步驟,設備應按如下方式接線:

?
?
?
poYBAGN-z9OAGrEmAAJuUx5uZbE246.jpg
?
1 / 2
?

有兩種 HC-05 設備:一種帶有“KEY”引腳不帶按鈕,一種帶有“EN”引腳帶按鈕

AT模式HC-05無按鍵:

如果 KEY 引腳連接到 +5V DC,它應該自動處于 AT 模式。

AT 模式 HC-05 帶按鈕

在這種情況下,EN 引腳應連接到 +5V DC。插入 Arduino Nano 時,按下按鈕,插入設備,然后松開。這應該激活 AT 模式。

將此代碼復制并粘貼到 Arduino IDE 中。

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10,11);
void setup()
{
  Serial.begin(9600);
  mySerial.begin(38400);
  Serial.println("Enter AT commands:");

  delay(2000);
}

void loop()
{

  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (mySerial.available()){
    Serial.write(mySerial.read());}

  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available()){
    mySerial.write(Serial.read());}
}

從本質上講,這會將您在串行監視器中鍵入的任何內容打印到 HC05,等待消息并打印該消息。

運行代碼。

運行代碼:

打開串行監視器。

當“Enter AT commands:”出現時,輸入“AT”并按下回車鍵。您應該會收到一條消息說“OK”

鍵入“AT+NAME”并顯示名稱。

?
?
?
poYBAGN-z9aAYPsbAACM4pCAQKA075.png
?
1 / 4
?

為了獲得設備之間的距離,我們需要 rssi 值。要獲取 rssi 值,我們需要執行 AT+INQ 命令。但是,在此之前還有一些命令要執行,一一執行:

  • AT+復位
  • AT+初始化
  • AT+IAC=9e8b33
  • AT+CLASS=0
  • AT+INQM=1, 9, 48
  • AT+INQ

這是執行完所有 6 個命令后串行監視器的外觀。(一步步)

?
?
?
pYYBAGN-z9mAW_6aAACsF61BCPo325.png
?
1 / 10
?

請注意,當我們執行 AT+INQ 命令時,它會顯示 +INQ,后跟地址、類別,然后是 RSSI 值。RSSI 值是最后 4 個字符。請注意,這是十六進制;要將其轉換為十進制,我們需要使用帶符號的二進制補碼格式。

如果得到的 RSSI 值為 7FFF,請嘗試再次執行上述命令。

如果 rssi 值以 F 開頭,那么你很好。

第 2 步:轉換 Rssi 值

要轉換 rssi 值,我們需要創建一個新函數來執行此操作。

將此代碼復制并粘貼到 Arduino IDE

#include 

SoftwareSerial mySerial(10,11);
void setup()
{
  Serial.begin(9600);
  mySerial.begin(38400);
  Serial.println("Enter AT commands:");

  delay(2000);
}

unsigned int hexToDec(String hexString) {

  unsigned int decValue = 0;
  int nextInt;

  for (int i = 0; i < hexString.length(); i++) {

    nextInt = int(hexString.charAt(i));
    if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
    if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
    if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
    nextInt = constrain(nextInt, 0, 15);

    decValue = (decValue * 16) + nextInt;
  }

  return decValue;
}

void loop()
{

  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (mySerial.available()){
    String x = String(mySerial.readString());
    int slashn = x.indexOf("\n");
    Serial.println(slashn);
    int xlen = x.length()/(slashn+1);
    if (x.endsWith("OK\r\n")) {
      x = x.substring(0, x.length() - 4);
    }
    for (int i = 0; i < xlen; i++) {
      if (i != 0) {
        x = x.substring(slashn+1);
      }
      slashn = x.indexOf("\n");
      String rssi = x.substring(slashn-5, slashn-1);
      int decNO = hexToDec(rssi);
      Serial.println(decNO);
}

  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available()){

    mySerial.write(Serial.read());
    }

}}

這個程序是如何工作的

首先,它檢測數據是否可用。然后,它將數據復制到一個字符串 (X) 并檢測 INQ 行的結尾(注意所有 INQ 數據都是一個字符串,這需要為單行 INQ 數據分成不同的字符串)。

請注意一行是 +INQ:ADDR, CLASS, RSSI\r\n

通過 for 循環,它正在檢測單獨的行并刪除已經檢測到的行。RSSI 值是倒數第六到第三個(包括 \r\n),因此是 substring(slashn-5, slashn-1); 我們稱結尾為“斜線 n”,因為那是結尾,斜線 n。

當你運行這個程序時,你應該在+INQ....之后得到一個十進制的RSSI值。這應該是一個負數。數字越大,兩個設備越接近。

在下一步中,我們將向您展示如何將此數據報告給 LCD。我們還將了解如何檢測家庭成員

第三步:檢測家庭成員

通過設備的地址可以檢測到家庭成員。地址從第 5 個索引開始,到第 13 個結束,即 substring(5, slashn-11)。

有了這個,我們還可以統計局外人和家庭成員的數量。

對于外人,可以測量距離,看是否為 6 英尺。通過將設備放在 6 英尺處進行一系列試驗后,我們確定為 76.91。

?
?
?
pYYBAGN-z9yAedviAAMKvo0PTSk550.png
?
1 / 4 ?注意:這是在我的代碼中包含“危險”之前。
?

這是代碼。

#include 

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  Serial.begin(9600);


  Serial.println("Enter AT commands:");

  mySerial.begin(38400);

}


unsigned int hexToDec(String hexString) {

  unsigned int decValue = 0;
  int nextInt;

  for (int i = 0; i < hexString.length(); i++) {

    nextInt = int(hexString.charAt(i));
    if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
    if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
    if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
    nextInt = constrain(nextInt, 0, 15);

    decValue = (decValue * 16) + nextInt;
  }

  return decValue;
}


void loop()

{

  
  while (!mySerial.available()) {}
  while (mySerial.available()) {
    
    String x = String(mySerial.readString());
    int slashn = x.indexOf("\n");
    Serial.println(slashn);
    int nod = 0;
    int countf = 0;
    int counto = 0;
    int countd = 0;
    int xlen = x.length()/(slashn+1);
    if (x.endsWith("OK\r\n")) {
      x = x.substring(0, x.length() - 4);
      
    }
    for (int i = 0; i < xlen; i++) {
      if (i != 0) {
        x = x.substring(slashn+1);
      }
      slashn = x.indexOf("\n");
      String rssi = x.substring(slashn-5, slashn-1);
      int decNO = hexToDec(rssi);
      Serial.println(x.substring(5,slashn-11));
      if (x.substring(5, slashn-11) == "FAMILYADDR") {
        countf++;
      }
      else {
        counto++;
        if (decNO > -76.91) {
          countd++;
        }
      
        
      }
      if (decNO > -76.91) {
        Serial.println("near");
      }
      else {
        Serial.println("far");
      }
      Serial.println(decNO);
    }


    Serial.println("Family: " + String(countf) + " Outsider: " + String(counto) + " Danger: " + String(countd));

  }
  delay(100);
}

countf 是家庭成員的數量,counto 是外來者的數量,countd 是小于 6 英尺的危險外來者的數量。

將 FAMILYADDR 替換為您嘗試掃描的“家庭”設備。任何外部設備都將自動計為外部設備。對于多個設備,使用 || 列出多個設備的操作。

運行此程序時,您將看到列出的設備地址以及轉換后的 RSSI。掃描完所有內容后,它將顯示家庭、局外人和危險計數。

第 4 步:向 LCD 報告

當該設備在現實世界中實施時,設備持有者必須有辦法知道 rssi 值以及他們是否有感染 COVID-19 的危險。

如圖所示為 LCD 接線:

?
?
?
poYBAGN-z-CAGhWpAALPeDRpoGg786.jpg
?
1 / 2
?

接下來,將此代碼復制并粘貼到 Arduino IDE 中。運行。

#include 

SoftwareSerial mySerial(10, 11); // RX, TX

#include 

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int buttonstate = 0;
void setup() {
  lcd.begin(16, 2);
  Serial.begin(9600);


  Serial.println("Enter AT commands:");

}


unsigned int hexToDec(String hexString) {

  unsigned int decValue = 0;
  int nextInt;

  for (int i = 0; i < hexString.length(); i++) {

    nextInt = int(hexString.charAt(i));
    if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
    if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
    if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
    nextInt = constrain(nextInt, 0, 15);

    decValue = (decValue * 16) + nextInt;
  }

  return decValue;
}


void loop()

{

  
  
  while (!mySerial.available()) {}
  while (mySerial.available()) {
    
    String x = String(mySerial.readString());
    int slashn = x.indexOf("\n");
    Serial.println(slashn);
    int nod = 0;
    int countf = 0;
    int counto = 0;
    int countd = 0;
    int xlen = x.length()/(slashn+1);
    if (x.endsWith("OK\r\n")) {
      x = x.substring(0, x.length() - 4);
      
    }
    for (int i = 0; i < xlen; i++) {
      if (i != 0) {
        x = x.substring(slashn+1);
      }
      slashn = x.indexOf("\n");
      String rssi = x.substring(slashn-5, slashn-1);
      int decNO = hexToDec(rssi);
      lcd.setCursor(0, 1);
      lcd.print("RSSI:" + String(decNO));
      Serial.println(x.substring(5,slashn-11));
      if (x.substring(5, slashn-11) == "20:2:2011FB") {
        countf++;

      }
      else {
        counto++;
        if (decNO > -76.91) {
          countd++;
        }
      
        
      }
      if (decNO > -76.91) {
        Serial.println("near");
      }
      else {
        Serial.println("far");
      }
      Serial.println(decNO);
    }


    Serial.println("Family: " + String(countf) + " Outsider: " + String(counto) + " Danger: " + String(countd));
    if (counto/2          lcd.setCursor(10, 1);
          lcd.print("DANGER");
          Serial.println("DANGER");
        }
        else {
          lcd.setCursor(10, 1);
          lcd.print("      ");
          Serial.println("Fine");
        }
  }
  delay(100);
})>

我們覺得我們需要解釋背后的邏輯counto/2。請注意,76.91 是平均 rssi 值,這意味著一半的值超過,一半低于。這確保了不超過 5 個值低于 76.91;否則它會說“危險”。<>

pYYBAGN-z-KAcJE2AAAjzAU-rjE954.png
?

第 5 步:蜂鳴器

在過馬路等場景中看設備是很危險的。如果距離小于 6 英尺,我們使用有源蜂鳴器發出警報。只有當任何一個人與另一個人的距離超過 6 英尺時才會關閉。將蜂鳴器連接到 D13,如圖所示:

?
?
?
pYYBAGN-z-WAeZzKAALfo8uMC_I768.jpg
?
1 / 2
?

復制并粘貼代碼,如圖

#include 

SoftwareSerial mySerial(10, 11); // RX, TX

#include 

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int buttonstate = 0;
void setup() {
  pinMode(13,OUTPUT);
  lcd.begin(16, 2);
  Serial.begin(9600);


  Serial.println("Enter AT commands:");

  mySerial.begin(38400);
  
}


unsigned int hexToDec(String hexString) {

  unsigned int decValue = 0;
  int nextInt;

  for (int i = 0; i < hexString.length(); i++) {

    nextInt = int(hexString.charAt(i));
    if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
    if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
    if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
    nextInt = constrain(nextInt, 0, 15);

    decValue = (decValue * 16) + nextInt;
  }

  return decValue;
}



void loop()

{

  
  
  while (!mySerial.available()) {}
  while (mySerial.available()) {
    
    String x = String(mySerial.readString());
    int slashn = x.indexOf("\n");
    Serial.println(slashn);
    int nod = 0;
    int countf = 0;
    int counto = 0;
    int countd = 0;
    int xlen = x.length()/(slashn+1);
    if (x.endsWith("OK\r\n")) {
      x = x.substring(0, x.length() - 4);
      OK = 1;
    }
    for (int i = 0; i < xlen; i++) {
      if (i != 0) {
        x = x.substring(slashn+1);
      }
      slashn = x.indexOf("\n");
      String rssi = x.substring(slashn-5, slashn-1);
      int decNO = hexToDec(rssi);
      lcd.setCursor(0, 1);
      lcd.print("RSSI:" + String(decNO));
      Serial.println(x.substring(5,slashn-11));
      if (x.substring(5, slashn-11) == "20:2:2011FB") {
        countf++;

      }
      else {
        counto++;
        if (decNO > -76.91) {
          countd++;
        }
      
        
      }
      if (decNO > -76.91) {
        Serial.println("near");
      }
      else {
        Serial.println("far");
      }
      Serial.println(decNO);
    }


    Serial.println("Family: " + String(countf) + " Outsider: " + String(counto) + " Danger: " + String(countd));
    if (counto/2          lcd.setCursor(10, 1);
          lcd.print("DANGER");
          Serial.println("DANGER");
          digitalWrite(13,HIGH);
        }
        else {
          lcd.setCursor(10, 1);
          lcd.print("      ");
          Serial.println("Fine");
          digitalWrite(13,LOW);
        }
  }
  delay(100);
})>

運行代碼時,如果距離小于 6 英尺,設備會發出嗡嗡聲,超過 6 英尺時設備會正常運行。

第 6 步:設備獨立性(無計算機)

如果在現實世界中實現,該設備必須在沒有計算機的情況下運行并發送命令。

話雖如此,9V 電池必須提供必要的電壓。

請注意,可能需要一點透明膠帶將電池粘貼到面包板的背面。這使設備更易于握持。

?
?
?
poYBAGN-z-iAMf4AAAMsehz1K5I739.jpg
?
1 / 2
?

。

?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 中文字幕人成人乱码亚洲影视S | 日韩精品一区二区三区AV在线观看 | 国产午夜精品福利久久 | 亚洲 天堂 国产在线播放 | 高清大胆欧美videossexo | Zoofilivideo人馿交 | 国产一区亚洲 | 美国大臿蕉香蕉大视频 | 亚洲精品色情婷婷在线播放 | 国产精品久久久久久熟妇吹潮软件 | 久久久乱码精品亚洲日韩 | 999在线观看精品免费 | 丝袜美女被艹 | 大地影院日本韩国电影免费观看 | 国产精品三级在线观看 | 5g在线视讯年龄确认海外禁止进入 | 国产精品久久人妻互换毛片 | chinese耄耋70老太性 | 久久毛片免费看一区二区三区 | 在线观看插女生免费版 | 国产高清视频青青青在线 | 亚洲午夜精品AV无码少妇 | 草莓视频在线播放视频 | 女王羞辱丨vk | 蜜桃TV成人网站免费打开 | 十分钟免费视频大全在线观看 | 最好看中文字幕国语 | 亚洲七七久久桃花综合 | 国产精品色欲AV亚洲三区软件 | 亚洲精品久久YY5099 | 亚洲免费高清视频 | 亚洲AV怡红院AV男人的天堂 | 欧美国产在线一区 | 免费A级毛片无码无遮挡内射 | 69久久国产露脸精品国产 | 川师 最美老师 | 香蕉人人超人人超碰超国产 | 午夜精品久久久久久久爽牛战 | 国产精品俺来也在线观看 | 国产黄大片在线视频 | yellow片在线观看免费观看动漫 |