Reading TPM-Sensors via Arduino

Hello,
I am working on a system to read multiple TPM-Sensors (Tire Pressure Monitoring) with an Arduino. These Sensors send their data ota with 433 MHz (Europe). I bought an 433 MHz Transceiver ER400TRS to get receive those data.
I wrote the following small sketch to test the communication between the Receiver and my Arduino:

/*
 * ARDUINO TPMS READING SKETCH
 * DATE:    08/JUL/2015
 * AUTHOR:  DANIEL SEE
 * PIN SETUP:
 * ER400TRS ----> SIGNAL      ----> ARDUINO
 * PIN_1    ----> ANTENNA
 * PIN_2    ----> RF GND
 * PIN_3    ----> RSSI        ----> A0
 * PIN_4    ----> BUSY OUTPUT ----> D2
 * PIN_5    ----> SDO         ----> D10
 * PIN_6    ----> SDI         ----> D11
 * PIN_7    ----> Host Ready  ----> GND
 * PIN_8    ----> Vcc         ----> 5V
 * PIN_9    ----> GND         ----> GND
 *
 */

#include <SoftwareSerial.h>

#define rx 10
#define tx 11
#define rssi A0
#define busy 2

char* question = "ER_CMD#U?";
SoftwareSerial S2 = SoftwareSerial(rx, tx);
String serial_read = "";

void setup() {
  pinMode(rx, INPUT);
  pinMode(tx, OUTPUT);
  pinMode(rssi, INPUT);
  pinMode(2, INPUT);

  Serial.begin(19200);
  S2.begin(19200);

  Serial.println("\n[ER400TRS TEST]");
  Serial.println(question);
  S2.print(question);
}

void loop() {
  if (S2.available()>0) {
    Serial.println("[X]" + (char)S2.read());
  }
}

void serialEvent() {
  while (Serial.available()) {
    char received = (char)Serial.read();
    serial_read += received;
    delay(5);
  }
  Serial.println("Received: " + serial_read);
  S2.print(serial_read);
  serial_read = "";
}

ER_CMD#U? questions the baud-rate from the Receiver 8it should be 19200 default.

I only receive:

[X]

[ER400TRS TEST]
ER_CMD#U?
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]
[X]

And every time the RDKS sends data I get more of those empty data chunks ("[X]") I expected sth. like "[X]ABCADA" or so....

Can any1 please help me, I dont know whats wrong :frowning:

Here the Datasheet of the Receiver:
ER400TRS

I now tried to Plug it in in the Hardware TX and RX Pin and Used a MAX232 for Communication with PC. I had to put the Baud rate up to 250000 to receive an correct signal, but it was only my command echoed :frowning:

I now receive and send everything correct. I managed this by using an Arduino Mega and Serial for connection to the PC and Serial2 for connection to the Receiver.
I think there was sth. wrong with the dataflow between Receiver -> Arduino -> Max232 -> PC. Now its only Receiver -> Arduino -> PC.

The next step is to receive anything from the TPMS... Anyone got some ideas?

Any updates on this project? I'm interested in attempting something similar.

Hi,
I'm interested too to have news of your project.
I try to do it too. I have four tpms tyredog valves that transmit on 433mhz, but i don't know how to get the four datas on my arduino.
I think to know how to do with one, but no how to handle the four messages together.

your latest code for this would be a great start for me I am new to this and have got your setup working as you did in your first post.
I replicated it by pulling pin 10 and 11 on the transmitter this then displayed the [x] repeatedly on the serial monitor on the receiver until they were reconnected.

Please could you let me have your working setup in possible...

Many thanks..

iaumeg:
Hi,
I'm interested too to have news of your project.
I try to do it too. I have four tpms tyredog valves that transmit on 433mhz, but i don't know how to get the four datas on my arduino.
I think to know how to do with one, but no how to handle the four messages together.

To my understanding, each TPMS transmitter sends their data 6 times consecutively every 30 seconds in the hopes that at least one of the six transmissions won't be trampled on by other sensors, one of your other three, or other sensors in the local area.

The data sent is as follows:

2 bit times continuous transmission (not Manchester coded)
3-bit fixed training sequence (zeros)
1 byte unknown
4 byte sensor ID
1 byte (tire pressure / 25 Pa)
1 byte (temperature / ° C - 50)
1 byte CRC-8-CCITT

I too want to make my own TPMS receiver using a Teensy and an OLED Display on my dashboard in a "Heads Up" configuration that shows the status of the tires at ignition on, then switches to a GPS assisted speedometer that reflects off the windshield. If a tire drops below a safe threshold, the display would switch from speed to a low tire alert that shows me which tire is out of tolerance.

My vehicle has TPMS, but with four new tires, wheels, and sensors, the generic TPMS light on my dash is always on. I'm guessing I have a bad receiving module. Why replace it when I can make my own?

In addition, I would like to make one for my brother-in-law who drives a semi truck cross-country. I think he would like to have a display to monitor all the tires on his truck and trailer that could alert him to, not only that a tire is out of safety tolerance, but which of the (10 (no trailer) to 26 (4-axle trailer)) tires has the problem before it turns to shreds on the highway.

"Tire T2R1 Low pressure!" would be Trailer axle 2 inside right tire.
Maybe it could even show an outline drawing of the vehicle with all its tires and flash the one with the problem?

My 2013 VW Jetta has a hidden push button to tell the computer to re calibrate for a new tire pressure. I think it is 3 lbs less than the current tire pressure. Does you vehicle also have a hidden switch?

Paul