회로

Arduino로 모션 감지 시스템을 구축하는 방법 : 7 단계

Alec Benjamin - Let Me Down Slowly [Official Music Video]

Alec Benjamin - Let Me Down Slowly [Official Music Video]

차례:

Anonim

Arduino로 프로그래밍되고 Ubidots로 구동되는 Feather HUZZAH를 사용하여 모션 및 프레즌스 프로덕션 카운터를 제작하십시오.

Smart Homes 및 Smart Manufacturing의 효과적인 물리적 움직임 및 존재 감지 기능은 노인 AI (Ambient Assisted Living) 솔루션 또는 더 큰 MES를 제공하는 생산 계산 시스템 (Production Counting System)에 이르기까지 다양한 애플리케이션에 매우 유용합니다. 모션 및 현재 상태 감지를위한 다른 응용 프로그램은 다음을 포함하지만 이에 국한되지 않습니다.

  1. 도어 및 게이트 자동화
  2. 자유로운 장소를 지정하기위한 주차 센서
  3. 원격 탱크 수준 모니터링
  4. 스마트 홈 및 조명 및 보안 시설
  5. 컨베이어 라인 단위에있는 탐지 및 계산 장치
  6. 인쇄물에 표시를 표시하십시오.
  7. 골판지, 플라스틱 및 종이 기울임 체 내부의 액체 감지
  8. 거리 감지
  9. 사람들 카운터

존재 및 움직임에 대한 많은 응용 프로그램이 있지만 용량 성, 유도 성, 광전자 및 초음파 센서와 같이 데이터를 수집하는 센서도 마찬가지로 많습니다. 비용, 환경 조건 및 정확도 요구 사항에 따라 환경 및 응용 프로그램 요구 사항에 가장 적합한 하드웨어를 선택해야합니다.

이 자습서에서는 실시간 생산 카운터를 만드는 데 중점을 둡니다. 응용 프로그램은 컨베이어 벨트에서 지나가는 모든 유닛을 계산합니다. 우리는 Arduino IDE를 사용하여 깃털 HUZZAH ESP8266, 초음파 센서 및 Ubidots를 프로그래밍하여 IoT 대시 보드를 표시하고 응용 프로그램을 개발할 것입니다.

용품:

1 단계 : 요구 사항

  1. 깃털 HUZZAH ESP8266MB7389-100 있음
  2. 초음파 센서
  3. Arduino IDE 1.8.2 이상
  4. Ubidots 계정 - 또는 - 교육용 라이센스

2 단계 : 설정

  • 하드웨어 설치
  • II. 펌웨어 설정
  • III. Ubidots 애플리케이션 개발 (이벤트, 변수 및 대시 보드)

3 단계 : 하드웨어 설정

초음파 센서 MB7389-100은 IPv67 등급 덕분에 까다로운 기상 조건에서도 광범위하고 저전력 소모가 요구되는 산업용 어플리케이션을위한 저렴한 옵션입니다.

시작하려면 아래 다이어그램을 미러하여 초음파 센서를 깃털 HUZZAH ESP8266.

노트: 센서 판독 값은 아날로그 판독 값 또는 PWM으로 사용할 수 있습니다. 아래에서는 PWM 판독을위한 설정을 설명 할 것입니다. 추가 정보는 위에 표시된 예를 참조하십시오.

선택 마이크로 컨트롤러와 센서를 IP67 케이스 안에 넣어 먼지, 물 및 기타 위협적인 환경 요소로부터 보호하십시오. 표준 경우는 위의 사진과 비슷합니다.

4 단계 : 펌웨어 설정

먼저 Arduino IDE에 Feather Huzzah를 설치하고 코드를 컴파일해야합니다. 간단한 깜박임 테스트를 수행하여 설정을 확인하는 것을 잊지 마십시오. 페더 장치 연결에 대한 자세한 내용은이 유용한 하드웨어 설치 안내서를 확인하십시오.

센서 데이터를 Ubidots IoT Development Platform으로 보내려면 아래 코드를 복사하여 Arduino IDE에 붙여 넣으십시오. 코드에 표시된 경우 Wi-Fi 네트워크 이름, 암호 및 Ubidot 계정 토큰을 할당해야합니다.

/ ******************************** 라이브러리 포함 ************** ****************/#포함 / ******************************** 상수와 객체 ************** **************** // * Ubidots * / const char * SSID_NAME = "xxxxxxxx"; // 여기에 SSID nameconst char * SSID_PASS = "xxxxxxxx"; // 여기에 암호를 입력하십시오. char * TOKEN = "Assig_your_ubidots_token"; // 여기에 TOKENconst char * DEVICE_LABEL = "모션 제어"; // 귀하의 장치 labelconst char * VARIABLE_LABEL = "거리"; // 귀하의 변수 labelconst char * USER_AGENT = "ESP8266"; const char * VERSION = "1.0"; const char * HTTPSERVER = "industrial.api.ubidots.com"; // Ubidots 비즈니스 사용자 // const char * HTTPSERVER = " things.ubidots.com "; // Ubidots Educational usersint HTTPPORT = 80; / * 초음파 센서 * / const int pwPin1 = 5; // 센서가 연결된 PWM 핀 WMIC 클라이언트 클라이언트 / / *********************************************** ************************************************************************************************************************************************************************************************************************** 변수의 길이 * / int dataLen (char * variable) {uint8_t dataLen = 0; for (int i = 0; i = 250; i ++) {if (variable i! = ' 0') {dataLen ++; } else {break; }} return dataLen;} / ********************************* 주요 기능 ********* ********************** / void setup () {Serial.begin (115200); / * AP * / WiFi.begin (SSID_NAME, SSID_PASS)에 연결합니다. while (WiFi.status ()! = WL_CONNECTED) {지연 (500); Serial.print ( "."); } pinMode (pwPin1, INPUT); WiFi.setAutoReconnect (true); Serial.println (F ( "WiFi connected")); Serial.println (F ( "IP 주소 :")); void * (거리) / 25.4 * / 부동 소수점을 가리키는 변수를 생성하기 위해 인치로 변환 *하려는 경우 센서 판독 값이 밀리미터 단위로 반환됩니다 (Serial.println (WiFi.localIP ()); = pulseIn (pwPin1, HIGH); sendToUbidots (DEVICE_LABEL, VARIABLE_LABEL, distance); 지연 (1000);} void sendToUbidots (const char * device_label, const char * variable_label, float sensor_value) {char * body = (char *) malloc (sizeof (char) * 150); char * data = (char *) malloc (sizeof (char) * 300); / * 보내는 값을 저장할 공간 * / char str_val 10; / * ---- 센서의 값을 char 유형으로 변환합니다. ----- * / / * 4는 최소 너비이고, 2는 정밀도입니다. float 값이 str_val * / dtostrf (sensor_value, 4, 2, str_val)에 복사됩니다. / * 요청에 보낼 본문을 만듭니다. * / sprintf (body, "{"% s ": % s}", variable_label, str_val); / * POST가되도록 HTTP 요청을 만듭니다 * / sprintf (데이터, "POST /api/v1.6/devices/%s", device_label); sprintf (데이터, "% s HTTP / 1.1 r n", 데이터); sprintf (데이터, "% s 호스트 : things.ubidots.com r n", 데이터); sprintf (데이터, "% s 사용자 에이전트 : % s / % s r n", 데이터, USER_AGENT, VERSION); sprintf (데이터, "% sX-Auth-Token : % s r n", 데이터, TOKEN); sprintf (데이터, "% s 연결 : 닫기 r n", 데이터); sprintf (데이터, "% s Content-Type : application / json r n", 데이터); sprintf (data, "% sContent-Length : % d r n r n", data, dataLen (body)); sprintf (데이터, "% s % s r n r n", 데이터, 본문); / * 초기 연결 * / clientUbi.connect (HTTPSERVER, HTTPPORT); / * 클라이언트 연결 확인 * / if (clientUbi.connect (HTTPSERVER, HTTPPORT)) {Serial.println (F ( "Posting your variables :")); Serial.println (data); / * HTTP 요청 보내기 * / clientUbi.print (데이터); } / * 클라이언트가 사용 가능한 동안 서버의 응답을 읽습니다. * / while (clientUbi.available ()) {char c = clientUbi.read (); Serial.write (c); } / * 사용 가능한 메모리 * / free (data); 자유 (몸); / * 클라이언트 중지 * / clientUbi.stop ();}

ProTip : Arduino IDE에서 직렬 모니터를 열어 장치가 올바르게 연결되어 있는지 확인할 수 있습니다.

계정의 장치 관리 -> 장치에서 Ubidot 백엔드에서 장치가 생성되었는지 확인할 수 있습니다.

장치를 클릭하면 센서의 판독 값이 저장되는 "거리"변수를 찾을 수 있습니다. 이 이름은 방금 Arduino IDE에 붙여 넣은 코드에서 지정되었습니다. 자동 변수를 조정하려면 장치 카드를 편집하거나 응용 프로그램의 올바른 변수 명명법으로 업데이트 된 코드를 깜박 여야합니다.

Feather HUZZAH ESP8266을 연결하고 데이터를 Ubidot에보고하면 Ubidot를 사용하여 신중하게 설계된 코드 프리 애플리케이션 구성을 사용하여 애플리케이션을 빌드해야합니다.

5 단계 : Ubidots 애플리케이션 개발

Ubidots 이벤트 설정

우리가 Ubidots에 보내는 현재 수치는 거리 입력입니다. 이 판독 값을 우리가 원하는 단위의 출력으로 변환하려면 다음 단계에 따라 이벤트를 작성해야합니다.

  1. 현재 장치 내부에서 "모션 제어"는 "상자"라는 새 기본 변수를 만들고 새 단위를 계산할 때마다 1을받습니다.
  2. 이동 장치 관리 -> 이벤트, 페이지 오른쪽 상단의 파란색 더하기 아이콘을 클릭하여 새 이벤트를 추가하십시오.
  3. "If triggers"로 시작하는 이벤트 구성 :

  • 변수 선택 : "거리"
  • 값: 값 (기본값)
  • 센서와 상자 사이의 예상 최대 거리보다 작거나 같음 * 응용 프로그램에서 500mm를 요구함
  • 에 대한 0 분
  • 구하다

4. 트리거가 응용 프로그램의 사양에 맞게 구성되면 오른쪽 위 모서리에있는 주황색 "플러스"아이콘을 클릭하여 조건부 조치를 추가하십시오.

5. 조치로 "변수 설정"을 선택하십시오.

6. 그런 다음 이전에 작성한 기본 변수 "상자"를 선택하고 "1"을 선택하십시오.

7. 변경 사항을 저장하십시오. 이벤트가 올바르게 설정되면 센서와 장치 사이의 거리가 지정된 임계 값보다 길어질 때마다 "1"을 전송하므로 개체가 거의 없다는 것을 나타내며 방금 지나간 새 장치를 계산해야합니다 .

깃털 특정 장치 카드에는 장치의 존재가 감지 될 때마다 "1"이 전송되는 변수 "상자"가 있습니다.

산업용 컨베이어 벨트 및 유닛 계수에 특히 유용하며이 프로토 타입은 코딩이나 응용 프로그램 개발에 단순히 다른 환경이나 하드웨어에 맞게 사용자 정의 할 수 있습니다.

8. 감지 된 단위의 수를 시각화하십시오 (또는 물체가 검출 된 시간)
이제 "boxes"변수를 사용하여 정의 된 스팸 (분, 시간, 일, 주 등)에서 변수 "boxes"로부터받은 판독 값의 총계를 합산하는 새 롤링 ​​창 변수를 만들려고합니다. 이 개발을 실행하려면 다음과 같은 간단한 단계를 따르십시오.

새 롤링 창 변수에 다음 자격 증명 할당

장치 선택 : 모션 컨트롤 (또는 데이터를 보내는 장치의 이름)

변수 선택 : 상자들

계산 : 합집합

마다: "1"시간 (또는 귀하의 신청 요청에 따라)

이제 "박스 / 시간"또는 "단위 / 시간"과 같이 시간에 계산 된 상자 또는 움직임의 수를 나타내는 새 변수에 이름을 지정하십시오.

6 단계 : 대시 보드 구성

마지막으로 대시 보드를 만들어 감지 된 단위 수를 표시합니다.

장치 관리 -> 대시 보드로 이동하여 새 위젯을 추가하십시오. 이 위젯은 오늘 계산 된 상자의 양을 시간 단위로 세분화하여 표시합니다.

새 위젯에 다음 자격 증명을 지정하여 개수를 시각화하십시오.

데이터를 어떻게 보시겠습니까? : 차트

위젯 유형 선택 : 꺾은 선형 차트

장치 추가: 동작 제어

변수 추가 : 상자 / 시간

끝. 그리고이 최종 대시 보드 개발을 통해 응용 프로그램이 완성되었습니다. 이제 효율적이고 효과적인 동작 및 존재 감지 시스템을 갖추게되었습니다. 여기에 우리의 결과에 대한 마지막 모습이 있습니다.

7 단계 :