Arduino UNO+CAN-Bus - NOx-Messung

Hallo,
ich hoffe ihr könnt mir helfen.
In meinem Projekt geht es darum NOx-Werte zu messen und diese wiederum auf eine SD-Karte zu speichern.

Meine verwendeten Teile:

  • Arduino UNO
  • NOx –Sensor
  • Bluetooth shield HC-05
  • Seedstudio CAN-Bus shield (29 bit extented identifier)
  • Adafruit data logger shield+SD Card

Der Sensor ist mit CAN_h und CAN_l des CAN-Bus shields verbunden, die Spannungsversorgung des Sensors ist von einem Netzteil.
So weit so gut, doch leider bin ich ein totaler Anfänger, wenn es um den CAN-Bus geht.
Folgendes Programm habe ich getestet:

// demo: CAN-BUS Shield, receive data with check mode
// send data coming to fast, such as less than 10ms, you can use this way
// loovee, 2014-6-13


#include <SPI.h>
#include "mcp_can.h"


// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 9;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin
 
void setup()
{
    Serial.begin(9600);

START_INIT:

    if(CAN_OK == CAN.begin(CAN_250KBPS))                   // init can bus : baudrate = 250k
    {
        Serial.println("CAN BUS Shield init ok!");
    }
    else
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println("Init CAN BUS Shield again");
        delay(100);
        goto START_INIT;
    }
}

     unsigned char stmp[8] = {0, 1, 2, 3, 4, 5, 6, 7};

void loop()
{
    unsigned char len = 0;
    unsigned char buf[8];

    if(CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
    {
        CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf

        unsigned long canId = CAN.getCanId();
        
        Serial.println("-----------------------------");
        Serial.print("get data from ID: ");
        Serial.println(canId, HEX);

        for(int i = 0; i<len; i++)    // print the data
        {
            Serial.print(buf[i]);
            Serial.print("\t");
        }
        Serial.println();
        
     // send data:  id = 0x00, standart flame, data len = 8, stmp: data buf
      CAN.sendMsgBuf(0xFEDF, 0, 4, stmp);  
      delay(100);                       // send data per 100ms
    }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

Die richtige Baudrate habe ich eingestellt (250k)

Ich empfange folgende Nachricht am PC.
Am Serial Monitor kommt immer:
Get data from ID:18F00F52
255 255 255 255 255 127 31 31

Interpretiere ich das Status-Byte richtig? (ich nehme an, Byte 4 aus „Overview Transmit signals“):

Bit S3 S2 S1 S0
31 O2-signal not valid NOx-signal not valid Not available Not available
127 O2-signal vaild Not available Not available Not available
255 Not available Not available Not available Not available

Wie kann ich dem Sensor ein Start signal geben und wie bekomme ich die Messwerte?
Im Anhang ist das Datenblatt vom NOx-Sensor mit dem transfer protocol & receive signals.

Schon mal Danke für die Antworten!

Conti UniNOx12V_spec_11 03 08.pdf (876 KB)

Hi, kurze Frage vorweg, Kannst du die Sonde anfassen? Ist die Heizung aktiv? Denn offensichtlich überträgt die Sonde dir ja Daten. Nur 65280 für NOx bzw O2 ist doch recht viel, deshalb gehe ich davon aus, dass die Heizung des Sensor aus ist.

mir ist gerade noch etwas aufgefallen, du Sendest an den ID 65247 (EDEF) 0 1 2 3 4 5 6 7. Warum?

unsigned char stmp[8] = {0, 1, 2, 3, 4, 5, 6, 7};

     // send data:  id = 0x00, standart flame, data len = 8, stmp: data buf
      CAN.sendMsgBuf(0xFEDF, 0, 4, stmp); 
      delay(100);                       // send data per 100ms

ich hab nun das datenblatt nur überflogen, aber sollte da nicht in z.B. stmp[8] = {0, 0, 0, 0, 13, 13, 0, 0}; stehen?

Die Heizung ist nicht aktiv. Zum Vorheizen braucht Sie ja ein Startsignal. Das mit dem Senden hab ich mir so gedacht: Die Receive-ID in Hex und dann den Start-Code

Was passiert wenn du die Nachricht 0000 DD00 auf dem ID FEDF versendest? Und empfängst du immer die exakt gleiche Nachricht von der Sonde oder ändern sich die letzten 4 Bytes?

es ändert sich gar nichts

Hi!

Hast du mittlerweile Erfolg gehabt mit der NOx Messung? Würde mich sehr interessieren ...

Hast du auch den Rest von dem PDF oben ... steht dort evtl. der Startbefehl für die Heizung?

Könntest du das ganze PDF uploaden?

Grüße