Offline
Full Member
Karma: 0
Posts: 114
|
 |
« Reply #30 on: July 11, 2012, 11:01:04 pm » |
Lol thanks, I actually found the board version on sparkfun after I posted that, but wasn't going to pay 20 dollars for it on a board, however $5.50, that I can probably swing 
|
|
|
|
|
Logged
|
|
|
|
|
Port Angeles, Wa
Offline
Edison Member
Karma: 13
Posts: 1411
Ultimate DIY: Arduino
|
 |
« Reply #31 on: July 12, 2012, 07:23:04 am » |
9V's batteries are horrible... High Cost/Low Current.
You would do well to buy a $15-$20 radio control 9.6V rechargeable (usually comes with a charger too).
|
|
|
|
|
Logged
|
|
|
|
|
Anaheim CA.
Offline
Edison Member
Karma: 34
Posts: 2404
Experienced old Whitebeard with a Full head of Hair...
|
 |
« Reply #32 on: July 14, 2012, 03:32:16 pm » |
And the same module here for $2.75 US (this price is typical of many vendors on Ebay) 5.50 Ea should be for a pair... Check it out. http://www.electrodragon.com/?product=storage-container-set. I recently bought 6 of those devices and a USB Receiver "Dongle" for $9.95... "Free Shipping"... Too ? $22.00 Ea... Yeah I'll Bet... that they would love to sell a bunch at that price, oh yeah and the Features on the $22.50 board are built into the Chip. All of the nRF24XX series Ic's have those features... They're part of what drove the original design and that was an inexpensive Chipset that could co-exist with all the other ISM stuff as well as Microwave Ovens @ 2450 Mhz and most capable of 1000 watts or more @ ~ 2450 mhz as the ovens use a "Power Oscillator" (A Klystron of Magnetron tube) neither of which has any external frequency control (Oscillating Frequency is set by internal cavity dimensions primarily). Doc
|
|
|
|
|
Logged
|
“The solution of every problem is another problem.” -Johann Wolfgang von Goethe
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 114
|
 |
« Reply #33 on: July 15, 2012, 02:52:41 pm » |
And the same module here for $2.75 US (this price is typical of many vendors on Ebay) 5.50 Ea should be for a pair... Check it out. http://www.electrodragon.com/?product=storage-container-set. I recently bought 6 of those devices and a USB Receiver "Dongle" for $9.95... "Free Shipping"... Too ? $22.00 Ea... Yeah I'll Bet... that they would love to sell a bunch at that price, oh yeah and the Features on the $22.50 board are built into the Chip. All of the nRF24XX series Ic's have those features... They're part of what drove the original design and that was an inexpensive Chipset that could co-exist with all the other ISM stuff as well as Microwave Ovens @ 2450 Mhz and most capable of 1000 watts or more @ ~ 2450 mhz as the ovens use a "Power Oscillator" (A Klystron of Magnetron tube) neither of which has any external frequency control (Oscillating Frequency is set by internal cavity dimensions primarily). Doc That $2.75 one doesn't look like the + model that sales for $5.50 at the other place. The + model adds a few features including a slower transmit speed for increased range and less power usage. However you are correct they are cheaper on ebay http://www.ebay.com/itm/2PCS-Arduino-NRF24L01-Wireless-Transceiver-Module-/270977894613?pt=LH_DefaultDomain_0&hash=item3f178a88d5 is a + and 4.10 for 2 of them, so only $2.05 each free shipping. Although I'd probably buy this one instead: http://www.ebay.com/sch/i.html?_sacat=0&_nkw=nrf24l01&LH_PrefLoc=1&_sop=15 a little bit more expensive but it's located in the US, so would get here 3 times quicker lol.
|
|
|
|
|
Logged
|
|
|
|
|
Norway
Offline
Jr. Member
Karma: 0
Posts: 79
<3 Arduino
|
 |
« Reply #34 on: October 08, 2012, 02:03:45 pm » |
So, I'm testing the RF434, with VirtualWire. And is there a way to make it translate what it recieved into a text? Instead of hex codes for each letter.
|
|
|
|
|
Logged
|
I'm from Norway!
|
|
|
|
Global Moderator
Boston area, metrowest
Offline
Brattain Member
Karma: 270
Posts: 17040
Available for Design & Build services
|
 |
« Reply #35 on: October 08, 2012, 03:34:36 pm » |
Sure, just translate the hexcodes into letters. Translation is available at asciitable.com Say you get 1 character at a time: // mapping from incoming character to font_array or other commands: \ + = < > // invalid characters are not defined and are ignored switch(incomingByte){ case 0x20: Serial.print(" "); break; case 0x21: Serial.print("!"); break; case 0x2d: Serial.print("-"); break; case 0x2e: Serial.print("."); break; case 0x2f: Serial.print("/"); break; case 0x30: Serial.print("0"); break; case 0x31: Serial.print("1"); break; // etc. }
|
|
|
|
|
Logged
|
|
|
|
|
Norway
Offline
Jr. Member
Karma: 0
Posts: 79
<3 Arduino
|
 |
« Reply #36 on: October 09, 2012, 12:09:44 pm » |
Thanks! But I've ran into another problem, the VirtualWire library is hard to understand. I'm using a DHT11 to measure the temperature, now getting the readings from the DHT11 is easy, getting em shown in the serial monitor is easy. Problem comes when I want to send the readings using VirtualWire, thats hard  Or I'm sure I'm missing something... This is my code: Problems starts in "char *msg = char(DHT11.temperature);" it seems. // transmitter.pde // // Simple example of how to use VirtualWire to transmit messages // Implements a simplex (one-way) transmitter with an TX-C1 module // // See VirtualWire.h for detailed API docs // Author: Mike McCauley (mikem@open.com.au) // Copyright (C) 2008 Mike McCauley // $Id: transmitter.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $
// dewPoint function NOAA // reference: http://wahiduddin.net/calc/density_algorithms.htm double dewPoint(double celsius, double humidity) { double A0= 373.15/(273.15 + celsius); double SUM = -7.90298 * (A0-1); SUM += 5.02808 * log10(A0); SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ; SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ; SUM += log10(1013.246); double VP = pow(10, SUM-3) * humidity; double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558-T); }
// delta max = 0.6544 wrt dewPoint() // 5x faster than dewPoint() // reference: http://en.wikipedia.org/wiki/Dew_point double dewPointFast(double celsius, double humidity) { double a = 17.271; double b = 237.7; double temp = (a * celsius) / (b + celsius) + log(humidity/100); double Td = (b * temp) / (a - temp); return Td; }
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 2
#include <VirtualWire.h>
int tempsend; char tempconv; char fuck;
void setup() { Serial.begin(9600); // Debugging only Serial.println("setup"); Serial.println("DHT11 TEST PROGRAM "); Serial.print("LIBRARY VERSION: "); Serial.println(DHT11LIB_VERSION); Serial.println();
// Initialise the IO and ISR vw_set_ptt_inverted(true); // Required for DR3100 vw_setup(2000); // Bits per sec }
void loop() { Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor: "); switch (chk) { case 0: Serial.println("OK"); break; case -1: Serial.println("Checksum error"); break; case -2: Serial.println("Time out error"); break; default: Serial.println("Unknown error"); break; }
//Serial.print("Humidity (%): "); //Serial.println((float)DHT11.humidity, 2);
Serial.print("Temperature (oC): "); Serial.println(DHT11.temperature);
char *msg = char(DHT11.temperature);
digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); delay(2000);
}
Since it complains I can't do "'int' to 'char*'", I tried to set a char() conversion first. But then it complains about this "'char' to 'char*'". So I try to remove the * infront of MSG, but then I get the warning about a constant char... I'm really confused here, anyone want to help me think this one out? Sigh, I wish VirtualWire would have more examples showing how to send other values than 'const char'.
|
|
|
|
« Last Edit: October 09, 2012, 12:13:10 pm by Stigern »
|
Logged
|
I'm from Norway!
|
|
|
|
Global Moderator
Boston area, metrowest
Offline
Brattain Member
Karma: 270
Posts: 17040
Available for Design & Build services
|
 |
« Reply #37 on: October 09, 2012, 12:18:55 pm » |
Change a couple of things: Move these to the top of the sketch #include <dht11.h> #include <VirtualWire.h>
Delete this unless your transmitter needs a Push to Talk switch (most don't) vw_set_ptt_inverted(true); // Required for DR3100
put the data you want to send in an array msg[ ] then virtualwire will send the msg[] array out. I can't tell what data type you want to send - DHT11.temperature is a float? thus 4 butes? So put 4 byte in msg[0] thru msg[3] and let 'er rip.
|
|
|
|
|
Logged
|
|
|
|
|
Norway
Offline
Jr. Member
Karma: 0
Posts: 79
<3 Arduino
|
 |
« Reply #38 on: October 09, 2012, 12:39:55 pm » |
Hm, sorry for not understanding. But the value I'm sending could just be a normal int. Serial.print("Temperature (oC): "); int convert = DHT11.temperature; Serial.println(convert);
char *msg[3] = convert;
digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg, strlen(3)); vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); delay(2000);
So after converting my float value to a int, it's basically the value of 23-25 around there. What do you mean by put 4 byte in msg[0] thru msg[3]? Thanks for all the help so far! 
|
|
|
|
|
Logged
|
I'm from Norway!
|
|
|
|
Global Moderator
Boston area, metrowest
Offline
Brattain Member
Karma: 270
Posts: 17040
Available for Design & Build services
|
 |
« Reply #39 on: October 09, 2012, 12:53:54 pm » |
I didn't know how many bytes of data you were dealing with, so figured you had a float that was 4 bytes long. I don't know what this does char *msg[3] = convert;
I would personally do this: msg[0] = highByte(convert); msg[1] = lowByte(convert);
and then let virtualwire send the [msg] array out. Or just grab the low byte if its always <=255 I'd have to look at my remote control code at home to see if vw_send((uint8_t *)msg, strlen(3));
had to change to support that.
|
|
|
|
|
Logged
|
|
|
|
|
Norway
Offline
Jr. Member
Karma: 0
Posts: 79
<3 Arduino
|
 |
« Reply #40 on: October 09, 2012, 01:16:06 pm » |
Hm, got no compiling errors, but it won't send. Led 13 won't even light up, so it can't have gotten that far into the program  #include <dht11.h> dht11 DHT11; #define DHT11PIN 2 #include <VirtualWire.h>
double dewPoint(double celsius, double humidity) { double A0= 373.15/(273.15 + celsius); double SUM = -7.90298 * (A0-1); SUM += 5.02808 * log10(A0); SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ; SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ; SUM += log10(1013.246); double VP = pow(10, SUM-3) * humidity; double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558-T); }
// delta max = 0.6544 wrt dewPoint() // 5x faster than dewPoint() // reference: http://en.wikipedia.org/wiki/Dew_point double dewPointFast(double celsius, double humidity) { double a = 17.271; double b = 237.7; double temp = (a * celsius) / (b + celsius) + log(humidity/100); double Td = (b * temp) / (a - temp); return Td; }
int tempsend; char tempconv; char fuck;
void setup() { Serial.begin(9600); // Debugging only Serial.println("setup"); Serial.println("DHT11 TEST PROGRAM "); Serial.print("LIBRARY VERSION: "); Serial.println(DHT11LIB_VERSION); Serial.println();
// Initialise the IO and ISR vw_setup(2000); // Bits per sec }
void loop() { Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor: "); switch (chk) { case 0: Serial.println("OK"); break; case -1: Serial.println("Checksum error"); break; case -2: Serial.println("Time out error"); break; default: Serial.println("Unknown error"); break; }
int convert = DHT11.temperature;
char *msg; msg[0] = highByte(convert); msg[1] = lowByte(convert);
digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); delay(2000); }
|
|
|
|
|
Logged
|
I'm from Norway!
|
|
|
|
Global Moderator
Boston area, metrowest
Offline
Brattain Member
Karma: 270
Posts: 17040
Available for Design & Build services
|
 |
« Reply #41 on: October 09, 2012, 01:25:35 pm » |
Are you getting any of these? switch (chk) { case 0: Serial.println("OK"); break; case -1: Serial.println("Checksum error"); break; case -2: Serial.println("Time out error"); break; default: Serial.println("Unknown error"); break; }
is this doing anything now? char *msg;
|
|
|
|
|
Logged
|
|
|
|
|
Norway
Offline
Jr. Member
Karma: 0
Posts: 79
<3 Arduino
|
 |
« Reply #42 on: October 09, 2012, 01:55:19 pm » |
I'm getting the Ok. But I found an example on a blog: http://genericnerd.blogspot.no/2012/07/arduino-sending-integers-over-rf-with.htmlSo I took it, and merged it with the DHT11. Transmitter: // // FILE: dht11_test1.pde // PURPOSE: DHT11 library test sketch for Arduino //
//Celsius to Fahrenheit conversion
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 2
#include <VirtualWire.h>
// LED's const int ledPin = 13;
// Sensors
int Sensor1Data; //int Sensor2Data; char Sensor1CharMsg[4];
double Fahrenheit(double celsius) { return 1.8 * celsius + 32; }
//Celsius to Kelvin conversion double Kelvin(double celsius) { return celsius + 273.15; }
// dewPoint function NOAA // reference: http://wahiduddin.net/calc/density_algorithms.htm double dewPoint(double celsius, double humidity) { double A0= 373.15/(273.15 + celsius); double SUM = -7.90298 * (A0-1); SUM += 5.02808 * log10(A0); SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ; SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ; SUM += log10(1013.246); double VP = pow(10, SUM-3) * humidity; double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558-T); }
// delta max = 0.6544 wrt dewPoint() // 5x faster than dewPoint() // reference: http://en.wikipedia.org/wiki/Dew_point double dewPointFast(double celsius, double humidity) { double a = 17.271; double b = 237.7; double temp = (a * celsius) / (b + celsius) + log(humidity/100); double Td = (b * temp) / (a - temp); return Td; }
void setup() { Serial.begin(9600); // LED pinMode(ledPin,OUTPUT); // VirtualWire setup vw_setup(2000); // Bits per sec }
void loop() {
// Read and store Sensor 1 data int chk = DHT11.read(DHT11PIN); Sensor1Data = DHT11.temperature; delay(2000); // Convert integer data to Char array directly itoa(Sensor1Data,Sensor1CharMsg,10); // DEBUG Serial.print("Sensor1 Integer: "); Serial.print(Sensor1Data); Serial.print(" Sensor1 CharMsg: "); Serial.print(Sensor1CharMsg); Serial.print("RawSensor: "); Serial.print(DHT11.temperature); Serial.println(" "); delay(1000);
// END DEBUG digitalWrite(13, true); // Turn on a light to show transmitting vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg)); vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); // Turn off a light after transmission delay(200); } // // END OF FILE //
Reciever: /*
Sensor Receiver By Markus Ulfberg 2012-07-06
Gets a sensor reading 0-1023 in a char array from RF Transmitter unit via VirtualWire converts char array back to integer
*/
#include <VirtualWire.h>
// LED's int ledPin = 13;
// Sensors int Sensor1Data;
// RF Transmission container char Sensor1CharMsg[4];
void setup() { Serial.begin(9600); // sets the digital pin as output pinMode(ledPin, OUTPUT); // VirtualWire // Initialise the IO and ISR // Required for DR3100 vw_set_ptt_inverted(true); // Bits per sec vw_setup(2000); // Start the receiver PLL running vw_rx_start();
} // END void setup
void loop(){ uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; // Non-blocking if (vw_get_message(buf, &buflen)) { int i; // Turn on a light to show received good message digitalWrite(13, true); // Message with a good checksum received, dump it. for (i = 0; i < buflen; i++) { // Fill Sensor1CharMsg Char array with corresponding // chars from buffer. Sensor1CharMsg[i] = char(buf[i]); } // Null terminate the char array // This needs to be done otherwise problems will occur // when the incoming messages has less digits than the // one before. Sensor1CharMsg[buflen] = '\0'; // Convert Sensor1CharMsg Char array to integer Sensor1Data = atoi(Sensor1CharMsg); // DEBUG Serial.print("Temp Outside: "); Serial.println(Sensor1Data); // END DEBUG // Turn off light to and await next message digitalWrite(13, false); } }
Now it's working.  Not sure I understand exactly how it parses the int over. I sure need to study arrays more. And just experiment with em.
|
|
|
|
« Last Edit: October 09, 2012, 02:03:54 pm by Stigern »
|
Logged
|
I'm from Norway!
|
|
|
|
Global Moderator
Boston area, metrowest
Offline
Brattain Member
Karma: 270
Posts: 17040
Available for Design & Build services
|
 |
« Reply #43 on: October 09, 2012, 02:04:39 pm » |
Seems to be here: // Convert integer data to Char array directly itoa(Sensor1Data, Sensor1CharMsg, 10);
then sends it out vw_send((uint8_t *) Sensor1CharMsg , strlen( Sensor1CharMsg ));
itoa is one of those C things that you have to know about to be able to look it up: http://www.arduino.cc/playground/Code/PrintingNumbers
|
|
|
|
|
Logged
|
|
|
|
|
Norway
Offline
Jr. Member
Karma: 0
Posts: 79
<3 Arduino
|
 |
« Reply #44 on: October 09, 2012, 02:31:49 pm » |
So, there are many other functions other than those listed on Arduino.cc-Reference? Thanks so much for the help  I understand much much more than before I read your answers 
|
|
|
|
|
Logged
|
I'm from Norway!
|
|
|
|
|