Modellbau
Basteln
Galeere
Holz
Schiffe
Tisch
U-Boot
Elektronik
Spanten
Schwan
Löten
Segeln
Sägen
RC
Werkstatt
Modellbau
Basteln
Galeere
Holz
RC Schwan
Tisch
U-Boot
Elektronik
Spanten
Schwan
Löten
Segeln
Sägen
Holzwerken
Werkstatt
Modellbau
Basteln
Galeere
Holz
Schiffe
Tisch
U-Boot
Elektronik
Spanten
Schwan
Löten
Segeln
Sägen
Holzwerken
Werkstatt

  Allgemein
  Elektronik
  MusicBox
  Netzteil
  Solaranlage
  Telemetrie
  MusicBox2
  Wetterstation
  Schiffe
Kirchnernet
Datenschutz

Elektronik -> Telemetrie


---< Ein Telemetriemodul kompatibel zu Graupner HOTT >---

Das Modul beruht auf einem Arduino Mini Pro.
Emuliert wird das Graupner GENERAL MODUL.
Getestet wurde mit einer MX12 und 16.
Es übermittelt lediglich die beiden Spannungs und die beiden Temperaturwerte, dies ist für mich als Schiffsmodellbauer ausreichend.
Allerdings kann das Modul um beliebige Sensoren etc erweitert werden.
Als Temperatursensoren kommen TSIC Sensoren zum Einsatz.
Die MAterialkosten betragen unter 10 EURO und die Bauzeit eine knappe Stunde.

main/Elektronik/Telemetrie/01_Modul_mit Spannungsteiler.jpg
Bild: 01 Modul mit Spannungsteiler -Back-
main/Elektronik/Telemetrie/02_Modul_Oberseite.jpg
Bild: 02 Modul Oberseite -Back-
main/Elektronik/Telemetrie/03_Modul_im_Schrumpfschlauch.jpg
Bild: 03 Modul im Schrumpfschlauch -Back-
main/Elektronik/Telemetrie/04_Anzeige.jpg
Bild: 04 Anzeige -Back-
main/Elektronik/Telemetrie/05_Anzeige.jpg
Bild: 05 Anzeige -Back-
main/Elektronik/Telemetrie/06_Verschaltung.JPG
Bild: 06 Verschaltung -Back-

/////////////////////////// M.Kirchner 2017 ////////////////////////////
////////////////////////////////////////////////////////////////////////
#include //TSIC Bibliothek von http://www.arduinolibraries.info/libraries/tsic

#define LED 2 //Port der angeschlossenen LED
#define LEDON digitalWrite(LED, HIGH); // LED einschalten
#define LEDOFF digitalWrite(LED, LOW); //LED Ausschalten
#define FaktorV1 0.2248 //Faktor für einen Spannungsteiler mit 1k / 20 k Widerstände
#define FaktorV2 0.2248 //Faktor für einen Spannungsteiler mit 1k / 20 k Widerstände



static byte RXbyte1 = 0;
static byte RXbyte2 = 0;
float V1; // Spannungswert 1
float V2; // Spannungswert 2
uint16_t dtemp1 = 0; // Digitaler Temperaturwert des ersten TSIC Sensors
float T1 = 0; // Temperaturwert in °C des Sensors 1
uint16_t dtemp2 = 0; // Digitaler Temperaturwert des zweiten TSIC Sensors
float T2 = 0; // Temperaturwert in °C des Sensors 2



TSIC Sensor1(7,9); // Ein TSIC Sensor an PIN 7 mit Vss an PIN 9
TSIC Sensor2(8,9); // Ein TSIC Sensor an PIN 8 mit Vss an PIN 9



byte Nachricht[45] = { // Die Nachricht
0x7C,0x8D,0x00,0xD0,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0x00,0x7D,0x00};

//-------------------------------------------------------------------------------

void SEND_MSG() // Nachricht an den Empfänger senden
{
Nachricht[44] = CALCsm(Nachricht); // Checksumme einfügen

for(int i = 0; i < 45; i++)
{
Serial.write (Nachricht[i]); // Nachricht Byteweise versenden
delayMicroseconds(1600);
Serial.read(); // Selbstgesendete Zeichen aus dem Lesebuffer entfernen
}
}

//-------------------------------------------------------------------------------

byte CALCsm (byte *data) // Checksumme berechnen
{
byte sum = 0;
for (byte index = 0; index <= 43; index++) {sum = sum + data [index];}
return sum;
}

//-------------------------------------------------------------------------------

void SETV1(float Spannung) // Wert der Spannung 1 (A0) in 2 Byte zerlegen und in die Nachricht schreiben
{
uint16_t val = (uint16_t) (Spannung * 10);
byte BYTE_low = (byte) (val&255);
byte BYTE_high = (byte)(val >> 8);
Nachricht[12] = BYTE_low;
Nachricht[13] = BYTE_high;
}

//-------------------------------------------------------------------------------

void SETV2(float Spannung) // Wert der Spannung 2 (A1) in 2 Byte zerlegen und in die Nachricht schreiben
{
uint16_t val = (uint16_t) (Spannung * 10);
byte BYTE_low = (byte) (val&255);
byte BYTE_high = (byte)(val >> 8);
Nachricht[14] = BYTE_low;
Nachricht[15] = BYTE_high;
}

//-------------------------------------------------------------------------------

float ReadV1() // Spannung 1 messen und mit Faktor versehen
{
uint16_t Vd = analogRead(0);
float V=((float)Vd/10)*FaktorV1;//Mit Faktor der genutzten Widerstände des Spannungsteilers verrechnen
return V;
}

//-------------------------------------------------------------------------------

float ReadV2() // Spannung 2 messen und mit Faktor versehen
{
uint16_t Vd = analogRead(1);
float V=((float)Vd/10)*FaktorV2;//Mit Faktor der genutzten Widerstände des Spannungsteilers verrechnen
return V;
}

//-------------------------------------------------------------------------------

void setup() {
// put your setup code here, to run once:
Serial.begin (19200); // Serielle Schnitstelle mit 19200 BAUD starten
pinMode(LED, OUTPUT); // Port für LED auf OUTPUT stellen
analogReference(INTERNAL); //Auswahl der analogen Referenzspannung
}

//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------

void loop()
{//Start Loop


if (Serial.available() >=0) // Wenn mindestens ein Byte im Empfangsspeicher bereit liegt
{//Byte Empfangen
RXbyte1 = Serial.read(); // Ein Byte lesen
if ((RXbyte1==0x80)) // Wenn das Byte den wert 0x80 hat
{//Byte 1 gelesen // Ws wird nicht ausgewertet welches Modulk vom Empfänger angefragt wurde
// Dieses Verfahren hat sehr gut funktioniert
//Mit der Auswertung des zweiten Bytes (0x8D etc) gab es bei manchen Empfängern Schwierigkeiten

LEDON //Einschalten der LED
V1=ReadV1(); // Messen der Spannung V1 an A0
V2=ReadV2(); // Messen der Spannung V2 an A1
SETV1(V1); // Die Spannungswerte für V1 in die entsprechenden Bytes der Nachricht schreiben
SETV2(V2); // Die Spannungswerte für V2 in die entsprechenden Bytes der Nachricht schreiben

if (Sensor1.getTemperature(&dtemp1)) {T1 = Sensor1.calc_Celsius(&dtemp1);} //Temperatur des ersten TSIC Sensors einlesen und auf Gültigkeit überprüfen
if (Sensor2.getTemperature(&dtemp2)) {T2 = Sensor1.calc_Celsius(&dtemp2);} //Temperatur des zweiten TSIC Sensors einlesen und auf Gültigkeit überprüfen

Nachricht[16]=(byte)T1+20; // Temp 1 mit Offsett versehen und in das entsprechende Byte schreiben
Nachricht[17]=(byte)T2+20; // Temp 2 mit Offsett versehen und in das entsprechende Byte schreiben

delay(5);

SEND_MSG(); //Die komplette Nachricht an den Empfänger schicken
delay(10);
LEDOFF //LED Ausschalten
delay(10);
}//Byte 1 gelesen

}//Byte Empfangen

}//End Loop

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////


Modellbau
Basteln
Galeere
Holz
Schiffe
Tisch
U-Boot
Elektronik
Spanten
Schwan
Löten
Segeln
Sägen
Holzwerken
Werkstatt
Modellbau
Basteln
Galeere
Holz
Möbel
Tisch
U-Boot
Elektronik
Spanten
Schwan
Löten
Segeln
Sägen
Holzwerken
Werkstatt
Modellbau
Funke
Galeere
Holz
Schiffe
Radio
U-Boot
Elektronik
Spanten
Schwan
Löten
Segeln
Sägen
Holzwerken
Werkstatt