산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

“새를 위한 것입니다!”

구성품 및 소모품

아두이노 101
× 1
인텔 에디슨
× 1
Logitech c270 HD 웹캠
× 1
Pololu Carrier with Sharp GP2Y0D815Z0F 디지털 거리 센서 15cm
× 2
Adafruit Square Force-Sensitive Resistor(FSR) - Interlink 406
× 1
Adafruit Si7021 온도 및 습도 센서 브레이크아웃 보드
× 1
Seeed Grove 시작 키트 플러스, 인텔 IoT 에디션
× 1
커패시터 47μF
× 2
저항 1k 옴
× 1
Adafruit 터미널 블록 - 2핀 3.5mm - 5개 팩 !
× 1
Adafruit 컴팩트 스위칭 전원 공급 장치 - 선택 가능한 출력 3-12VDC
× 1
Adafruit Perma-Proto 1/4 크기 브레드보드 PCB - 단일
× 1
점퍼 와이어(일반)
× 1

필요한 도구 및 기계

3D 프린터(일반)
납땜 인두(일반)

앱 및 온라인 서비스

IoT용 인텔 XDK
오토데스크 퓨전 360
PubNub 게시/구독 API
Cloudinary
noble.js

이 프로젝트 정보

"새를 위한 것입니다!" Arduino 101로 에코 모니터링의 미래 재창조

소개 및 동기:

기후와 우리가 살고 있는 생태계의 건강을 측정하는 한 가지 방법은 동식물 개체군의 크기와 다양성을 측정하는 것입니다. 1987년부터 매년 겨울, Cornell Lab of Ornithology는 Project FeederWatch라는 대규모 시민 과학 활동을 수행합니다.

“Project FeederWatch는 북미의 뒤뜰, 자연 센터, 커뮤니티 지역 및 기타 지역에 있는 모이통을 방문하는 새에 대한 겨울 기간의 조사입니다...FeederWatch 데이터는 겨울마다 대륙 전역의 수천 곳에서 모이통을 방문하는 새 종을 보여줍니다. . 데이터는 또한 각 종의 개체 수를 나타냅니다. 이 정보는 겨울 범위의 변화와 시간 경과에 따른 조류 종의 풍부함을 측정하는 데 사용할 수 있습니다. "

올해로 참여하는 첫 해이며 제작 및 해킹에 대한 관심과 자연에 대한 관심 및 Project FeederWatch 참여를 결합하고 싶었습니다. 그래서 우리는 Arduino 101로 조류 관찰 및 환경 모니터링의 미래를 재창조하기로 결정했습니다!

Arduino 101은 Arduino IDE의 단순성을 결합하여 Bluetooth LE와 같은 온보드 기능과 풍부한 센서 및 브레이크아웃 보드를 쉽게 사용할 수 있는 임베디드 프로그래밍을 쉽게 해주기 때문에 이 프로젝트에 이상적입니다. 집에서 만든 새 모이통에 Arduino 101을 내장하여 날씨 매개변수를 측정하고 모이통에서 새의 활동을 모니터링하는 실험 플랫폼을 개발했습니다. Cloudinary 및 PubNub의 흥미로운 IoT 기술을 추가하여 환경 및 생태계 상태 모니터링의 미래를 재창조하는 데 도움이 되었습니다!

프로젝트 개요:

우리 프로젝트의 핵심은 집에서 만든 새 모이통에 내장된 Arduino 101입니다. 우리는 2개의 샤프 적외선 거리 센서를 사용하여 피더의 양쪽을 통과하는 나무 못에 앉은 새를 감지합니다. 힘 감지 저항기(FSR)는 피더에 존재하는 종자의 양을 감지하는 데 사용됩니다. Adafruit Si7021 온도 및 습도 센서 브레이크아웃 보드는 i2c 핀에 부착되어 물리적 날씨 데이터를 제공하는 데 사용됩니다. Arduino 101은 BLE 주변 장치로 작동하고 BLE를 통해 이러한 센서에서 BLE 중앙으로 데이터를 보내도록 설정됩니다. 장치. 전원은 4개의 AA 배터리로 제공됩니다. 이러한 모든 구성 요소는 맞춤형 3D 인쇄 인클로저에 들어 있습니다.

Arduino Breakout Board의 Intel Edison을 BLE 중앙 및 인터넷 게이트웨이로 사용합니다. 로지텍 c270 USB 웹캠은 보드의 USB 포트에 연결되어 있으며, 퍼치 중 하나에서 활동을 나타내는 BLE 알림이 수신될 때 사진을 찍는 데 사용됩니다. 이 이미지는 브레이크아웃 보드의 SD 카드 슬롯에 삽입된 SD 카드에 로컬로 저장됩니다.

Intel Edison의 WiFi 기능을 활용하여 인터넷 게이트웨이로 사용합니다. 이를 통해 실시간 데이터 스트리밍을 위한 PubNub 및 클라우드에서 이미지 저장 및 조작을 위한 Cloudinary와 같은 슈퍼 기술을 사용할 수 있습니다.

새 모이통은 빈 소다병과 나무 은못으로 만들어 우리 마당의 기둥에 걸었습니다.

프로젝트 구축:

Arduino 101 내장 조류 피더

이 프로젝트의 기초는 새 모이통에 내장된 Arduino 101입니다. 새 모이통은 야외에 있어야 하며 야외에서의 물리적 혹독함을 견딜 수 있어야 합니다. 데이터를 실시간으로 무선으로 전송할 수 있는 방법이 필요합니다. 송신하는 Arduino 101과 수신하는 Edison 사이의 거리는 불과 몇 피트에 불과하고 Arduino 101에는 이미 BLE가 탑재되어 있으므로 BLE를 사용할 것입니다!

대부분의 회로는 fritzing 다이어그램을 따라 구성할 수 있지만 이 회로를 만들고 테스트하는 동안 몇 가지 문제가 발생했습니다. 우리가 여기서 집중할 것은 다음과 같습니다.

<울>
  • 첫 번째 도전:야외에서 먹이통 위의 ​​새 감지하기! 이 프로젝트를 위해 우리는 야외에서 작동할 수 있는 센서가 필요하며 요소에 대해 밀봉되어 있습니다. 우리는 그것이 주제를 방해하거나 겁주는 것을 원하지 않습니다. 농어에 있는 것만 감지해야 합니다. 다양한 센서의 특성을 평가한 후 Sharp GP2Y0D815Z0F 디지털 거리 센서와 함께 Pololu Carrier를 사용하기로 결정했습니다. 이 센서는 일반 PIR 센서와 달리 감지 범위가 매우 짧습니다. 우리는 새가 센서에서 몇 센티미터 떨어져 있는지 알고 싶을 뿐입니다. PIR 센서는 탐지 범위가 매우 길고 광범위합니다. 이것은 집 진입로에서 모든 종류의 움직임을 감지하는 데 유용하지만, 새 모이가 바람에 흔들릴 때마다 나뭇가지나 기타 "소음"을 감지하는 것은 원하지 않습니다. 또한 빠른 벤치 탑 평가에서 Sharp IR 센서를 플라스틱 음료수 병 안에 넣을 때 작동하는 것으로 나타났습니다. 이것은 요소로부터 전자 장치를 보호하고 인클로저의 이 부분을 "투시"할 수 있어야 하기 때문에 중요합니다.
  • <울>
  • 두 번째 도전:센서 중 하나를 연결하고 테스트한 후, 우리는 갈 준비가 되었습니다! 그래서 우리는 Arduino 101에 두 번째 Sharp IR 센서를 연결하고 . . .그들은 작동하지 않았습니다! 코드를 확인한 후 여러 번. 몇 개의 보드와 다른 센서를 확인한 후에는 이 두 센서가 함께 작동하도록 만들 수 없습니다. 그래서 우리는 첫 번째 주요 도전에 직면했습니다. 다른 유형의 센서를 사용해 볼까요? 농어 한 마리만들어야지(절름발이!), 어떡하지? 필사적으로 우리는 처음에 해야 할 일을 하고 웹사이트를 확인하고 제품 FAQ에서 다음을 찾았습니다. 이 센서가 예상대로 작동하지 않습니다. 간헐적으로 많이 감지됩니다. 센서의 최대 범위보다 멀고 광고된 감지 범위 내에서 물체를 감지하지 못합니다. 무슨 일이야? 이와 같은 문제는 특히 이 센서가 짧고 큰 버스트에서 전력을 끌어오기 때문에 전원 공급 장치 문제의 결과일 수 있으므로 전원 공급 장치가 필요한 전류를 공급할 수 있는지 확인하십시오. 이 문제가 발생하면 센서의 전원과 센서 근처의 접지에 10μF 정도의 커패시터를 추가해 보십시오. 이는 부적절한 전원 공급을 보상하고 일반적으로 정상적인 기능을 복원합니다. 문제 해결됨! 우리는 각 센서에 47uF 전해 커패시터를 추가했으며 작동했지만 한 가지만 더 주의하면 둘 다 보드의 +5V 핀에서 직접 공급되어야 합니다. 이것을 fritzing 다이어그램에서 점퍼로 볼 수 있습니다. 한 센서의 +5V 라인이 다른 센서의 +5V 전원에 연결됩니다. 우리는 EE가 아니므로 설명할 수 없습니다. 실내와 실외 모두에서 작동하는 것으로 나타났습니다!
  • <울>
  • 세 번째 과제:Project FeederWatch 웹사이트의 관련 활동 및 학습 섹션에서 권장되는 활동 중 하나는 각 계수 전후에 모이통에 있는 새 종자의 무게를 측정하고 얼마나 많은 종자를 먹었는지 계산하는 것입니다. 여러 번 계산한 후 평균 소비율을 계산합니다. 수동 가중치를 수행하는 대신 자동화된 방식으로 종자 소비를 캡처하지 않는 이유는 무엇입니까? 우리의 해결책은 힘에 민감한 저항기(FSR)를 사용하는 것이었습니다. 이것은 가해지는 힘에 따라 저항이 변하는 저항기입니다. 아날로그 입력 핀에 연결할 수 있습니다. 그러나 종자 양의 변화를 감지할 만큼 민감할까요? 작은 플라스틱 용기의 종자 수준을 측정하려는 첫 번째 시도는 그다지 성공적이지 못했습니다. 센서는 다양한 손가락 압력에 잘 반응했지만 종자 수준에는 반응하지 않았습니다. 그래서 우리는 문제를 해결하기 위해 두 가지를 변경했습니다. 첫째, 아날로그 신호는 2개의 저항 전압 분배기를 통해 Arduino 101 아날로그 핀으로 전달되며, 하나는 FSR이고 다른 하나는 기존 저항입니다. 우리는 이 두 번째 저항의 값을 낮추었고 센서는 터치에 더 민감한 것처럼 보였지만 여전히 우리가 원하는 만큼 시드 변화에 반응하지 않았습니다. 그래서 이 모든 것에 하드웨어 변경을 추가했습니다. 파스칼의 원리와 다소 유사하게, FSR의 전체 표면에 씨앗의 무게를 적용하는 대신 중심에 작은 접촉점이 있는 플랫폼을 만들면 씨앗에서 힘이 크게 증가합니다. FSR. 스노우슈와 정반대로 작동했습니다!
  • 또 다른 사소한 문제는 FSR을 Arduino 101에 안전하고 신뢰할 수 있는 방식으로 연결하는 것입니다. 이것은 2핀 3.5mm 단자대를 사용하면 쉽게 해결됩니다. 터미널 블록의 간격이 보드의 간격과 일치하는지 확인하십시오.

    나머지 Arduino 101 하드웨어는 간단합니다. Adafruit Si702 브레이크아웃 보드를 I2C 버스 핀()에 연결하고 빈 +3.3V를 전원으로 사용했습니다. 전체 패키지의 전원은 메인 인클로저 아래에 있는 4XAA 전환 가능 배터리 팩을 통해 제공됩니다.

    IR 및 FSR 센서를 Adafruit Perma-Proto 1/4 크기 Breadboard PCB에 납땜하고 양면 테이프로 Arduino 101의 아래쪽에 부착했습니다. 전체 패키지는 소다병 새 모이통 안에 넣어지고 영하의 영하의 영하의 온도, 안개와 가벼운 비와 눈(가짜 눈보라 'Stella'!)을 견뎌냈습니다.

    Arduino 101 스케치:

    스케치의 주요 작업은 연결된 센서를 모니터링하고 BLE를 통해 센서 값을 보고하는 것입니다. BLE의 모든 데이터는 바이트 패키지로 전송됩니다. 원본 데이터가 char 배열의 int float인지 여부에 관계없이 BLE를 통해 전송하려면 바이트 표현으로 분해해야 합니다. 내가 아는 가장 쉬운 방법은 데이터 유형의 합집합을 만드는 것입니다. Union을 사용하면 두 개의 서로 다른 데이터 유형 간에 동일한 메모리 위치를 공유할 수 있습니다. 우리의 경우 SI7021 온도 및 습도 센서는 데이터를 부동 소수점 숫자로 제공합니다. Arduino C 언어는 부동 소수점을 4바이트로 나타내므로 온도 부동 소수점과 습도 부동 소수점 사이에 4바이트 배열을 만듭니다.

    /** * Union 지시문을 사용하면 이러한 변수가 동일한 메모리 위치를 공유할 수 있습니다. * 내 튜토리얼 Imu to You!(https://www.hackster.io/gov/imu-to-you-ae53e1?team=18045) 튜토리얼을 참조하십시오. */ 합집합 { float t; 서명되지 않은 문자 바이트[4]; } 임시 데이터; 유니온 { float h; 서명되지 않은 문자 바이트[4]; } 습도 데이터; 합집합 { 정수 f; 서명되지 않은 문자 바이트[2]; } 피드 데이터;  

    유니온에 부동 소수점 값을 저장하면 바이트 배열도 채워집니다. 데이터를 전송하기 위해 이러한 특성의 setValue() 함수에 바이트 배열을 전달합니다.

    임베디드 응용 프로그램의 경우 delay() 함수를 사용하면 문제가 발생할 수 있습니다. 첫째, 지연 함수가 호출되는 동안 지연 기간 동안 모든 프로세서 활동이 중지됩니다. 이것은 새들이 언제든지 횃대에 올 수 있을 때 이상적이지 않습니다. 두 번째 문제는 delay() 함수가 BLE 알림 메커니즘에 문제를 일으킬 수 있다는 것입니다. 이것을 피하는 방법은 스케치에서 delay()를 사용하지 않는 것입니다. 그러나 코드 프로그램의 지연이 필요한 경우가 많습니다. 이를 극복하기 위해 Adafruit의 Bill Earl이 작성한 이 3개의 슈퍼 튜토리얼 세트에서 방법 개요를 사용할 것입니다.

    개요에서 우리는 임베디드 장치를 나타내는 객체를 생성합니다. 이 장치에 연결된 센서를 폴링할 간격 또는 간격 집합을 결정합니다. 그런 다음 Update() 함수를 만듭니다.

    void Update() { // Serial.print("피드 센서:");Serial.println(analogRead(A0)); // 퍼치 활동 업데이트/알림은 시간 및 근접 센서에 따라 다릅니다. currentPerchMillis =millis(); if ((currentPerchMillis - previousPerchMillis)> perchInterval ) { 이전PerchMillis =currentPerchMillis; currentLeftPerch =디지털 읽기(LEFT_PERCH); currentRightPerch =디지털 읽기(RIGHT_PERCH); if ((currentLeftPerch ==0) &&(previousLeftPerch ==1)) { // leftperch의 새 활동 // BLE에 perchCharacteristic.setValue(1); Serial.println("왼쪽 퍼치 활동"); 이전 왼쪽 퍼치 =0; } ...}  

    이 기능은 센서의 시간 간격이 지났는지 확인하는 역할을 합니다. 그렇다면 센서를 무시하지 않고 업데이트합니다. Update() 함수는 스케치의 loop() 섹션에서 반복적으로 호출됩니다.

    void loop() { // 여기에 기본 코드를 넣어 반복적으로 실행합니다. blePeripheral.poll(); 버드피더.업데이트(); }  

    따라서 센서로 실시간 멀티태스킹 효과를 에뮬레이트합니다.

    Intel Edison 및 Arduino 브레이크아웃 보드:

    Intel Edison으로 작업할 때 가장 어려운 부분은 설정하는 것입니다. 이에 대해 내가 찾은 최고의 튜토리얼은 Vincent Wong의 Intel Edison 및 Intel XDK IoT Edition 101입니다. 이 프로세스를 진행하고 일부 JavaScript 예제를 시도하는 것이 그만한 가치가 있음을 장담할 수 있습니다!

    Intel XDK IoT 에디션을 사용하여 Edison으로 작업하면 명령줄에서 상호 작용하고 구성할 수 있습니다. 또한 많은 JavaScript/Node 예제 프로그램 및 템플릿을 활용할 수 있습니다. JavaScript/Node를 배우고 사용하여 프로그래밍하면 PubNub, Noble.js 및 Cloudinary와 같은 사용하기 쉽고 강력한 API가 많이 열립니다.

    Edison을 설정하고 WiFi 네트워크에 대한 활성 연결을 확인했으면 이 프로젝트에 필요한 라이브러리를 설치할 수 있습니다.

    npm 설치 노블

    npm 설치 pubnub

    npm 설치 클라우드

    USB 웹캠

    "intel edison webcam"을 Google에서 검색하면 몇 가지 훌륭한 예제와 자습서를 얻을 수 있습니다. 그러나 일부 혼란스러운 자료가 있는데, 이는 주로 Yocto OS에서 사용할 수 있는 모듈의 일부 변경 때문이라고 생각합니다. Yocto는 Intel edison을 실행하는 임베디드 버전의 Linux입니다. Logitech c270은 uvcvideo 호환 웹캠입니다. Edison에 uvcvideo 드라이버/모듈이 설치되어 있는지 확인하는 방법에 대한 많은 자습서가 있습니다. 이것이 없으면 카메라와 상호 작용하고 사진을 찍을 수 없습니다.

    Intel Edison의 웹 카메라에서 다음 단계를 사용하여 s3에 업로드하여 내 Edison에서 웹캠이 작동하도록 했습니다. 혹시라도 부실해질 경우를 대비하여 아래에 이 블로그 게시물의 지침을 게시했습니다.

    Edison을 사용하면 XDK 직렬 터미널 탭의 명령줄에서 다음 지침이 실행됩니다.

    "opkg를 사용하여 설치할 수 있는 몇 가지 추가 패키지를 사용할 것입니다. 패키지 관리자. vi가 있는 저장소의 편집 목록 시작:

    vi /etc/opkg/base-feeds.conf

    파일에 다음 행이 모두 있는지 확인하십시오.

    src/gz all http://repo.opkg.net/edison/repo/all src/gz edison http://repo.opkg.net/edison/repo/edison src/gz core2–32 http://repo. opkg.net/edison/repo/core2-32 src 인텔-iotdk http://iotdk.intel.com/repos/3.0/intelgalactic/opkg/i586

    이제 패키지 캐시 업데이트:

    opkg 업데이트

    그리고 USB uvc 카메라를 지원하는 커널 모듈을 설치합니다.

    opkg install kernel-module-uvcvideo

    이제 웹캠을 USB 포트에 연결하고 이 명령을 실행하십시오.

    ls -l /dev/video*

    카메라가 성공적으로 감지되면 출력은 다음과 같습니다.

    crw-rw---- 1 루트 비디오 81, 0 7월 25일 09:35 /dev/video0

    웹캠으로 작업하고 일정에 따라 사진을 찍으려면 2개의 추가 패키지를 설치해야 합니다.

    opkg 설치 fswebcam 크로니

    *** 이 프로젝트에 cronie를 설치하지 않았으며 opkg 설치 fswebcam만 수행했습니다. 시간이 지정된 일정이 아니라 횃대에 있는 새가 IR 센서를 밟을 때마다 fswebcam을 호출하므로 cronie가 필요하지 않습니다. ***

    카메라 작업

    카메라를 테스트하려면 다음 명령을 실행하세요.

    fswebcam -r 1280x720 --jpeg 100 -D 3 -S 13 "test.jpg"

    <울>
  • -r 1280x720 이미지의 해상도를 설정하려면 카메라에 사용할 수 있는 최대 해상도를 사용하는 것이 좋습니다. (선택 사항)
  • <울>
  • — jpeg 100 JPEG 품질을 최대로 설정하십시오. 나중에 이 이미지로 작업할 때 유용합니다. (선택 사항)
  • <울>
  • -D 3 -S 13 3초의 지연을 추가하고 처음 13개 프레임을 건너뜁니다. 일부 웹캠은 최고의 사진을 얻기 위해 시간이 필요하기 때문에 필요합니다. (권장)
  • <울>
  • test.jpg 출력 파일의 이름 "
  • Edison에서 웹캠을 사용하는 것과 다른 정말 멋진 프로젝트에 대한 추가 정보는 Dr. Kim의 github 페이지에서 찾을 수 있습니다. 그녀는 또한 Hackster.io에도 멋진 프로젝트를 게시합니다!

    적절한 모듈이 있는지 확인하는 것 외에도 microusb 케이블과 USB 포트 사이의 스위치를 USB 포트 방향으로 뒤집고 Arduino 실드를 전원 공급 장치에 부착해야 했습니다. 컴팩트 스위칭 전원 공급 장치 - 선택 가능한 출력 3-12VDC(Adafruit 제품 ID:1448)를 사용했습니다.

    이제 SD 카드를 SD 카드 슬롯에 넣습니다. 직렬 터미널 사용 Intel XDK에서 명령줄을 사용하여 다음 명령을 입력하여 카드를 확인합니다.

    cd /media/sdcard

    이것은 카드에 있는 모든 파일을 표시하거나 파일이 없는 경우 아무 것도 표시하지 않습니다. 오류 메시지가 표시되지 않아야 합니다. 오류 메시지가 표시되면 다음 명령을 입력하여 SD 카드를 제거하지 않고 Edison 보드를 재부팅하는 것이 좋습니다.

    재부팅

    그런 다음 Edison에 다시 로그인한 후 위의 명령을 반복합니다.

    이제 Edison이 Bluetooth에 액세스하도록 허용하려면 다음 명령을 입력하십시오.

    rfkill 블루투스 차단 해제

    블루투스가 켜져 있고 작동하는지 확인하려면 다음을 입력하십시오.

    블루투스 ctl

    그런 다음 입력하십시오.

    스캔

    다음과 같이 BLE 장치에 표시되어야 합니다.

    이제 bluetoothctl을 종료하고 Intel XDK IoT 탭을 클릭한 다음 보드에 연결하십시오. BLESCAN과 같은 왼쪽 메뉴에서 프로젝트를 선택합니다. index.js의 내용을 제거하고 package.json 파일에서 종속성을 제거합니다.

    여기에서 index.js의 내용을 github 저장소의 프로그램으로 바꿉니다. 이 코드를 Edison에 업로드하십시오. Arduino 101이 켜져 있는지 확인하고 Edison 코드를 실행합니다. Edison이 Arduino 101을 감지하면 다음과 같이 표시되어야 합니다.

    코드:

    Edison에서 실행되는 코드는 JavaScript 또는 더 적절하게 Node.js로 작성됩니다. 가져온 라이브러리에서 필요한 개체를 만든 후 Arduino 101에서 실행 중인 BLE 서비스를 나타내는 변수를 만듭니다.

    noble.js

     // BLE 서비스 및 귀족을 위한 특성 // 이는 주변기기의 서비스 및 특성 UUID에 해당해야 합니다. // (이 경우 Arduino 101에서) var LOCAL_NAME ='bird'; var SERVICE_UUID ='917649a0d98e11e59eec0002a5d5c51b'; //대시 없음!!!! var PERCH_UUID ='917649a1d98e11e59eec0002a5d5c51b'; var TEMPERATURE_UUID ='917649a2d98e11e59eec0002a5d5c51b'; var HUMIDITY_UUID ='917649a3d98e11e59eec0002a5d5c51b'; var FEED_UUID ='917649a4d98e11e59eec0002a5d5c51b';  

    이러한 UUID는 noble.js에서 사용됩니다. Arduino에서 UUID를 변경하는 경우 여기에서도 변경해야 합니다. noble.js가 제대로 작동하려면 대시가 없는지 확인하는 것이 중요합니다.

    noble.js로 작업하려면 주변 BLE 장치를 검색한 다음 검색한 다음 연결해야 합니다. 연결되면 위에서 정의한 UUID를 사용하여 사용 가능한 특성을 실행합니다. 특성은 모두 읽기/알림 특성입니다.

    noble.on('discover', function(peripheral){ console.log('발견된 BLE 장치:[' + peripheral.id + '] ' + peripheral.advertisement.localName); if(peripheral. 광고.localName ==LOCAL_NAME){ console.log('찾음:' + peripheral.advertisement.localName); } peripheral.connect(function(error) { console.log('주변기기에 연결됨:' + peripheral.uuid); noble.stopScanning(); // "스트레이" 서비스를 선택하지 못하도록 합니다. peripheral.discoverServices([SERVICE_UUID], function(error, services) { console.log('services:' + services.length); var feederService =services [0]; console.log('새 지류 서비스!'); feederService.discoverCharacteristics([], function(error, properties) { properties.forEach(function(characteristic) { console.log('characteristic UUID:' + 특성 .uuid);characteristic.on('data', function(data, isNotification) { transformRawData(characteristic.uuid,data); });characteristic.notify('true', function(error) { if (error) throw e 오류; }); }); }); }); }); });  

    위의 코드 섹션에서 지적해야 할 2가지 핵심 요소가 있습니다. 먼저, noble.js에 읽기/알림 특성을 알리는 방식이 변경되었습니다. Sandeep Mistry의 github 페이지에서:

    데이터

    특성 읽기가 완료되면 발생합니다. characteristic.read(...) 의 결과 또는 특성 값이 알림 또는 표시를 통해 주변 장치에 의해 업데이트되었습니다 - notify(true[, callback(error)])로 활성화된 후 .

    특성.on('데이터', 콜백(데이터, isNotification));

    특성.once('읽기', 콜백(데이터, isNotification)); // 레거시

    '읽기'에서 '데이터'로 변경됩니다. 우리는 이전 버전의 노블을 실수로 사용한 다음 최신 버전을 변경하는 몇 가지 문제에 부딪쳤습니다. 무슨 일이 일어났는지 파악하는 데 많은 시간이 걸렸으므로 이 문제를 방지하는 데 잠재적으로 도움이 되고자 합니다.

    여기서 또 다른 핵심은 transformRawData(characteristic.uuid,data) 함수입니다. 이 함수는 읽기에서 전달된 uuid와 데이터를 가져와서 크고 다루기 힘든 함수로 전달합니다. 특성 변경으로 인해 BLE 알림 메커니즘이 활성화될 때마다 이 함수가 호출되고 수신된 데이터를 처리합니다. 여기에서 모든 흥분이 발생합니다.

    tranformRawData는 어떤 특성이 수신되었는지 확인합니다.

    Arduino가 농어에 활동이 있다고 알려주면 사진을 찍고 싶습니다. 이 경우, 우리는 Yocto(linux) 시스템에 있는 fswebcam 프로그램을 호출하기 위해 child_process 라이브러리를 사용합니다. child_process 라이브러리를 사용하면 node.js 코드 내에서 명령줄 기능을 실행할 수 있습니다. 이것은 매우 강력한 기능입니다.

    childProcess.execFile('fswebcam',['-r 1280x720',fileName],function(error,stdout,stderr) { console.log(stdout); );  

    PubNub 및 Cloudinary:

    이 기능은 PubNub 및 Cloudinary가 작동하는 곳이기도 합니다! PubNub은 애플리케이션에 실시간 데이터 스트리밍 네트워크를 제공합니다. 이것이 의미하는 바는 인터넷 연결을 통해 애플리케이션이 전 세계 어디에서나 데이터를 실시간 스트리밍할 수 있다는 것입니다. 게시된 스트림에 대한 구독 키가 있는 다른 모든 앱 또는 프로그램은 데이터를 나타내는 JSON 페이로드에 액세스할 수 있습니다. 우리의 경우 현재 종자 수준, 온도, 습도 및 농어 방문 횟수를 보냅니다. 또한 피더의 최신 사진 3장에 대한 링크를 보내드립니다! 이것은 우리 프로그램과 함께 Cloudinary에 업로드된 jpeg입니다. 서버를 실행할 필요가 없습니다! JavaScript가 포함된 간단한 HTML 파일은 PubNub에서 제공하는 새 모이통에 대한 실시간 인터페이스 역할을 합니다.

    위의 그림에서 나는 단순히 PubNub을 통해 새 모이통과 인터페이스하기 위한 코드가 포함된 HTML 파일을 나 자신에게 이메일로 보내고 로컬 디렉토리에서 Chrome 브라우저로 각 파일을 로드했습니다. Edison에서 이 페이지를 제공하기 위해 서버를 코딩할 필요가 없습니다.

    Cloudinary는 이미지 업로드, 저장 및 변환 서비스입니다. 그것은 사용하기 매우 간단한 API를 가지고 있습니다. 이 프로젝트를 개발하면서 사용하기에 더 쉽고 간단한 API를 찾을 수 없었습니다. 거기에는 비교할 수 있는 것이 없습니다. 그들의 헬프 데스크도 환상적입니다. 그것은 확실히 당신이 당신의 프로젝트에 대해 확인하고 싶은 것입니다!

    아래 코드에서 Cloudinary API를 사용하여 로컬 SD 카드에서 3개의 최신 이미지를 업로드합니다. 이 업로드에서 반환된 URL은 배열에 저장됩니다. 그런 다음 이러한 URL은 JSON 페이로드의 일부로 PubNub에 전송되어 표시할 HTML 페이지에서 액세스할 수 있습니다. 미인, 응?!

    index.html

    이 index.html 파일은 무엇에 관한 것입니까? index.html 파일은 우리의 UI입니다. PubNub를 사용하여 데이터를 스트리밍하고 Cloudinary를 사용하여 공개적으로 액세스할 수 있는 URL에 이미지를 배치하기 때문에 Javascript/HTML/CSS 파워 트리오를 활용하여 이식 가능한 UI를 만들 수 있습니다. PubNub과 Cloudinary는 모두 사용하기 쉽고 강력합니다. 자바스크립트 API. 사용하기 위해 html 파일로 가져오기만 하면 됩니다.

    <사전><코드> <스크립트 src="https://cdn.pubnub.com/sdk/javascript/pubnub.4.5.0.js"> <스크립트 유형="텍스트/자바스크립트" src=" https://pubnub.github.io/eon/v/eon/1.0.0/eon.js">

    PubNub 개체를 생성할 때 데이터 스트림에 대한 구독 키를 제공하고 이 스트림을 게시할 때마다 실시간으로 데이터 스트림에 액세스할 수 있습니다.

     
    
    

    제조공정

    1. Raspberry Pi용 DHT Tiny Breakout
    2. 라즈베리 파이의 HC-SR04 초음파 범위 센서
    3. Raspberry Pi를 위한 최고의 액세서리
    4. 시력:시각 장애인용
    5. 인텔, 엣지에서 AI 학위를 수여하기 위해 Udacity에 참여
    6. 충진 응용 분야에 적합한 센서를 선택하는 방법
    7. 항공우주용 센서 필름
    8. ISS용 WiFi RSSI 센서 추적기
    9. 작업에 가장 적합한 센서를 선택할 수 있는 새로운 수학적 도구
    10. 인더스트리 4.0을 위한 5S 방식의 도전