- nRF24L01 RF 모듈 알아보기
- nRF24L01과 Arduino의 인터페이스
- 수신기 측 : Arduino Uno nRF24L01 모듈 연결
- 송신기 측 : Arduino Nano nRF24L01 모듈 연결
- nRF24L01 + 무선 트랜시버 모듈 사용
- Arduino 용 nRF24L01 프로그래밍
- nRF24L01을 사용하여 무선으로 서보 모터 제어
사물 인터넷 (IoT), 인더스트리 4.0, 머신 투 머신 통신 등이 점점 더 대중화되면서 클라우드에서 서로 대화 할 더 많은 머신 / 장치와 함께 무선 통신의 필요성이 대두되고 있습니다. 설계자는 Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi 모듈, 433MHz RF 모듈, Lora, nRF 등과 같은 많은 무선 통신 시스템을 사용하며 매체 선택은 사용중인 애플리케이션 유형에 따라 다릅니다.
무엇보다도 로컬 네트워크 통신을위한 널리 사용되는 무선 매체는 nRF24L01 입니다. 이 모듈은 2.4GHz (ISM 대역)에서 250Kbps ~ 2Mbps의 전송 속도로 작동하며 이는 많은 국가에서 합법적이며 산업 및 의료 애플리케이션에서 사용할 수 있습니다. 또한 적절한 안테나를 사용하면 이러한 모듈이 그들 사이에서 최대 100m 거리까지 송수신 할 수 있다고 주장합니다. 흥미 롭죠 !!? 따라서이 튜토리얼에서는 이러한 nRF24l01 모듈 에 대해 자세히 알아보고 Arduino와 같은 마이크로 컨트롤러 플랫폼과 인터페이스하는 방법을 배웁니다. 또한이 모듈을 사용하는 동안 일반적으로 직면하는 문제에 대한 몇 가지 솔루션을 공유 할 것입니다.
nRF24L01 RF 모듈 알아보기
해 nRF24L01 모듈 이다 트랜시버 모듈 각 모듈을 의미 할 수있는 전송 및 데이터 모두를 수신하지만이 때문에 그들 중 전송하거나 시간에 데이터를 수신 할 수있다 반이중. 이 모듈에는 데이터 전송 및 수신을 담당하는 Nordic 반도체의 일반 nRF24L01 IC가 있습니다. IC는 SPI 프로토콜을 사용하여 통신하므로 모든 마이크로 컨트롤러와 쉽게 인터페이스 할 수 있습니다. 라이브러리를 쉽게 사용할 수 있기 때문에 Arduino를 사용하면 훨씬 쉬워집니다. 표준 nRF24L01 모듈 의 핀아웃 은 다음과 같습니다.
이 모듈은 1.9V ~ 3.6V (일반적으로 3.3V)의 작동 전압을 가지며 정상 작동 중에 12mA 의 매우 적은 전류를 소비 하므로 배터리 효율이 높아져 코인 셀에서도 작동 할 수 있습니다. 작동 전압이 3.3V이지만 대부분의 핀은 5V를 허용하므로 Arduino와 같은 5V 마이크로 컨트롤러와 직접 인터페이스 할 수 있습니다. 이러한 모듈 사용의 또 다른 장점은 각 모듈에 6 개의 파이프 라인이 있다는 것입니다. 즉, 각 모듈은 6 개의 다른 모듈과 통신하여 데이터를 송수신 할 수 있습니다. 따라서이 모듈은 IoT 애플리케이션에서 스타 또는 메시 네트워크를 생성하는 데 적합합니다. 또한 125 개의 고유 ID의 넓은 주소 범위를 가지고 있으므로 폐쇄 된 영역에서 서로 간섭하지 않고 125 개의 모듈을 사용할 수 있습니다.
nRF24L01과 Arduino의 인터페이스
이 튜토리얼에서는 다른 Arduino의 전위차계를 변경하여 하나의 Arduino에 연결된 서보 모터를 제어하여 nRF24L01을 Arduino와 인터페이스하는 방법을 배웁니다. 단순화를 위해 하나의 nRF24L01 모듈을 송신기로 사용하고 다른 하나는 수신기로 사용했지만 각 모듈은 개별적으로 데이터를 송수신하도록 프로그래밍 할 수 있습니다.
nRF24L01 모듈과 Arduino를 연결하는 회로도는 아래와 같습니다. 품종의 경우 수신기 측에 UNO 를 사용 하고 송신기 측에 Nano 를 사용했습니다. 그러나 연결 로직은 미니, 메가와 같은 다른 Arduino 보드에서도 동일하게 유지됩니다.
수신기 측: Arduino Uno nRF24L01 모듈 연결
앞서 말했듯이 nRF24L01은 SPI 프로토콜의 도움으로 통신합니다. Arduino Nano 및 UNO에서 핀 11, 12 및 13은 SPI 통신에 사용됩니다. 따라서 nRF의 MOSI, MISO 및 SCK 핀을 각각 핀 11, 12 및 13에 연결합니다. 핀 CE 및 CS는 사용자가 구성 할 수 있습니다. 여기서는 핀 7과 8을 사용했지만 프로그램을 변경하여 모든 핀을 사용할 수 있습니다. nRF 모듈은 Arduino의 3.3V 핀에 의해 전원이 공급되며 대부분의 경우 작동합니다. 그렇지 않은 경우 별도의 전원 공급 장치를 시도 할 수 있습니다. nRF를 인터페이스하는 것 외에도 서보 모터를 핀 7에 연결하고 Arduino의 5V 핀을 통해 전원을 공급했습니다. 마찬가지로 송신기 회로는 아래와 같습니다.
송신기 측: Arduino Nano nRF24L01 모듈 연결
송신기의 연결도 동일하며 추가로 Arduino의 5V ad Ground 핀에 연결된 전위차계를 사용했습니다. 0-5V에서 변하는 출력 아날로그 전압은 Nano의 A7 핀에 연결됩니다. 두 보드 모두 USB 포트를 통해 전원이 공급됩니다.
nRF24L01 + 무선 트랜시버 모듈 사용
그러나 nRF24L01이 잡음없이 작동하도록하기 위해 다음 사항을 고려할 수 있습니다. 저는이 nRF24L01 +를 오랫동안 작업 해 왔으며 벽에 부딪히는 것을 방지 할 수 있는 다음 사항 을 배웠습니다. 모듈이 정상적인 방식으로 작동하지 않을 때이를 시도 할 수 있습니다.
1. 시중에 나와있는 대부분의 nRF24L01 + 모듈은 가짜입니다. 우리가 Ebay와 Amazon에서 찾을 수있는 값싼 것들은 최악입니다 (걱정하지 마십시오. 약간의 조정만으로 작동시킬 수 있습니다)
2. 주요 문제는 코드가 아니라 전원 공급 장치입니다. 대부분의 온라인 코드는 제대로 작동합니다. 직접 테스트 한 작업 코드가 있습니다. 필요한 경우 알려주세요.
3. NRF24L01 +로 인쇄 된 모듈은 실제로 Si24Ri (예 중국 제품)이므로주의하십시오.
4. 복제 및 가짜 모듈은 더 많은 전력을 소비하므로 Si24Ri는 약 250mA의 높은 전류 소비를 가지므로 nRF24L01 + 데이터 시트를 기반으로 전력 회로를 개발하지 마십시오.
5. 전압 리플 및 전류 서지에주의하십시오. 이러한 모듈은 매우 민감하며 쉽게 타 버릴 수 있습니다. (;-(지금까지 2 개의 모듈을 튀겼습니다)
6. 모듈의 Vcc 및 Gnd에 커플 커패시터 (10uF 및 0.1uF)를 추가하면 전원을 순수하게 만드는 데 도움이되며 이는 대부분의 모듈에서 작동합니다.
그래도 문제가있는 경우 댓글 섹션에보고하거나이 글을 읽거나 포럼에서 질문하십시오.
nRF24L01을 사용하여 대화방을 만드는 이전 프로젝트도 확인하십시오.
Arduino 용 nRF24L01 프로그래밍
GitHub의 maniacbug가 쉽게 사용할 수있는 라이브러리로 인해 이러한 모듈을 Arduino와 함께 사용하는 것은 매우 쉽습니다. 링크를 클릭하여 라이브러리를 ZIP 폴더로 다운로드하고 스케치-> 라이브러리 포함->.ZIP 라이브러리 추가 옵션 을 사용하여 Arduino IDE에 추가 합니다. 라이브러리를 추가 한 후 프로젝트 프로그래밍을 시작할 수 있습니다. 우리는 두 개의 프로그램을 작성해야합니다. 하나는 송신기 쪽이고 다른 하나는 수신기 쪽입니다. 그러나 앞서 말했듯이 각 모듈은 송신기와 수신기로 모두 작동 할 수 있습니다. 두 프로그램 모두이 페이지 끝에 제공됩니다., 송신기 코드에서 수신기 옵션이 주석 처리되고 수신기 프로그램에서 송신기 코드가 주석 처리됩니다. 모듈이 둘 다로 작동해야하는 프로젝트를 시도하는 경우 사용할 수 있습니다. 프로그램의 작동은 아래에 설명되어 있습니다.
모든 프로그램과 마찬가지로 헤더 파일 을 포함하여 시작 합니다. nRF는 SPI 프로토콜을 사용하기 때문에 SPI 헤더와 방금 다운로드 한 라이브러리를 포함했습니다. 서보 라이브러리는 서보 모터를 제어하는 데 사용됩니다.
#포함
다음 줄은 CE 및 CS 핀에 대해 라이브러리에 지시 하는 중요한 줄 입니다. 회로도에서 CE를 핀 7에 연결하고 CS를 핀 8에 연결 했으므로 라인을 다음과 같이 설정합니다.
RF24 myRadio (7, 8);
RF 라이브러리와 관련된 모든 변수는 복합 변수 구조로 선언되어야합니다. 이 프로그램에서 변수 msg 는 RF 모듈에서 데이터를 보내고받는 데 사용됩니다.
구조체 패키지 { int msg; }; typedef 구조체 패키지 패키지; 패키지 데이터;
각 RF 모듈에는 각 장치에 데이터를 전송할 수있는 고유 한 주소가 있습니다. 여기에는 한 쌍만 있기 때문에 송신기와 수신기 모두에서 주소를 0으로 설정 했지만 여러 모듈이있는 경우 ID를 고유 한 6 자리 문자열로 설정할 수 있습니다.
바이트 주소 = { "0"};
다음으로 void 설정 기능 내에서 RF 모듈 을 초기화하고 노이즈가없는 115 대역 에서 작동하도록 설정하고 모듈이 최소 속도 250Kbps로 최소 전력 소비 모드에서 작동하도록 설정합니다.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // WIFI 신호보다 높은 115 대역 myRadio.setPALevel (RF24_PA_MIN); // 최소 전력 낮은 분노 myRadio.setDataRate (RF24_250KBPS); // 최소 속도 myservo.attach (6); Serial.print ("설치 초기화 됨"); 지연 (500); }
void WriteData () 함수는 전달 된 데이터를 기록합니다. 앞서 말했듯이 nRF에는 데이터를 읽거나 쓸 수있는 6 개의 서로 다른 파이프가 있습니다. 여기서는 0xF0F0F0F066을 데이터 쓰기 주소로 사용했습니다. 수신자 측에서는 ReadData () 함수에서 동일한 주소를 사용하여기록 된 데이터를 수신해야합니다.
void WriteData () { myRadio.stopListening (); // 수신 중지 및 전송 시작 myRadio.openWritingPipe (0xF0F0F0F066); //이 40 비트 주소로 데이터 전송 myRadio.write (& data, sizeof (data)); 지연 (300); }
void WriteData () 함수는 데이터를 읽고 변수에 넣습니다. 다시 여기서 데이터를 읽거나 쓸 수있는 6 개의 다른 파이프 중 0xF0F0F0F0AA를 주소로 사용하여 데이터를 읽었습니다. 이것은 다른 모듈의 송신기가이 주소에 무언가를 기록 했으므로 우리는 같은 주소에서 그것을 읽고 있음을 의미합니다.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // 읽을 파이프, 40 비트 주소 myRadio.startListening (); // 전송 중지 및 Reveicing 시작 if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
이 라인 외에도 프로그램의 다른 라인은 POT를 읽고 map 기능을 사용하여 0에서 180으로 변환하는 데 사용되며 그에 따라 서보를 제어하는 수신기 모듈로 보냅니다. Servo Interfacing 튜토리얼에서 이미 배웠으므로 한 줄씩 설명하지 않았습니다.
nRF24L01을 사용하여 무선으로 서보 모터 제어
프로그램이 준비되면 각 Arduino 보드에 송신기 및 수신기 코드 (아래에 제공됨)를 업로드하고 USB 포트로 전원을 켭니다. 또한 두 보드의 직렬 모니터를 시작하여 전송중인 값과 수신중인 값을 확인할 수 있습니다. 송신기 측의 POT 노브를 돌릴 때 모든 것이 예상대로 작동하면 다른 쪽의 서보도 그에 따라 회전해야합니다.
프로젝트의 전체 작업은 아래 비디오에 나와 있습니다. 이러한 모듈이 첫 번째 시도에서 작동하지 않는 것은 매우 정상입니다. 문제가 발생하면 코드를 확인하고 다시 배선하고 위에 제공된 문제 해결 지침을 시도하십시오. 아무것도 작동하지 않으면 포럼이나 댓글 섹션에 문제를 게시하면 해결하려고 노력할 것입니다.