Перейти к содержимому






Фотография
- - - - -

nRF24L01 – 1 км (ID:457)

Написано admin , 16 Май 2015 · 911 Просмотров

nRF24L01 – 1 км  (ID:457) Радио модуль NRF24L01 отличается от своих «братьев меньших» увеличенной мощностью передатчика и повышенной чувствительностью. Он способен передать информацию со скоростью передачи до 2 Mbps на расстояние до 1000 метров.
Его можно использовать для беспроводной передачи информации с одной платы Arduino на другую. Данная версия платы радио модуля имеет десяти контактный разъем.
Обозначение выводов :
GND - подключение к общему проводу.
VCC - подключение к выводу +3,3 Вольт.
CE - подключение к выводу 8 Arduino.
CSN - подключение к выводу 7 Arduino.
MISO - подключение к выводу 12 Arduino.
MOSI - подключение к выводу 11 Arduino.
SCK - подключение к выводу 13 Arduino.
Вывод IRQ использоваться не будет.



После скачивания файла архива Mirf.zip, поместите содержимое архива в папку libraries, которая находится в папке с программой Arduino.
Для работы нам понадобится две платы Arduino.
Попробуем с помощью радио модуля передать информацию с одной платы Arduino на другую.
Примерный скетч передатчика - сервера выглядит следующим образом:
/**
	 * An Mirf example which copies back the data it recives.
	 *
	 * Pins:
	 * Hardware SPI:
	 * MISO -> 12
	 * MOSI -> 11
	 * SCK -> 13
	 *
	 * Configurable:
	 * CE -> 8
	 * CSN -> 7
	 *
	 */
	
    #include <SPI.h>
    #include <Mirf.h>
    #include <nRF24L01.h>
    #include <MirfHardwareSpiDriver.h>
	
    void setup(){
	  Serial.begin(9600);
	
	  /*
	   * Set the SPI Driver.
	   */
	
	  Mirf.spi = &MirfHardwareSpi;
	
	  /*
	   * Setup pins / SPI.
	   */
	
	  Mirf.init();
	
	  /*
	   * Configure reciving address.
	   */
	
	  Mirf.setRADDR((byte *)"serv1");
	
	  /*
	   * Set the payload length to sizeof(unsigned long) the
	   * return type of millis().
	   *
	   * NB: payload on client and server must be the same.
	   */
	
	  Mirf.payload = sizeof(unsigned long);
	
	  /*
	   * Write channel and payload config then power up reciver.
	   */
	
	  Mirf.config();
	
	  Serial.println("Listening...");
    }
	
    void loop(){
	  /*
	   * A buffer to store the data.
	   */
	
	  byte data[Mirf.payload];
	
	  /*
	   * If a packet has been recived.
	   *
	   * isSending also restores listening mode when it
	   * transitions from true to false.
	   */
	
	  if(!Mirf.isSending() && Mirf.dataReady()){
	    Serial.println("Got packet");
	
	    /*
		 * Get load the packet into the buffer.
		 */
	
	    Mirf.getData(data);
	
	    /*
		 * Set the send address.
		 */
	
	
	    Mirf.setTADDR((byte *)"clie1");
	
	    /*
		 * Send the data back to the client.
		 */
	
	    Mirf.send(data);
	
	    /*
		 * Wait untill sending has finished
		 *
		 * NB: isSending returns the chip to receving after returning true.
		 */
	
	    Serial.println("Reply sent.");
	  }
    }
Примерный скетч приемника - клиента выглядит следующим образом:
/**
	 * A Mirf example to test the latency between two Ardunio.
	 *
	 * Pins:
	 * Hardware SPI:
	 * MISO -> 12
	 * MOSI -> 11
	 * SCK -> 13
	 *
	 * Configurable:
	 * CE -> 8
	 * CSN -> 7
	 *
	 * Note: To see best case latency comment out all Serial.println
	 * statements not displaying the result and load
	 * 'ping_server_interupt' on the server.
	 */
	
    #include <SPI.h>
    #include <Mirf.h>
    #include <nRF24L01.h>
    #include <MirfHardwareSpiDriver.h>
	
    void setup(){
	  Serial.begin(9600);
	  /*
	   * Setup pins / SPI.
	   */
	
	  /* To change CE / CSN Pins:
	   *
	   * Mirf.csnPin = 9;
	   * Mirf.cePin = 7;
	   */
	  /*
	  Mirf.cePin = 7;
	   Mirf.csnPin = 8;
	   */
	  Mirf.spi = &MirfHardwareSpi;
	  Mirf.init();
	
	  /*
	   * Configure reciving address.
	   */
	
	  Mirf.setRADDR((byte *)"clie1");
	
	  /*
	   * Set the payload length to sizeof(unsigned long) the
	   * return type of millis().
	   *
	   * NB: payload on client and server must be the same.
	   */
	
	  Mirf.payload = sizeof(unsigned long);
	
	  /*
	   * Write channel and payload config then power up reciver.
	   */
	
	  /*
	   * To change channel:
	   *
	   * Mirf.channel = 10;
	   *
	   * NB: Make sure channel is legal in your area.
	   */
	
	  Mirf.config();
	
	  Serial.println("Beginning ... ");
    }
	
    void loop(){
	  unsigned long time = millis();
	
	  Mirf.setTADDR((byte *)"serv1");
	
	  Mirf.send((byte *)&time);
	
	  while(Mirf.isSending()){
	  }
	  Serial.println("Finished sending");
	  delay(10);
	  while(!Mirf.dataReady()){
	    //Serial.println("Waiting");
	    if ( ( millis() - time ) > 1000 ) {
		  Serial.println("Timeout on response from server!");
		  return;
	    }
	  }
	
	  Mirf.getData((byte *) &time);
	
	  Serial.print("Ping: ");
	  Serial.println((millis() - time));
	
	  delay(1000);
    }
Подключаем передатчик к одной плате Arduino, относим его на некоторое расстояние.
Подключаем приемник к другой плате Arduino, включаем монитор порта и видим каждую секунду изменяющиеся цифры . Теперь можно поэкспериментировать. Проверьте, как положение приемника и передатчика влияет на дальность связи, какая максимальная дальность связи.
Ссылка на витрину магазина http://dvrobot.ru/238/433.html.






Trackbacks для записи [ Trackback URL ]

Для данной записи нет trackbacks.

Последние записи

Последние комментарии