Hello! I have the cheap FS1000S 433Mhz transmitter/receivers. I want to send a single pulse, 300ms long, and 1/2 duty at 300hz, to the receiver. All I'm finding is Radiohead, which sends text characters. How can I recognize when my receiver has received the signal?
Thanks!
-Tyler
Hi,
Welcome to the forum.
Please read the first post in any forum entitled how to use this forum.
http://forum.arduino.cc/index.php/topic,148850.0.html .
Why do you want to send a pulse?
What is the application?
Tom...
I want to send a single pulse, 300ms long, and 1/2 duty at 300hz
This statement needs clarification.
You can not sent a 300 millisecond pulse 300 times per second. Do you mean 300 microseconds?
There is also a contradiction between "single pulse" and the 300Hz which implies a repeating cycle.
90 cycles of a 300 Hz square wave would take 300 ms to send.
Example:
for (int i=0; i<90; i++) {
digitalWrite(txpin,1);
delayMicroseconds(1667);
digitalWrite(txpin,0);
delayMicroseconds(1667);
}
For higher accuracy, you may need to turn off interrupts.
Tylersuard:
Hello! I have the cheap FS1000S 433Mhz transmitter/receivers. I want to send a single pulse, 300ms long, and 1/2 duty at 300hz, to the receiver.
I have no experience of 433MHz wireless but this seems an inappropriate use of wireless. I suggest you send a message that tells the receiving Arduino the frequency and duty cycle and allow it to generate the pulses. That way interruptions to the wireless signal should not matter.
For example send "<300,300,50> meaning 300 microsecs, 300Hz and 50% duty cycle.
...R
Thank you Jremington, this is exactly what I was looking for. Now, how can I program an arduino to recognize when this signal is received?
jremington:
90 cycles of a 300 Hz square wave would take 300 ms to send.Example:
for (int i=0; i<90; i++) {
digitalWrite(txpin,1);
delayMicroseconds(1667);
digitalWrite(txpin,0);
delayMicroseconds(1667);
}
For higher accuracy, you may need to turn off interrupts.
TomGeorge:
Why do you want to send a pulse?
What is the application?Tom...
Hi Tom. This is for sending a signal from an esp8266 to an attiny 85. My employers have specified that the signal must be sent from the 433mhz transmitter. FCC laws say the signal can be no longer than 333ms every 10 seconds. The signal must turn off and on again at 300 times per second. When the arduino receives the signal, it will trigger a motor to start running. I'm able to broadcast this signal, but I'm unable to get the arduino to recognize / receive the signal. Any help would be much appreciated! Thank you!
Tylersuard:
Hi Tom. This is for sending a signal from an esp8266 to an attiny 85. My employers have specified that the signal must be sent from the 433mhz transmitter. FCC laws say the signal can be no longer than 333ms every 10 seconds. The signal must turn off and on again at 300 times per second. When the arduino receives the signal, it will trigger a motor to start running. I'm able to broadcast this signal, but I'm unable to get the arduino to recognize / receive the signal. Any help would be much appreciated! Thank you!
AS far as I have seen, NONE of the hobby radio devices will do what you want. They are ALL for sending data messages.
Paul
As has been pointed out, a better approach would probably be to send coded packets instructing the receiver to turn on or off a locally-generated 300 Hz signal.
Tylersuard:
My employers have specified that the signal must be sent from the 433mhz transmitter.
Presumably, your employers will provide compensation to anyone from the forum who agrees to do your job for you.
Those 433MHz modules are very cheap, perhaps too cheap. They are best used with a 2000 Hz bitrate, but I think that the receiver will receive 300 Hz without problem. The receiver has an automatic gain, therefor the Arduino receives noise all the time.
When the receiver is connected to an interrupt of the Arduino board, then it can receive up to 2000 interrupts per second for just the noise.
The VirtualWire/RadioHead has a start-sequence of data. The receiving Arduino is able to recognize that start-sequence between the noise. The protocol of VirtualWire/RadioHead is done in software and it is very good. It is not something you can write yourself.
To recognize the 300 Hz, you need a noise filter in software to remove some noise that is on top of the 300 Hz. Then you have to write code that recognizes the frequency, for example from 290 to 310 Hz.
That can be done, but I don't know a good example that is suited for this situation.
The fuzzillogic library is written more "open" than the VirtualWire/RadioHead. Perhaps you can use it to start with.
There is a lot of effort put in both the VirtualWire/RadioHead and fuzzillogic. The protocol in software determines the range. The range can be 50 cm to 10 meters, depending on the protocol and the noise filter in software. That means you have to be some kind of wizzard to write your own.
It is 2019. To use a protocol that anyone can generate is not safe.
Perhaps a motor or a device with an inductive load generates short pulses of 300 Hz. You need at least a good protocol with a checksum.
What if the receiving Arduino causes the motor it controls to generate inductive pulses that are distorted in the cheap receiver in such a way that the Arduino sees 300 Hz.
All the other transceiver modules for 433MHz have a chip on the module for the protocol. Then the Arduino can just read and write data to that chip.
Tylersuard:
All I'm finding is Radiohead, which sends text characters.
It does not.
It sends bytes which can be text or binary.