Forum: HF, Funk und Felder Low Tech Funkmodul für 3D Taster


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christian K. (christian_knuell)


Lesenswert?

Hallo,

ich suche ein Sender / Empfängerpaar das den Zustand eines Schalters "in 
Dauerschleife" überträgt:

-Also einfach ein Sender der dauerhaft sendet sobald er mit Strom 
versorgt wird.

-Und ein Empfänger der einen Ausgang geschaltet hält solange er das 
Signal empfängt.

-5m Reichweite sind völlig ausreichend.

-Zuverlässig eingehaltene Latenz von 1ms.

-Legales Frequenzband, möglichst klein, preiswert, Fertigmodul und 
geringer Stromverbrauch.


Vermutlich sehe ich den Wald vor lauter Bäumen nicht, doch alles was ich 
bisher gefunden habe sind jede Menge Module die per SPI oder UART 
Schnittstelle gefüttert werden wollen und Garagentorsender die den 
Tastendruck 1x senden, den Zustand aber nicht in Dauerschleife 
übertragen.



Die Anwendung ist einen 3D Taster für CNC Fräsen kabellos zu machen:

-Wird er aus seinem Halter genommen schließt ein Taster automatisch den 
Stromkreis zur Batterie und er beginnt zu senden.

-Berührt der 3D Taster das Werkstück unterbricht er den Stromkreis, 
Sender und Empfänger schalten ab und die Steuerung erkennt die 
Berührung.


Das Dauersignal ist wichtig, denn wenn es nur ein kurzes Tastsignal a la 
Garagentorsender ist fährt die Maschine einen Crash falls die
Batterie leer ist oder das Signal nicht empfangen wurde.
Ist beim Dauersignal die Batterie leer oder der Empfang gestört ist das 
leicht zu erkennen und nicht weiter problematisch.
Wichtig ist nur eine kurze und nicht zu stark schwankende Latenz um den 
exakten Schaltzeitpunkt korrekt zu erkennen.

Christian

von N. M. (mani)


Lesenswert?

Eigentlich hätte ich ja gesagt schau dir Mal den JDY-40 an. In Mode 4 
geht das so in die Richtung glaube ich. Evtl noch irgendwo ein NOT und 
gut. Latenz müsste man messen.
Die 1ms Forderung von dir ist aber schon sehr Echtzeit würde ich sagen. 
Das könnte allgemein interessant werden.

Aber essentiell wichtig ist bei dir ja die Ausfallerkennung damit deine 
Maschine nicht crasht. So wie ich das sehe überträgt der JDY-40 nur 
Änderungen. Was ihn damit schon wieder disqualifiziert.

Im einfachsten Fall wäre es eigentlich nur ein Modulator/Demodulator den 
du brauchst (z.B. OOK o.a). Frequenz da, Maschine darf weiter fahren. 
Frequenz weg, Maschine bleibt stehen bzw. Signal für Taster 
gedruckt/Referenz erreicht.
Aber auch da ist die Frage: was passiert wenn dein eigentlicher Sender 
abschaltet, es aber einen Störer auf der selben Frequenz gibt was deine 
Maschine weiter laufen lässt?

Ich glaub richtig zuverlässig/sicher wird das erst wenn Daten übertragen 
werden.

von Chris S. (schris)


Lesenswert?

Nennt sich IR, einfach IR Sender und TSOP1738 .
Hier ein Beispielcode mit 1.2Mhz F_CPU .
Die Kontaktprobe hat zwei Reed-Kontakte, Schliesser, und zwei Magnete.
Ein Reed-Kontakt ist im Halter, als CONTACT im Code, und eins ist in der
Kontaktprobe um die Batterie freizugeben. Hier ein Auszug aus meinem 
Code
fuer eine Kontaktprobe im Wecheslhalter. Datenuebertragung geht mit 
2400bps
und einem Messinterval von ca 1ms mit uebertragung von Batt_low der
CR2430 Zelle.
1
#include <util/delay_basic.h>
2
#define dly()       _delay_loop_1(165)
3
#define inp(p)      PINB&_BV(p)
4
#define tx_hi()     (PINB|=_BV(3))
5
#define tx_lo()     (PINB&=~_BV(3))
6
#define nop()       asm("nop")
7
#define nop2()      do { nop(); nop(); } while(0)
8
#define tx_1()      (tx_hi(),dly())
9
#define tx_0()      (tx_lo(),dly())
10
#define tx_on()     tx_1(),tx_0()
11
#define tx_off()    tx_0(),tx_1()
12
#define tx_bat(n)   (tx_##n(),batt?tx_0():tx_1())
13
uint8_t batt=getVcc()>=2800;
14
for(;;) {
15
 tx_1();  nop2();
16
 if(inp(2))  tx_off(); else tx_on();
17
 if(inp(2))  tx_off(); else tx_on();
18
 if(inp(2))  tx_batt(0); else tx_batt(1);
19
 if(inp(2))  tx_off(); else tx_on();
20
 tx_0(); nop2();
21
}
22
23
///////////////////////////////////////////////////////////// Empfang
24
#define dly_() _delay_loop_1(83)
25
#define dly_1() _delay_loop_1(166)
26
#define out(x,y)  ((y)?PORTB|=_BV(x):PORTB&=~_BV(x))
27
#define IN_USE 1  // reed contact
28
#define IR 3
29
#define CONTACT 4
30
#define E_STOP 2
31
#define E_STOP_OK 1
32
#define BATT_LO 5
33
#if 0
34
#define INV ~
35
#else
36
#define INV
37
#endif
38
39
uint8_t i=0;
40
for(;;) {
41
out(CONTACT,INV -1);
42
out(E_STOP,E_STOP_OK);
43
for(;~inp(IN_USE);) { // reed contact off
44
  while(~inp(IR)) if(!++i) out(E_STOP,!E_STOP_OK) ; // wait for start bit
45
  dly_(); if(~inp(IR)) continue; out(E_STOP,E_STOP_OK);
46
  dly_1(); out(CONTACT,INV inp(IR));  dly_1(); 
47
  dly_1(); out(CONTACT,INV inp(IR));  dly_1(); 
48
  dly_1(); out(CONTACT,INV inp(IR));  dly_1(); out(BATT_LO, inp(IR));
49
  dly_1(); out(CONTACT,INV inp(IR));  dly_1(); 
50
  dly_(); i=0; 
51
}}
52
///////////////////////////////////////////////////
53
uint16_t avgAdc(uint8_t avg, uint8_t shift) {
54
     uint16_t result=0;
55
     while(avg--) {
56
       ADCSRA |= _BV(ADSC); // Start conversion
57
       while (bit_is_set(ADCSRA,ADSC)); // measuring
58
       result+=ADC;
59
     } 
60
     while(shift--) result>>=1;
61
     return result;
62
}
63
uint16_t getVcc() {
64
  ADMUX = _BV(MUX3) | _BV(MUX2);
65
  dly();dly(); dly();
66
  dly();dly(); dly();
67
  avgAdc(16,0);
68
  return 1125300UL / avgAdc(16,4); // Calculate Vcc (in mV); 
69
  // 1125300 = 1.1*1023*1000
70
}

von Rainer W. (rawi)


Lesenswert?

Christian K. schrieb:
> -Also einfach ein Sender der dauerhaft sendet sobald er mit Strom
> versorgt wird.

Besitzt du dafür eine passende Frequenzzuteilung?
Sonst müsstest du dich dazu z.B. erstmal bei der BNA schlau machen.
In den SRD-Frequenzbändern ist z.T. der Arbeitszyklus (Sendung zu 
Sendepause) stark beschränkt und du musst jederzeit mit Störungen durch 
andere Nutzer rechnen (z.T. recht leistungsstark).
https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Frequenzen/Grundlagen/Frequenzplan/frequenzplan-node.html
https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/FunkanlagenGeringerReichweite/2018_05_SRD_pdf.pdf

Wenn du LED-Beleuchtung im Raum hast, könntest du die Information durch 
Modulation der Raumbeleuchtung übertragen.

: Bearbeitet durch User
von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

Christian K. schrieb:
> -Legales Frequenzband, möglichst klein, preiswert, Fertigmodul und
> geringer Stromverbrauch.

"Legal" kann man mit entsprechender Lizenz überall senden. Du willst 
irgendein ISM Band "missbrauchen" (zu lesen: ursprünglich war dort kein 
funkdienst angedacht, aber auch nicht verboten, darum dat man angefangen 
in diesen lizenzfreien bändern WLAN&co zu etablieren).

Allein wegen der Latenz und der komplexität würde ich das auch optisch 
machen.

Allein die prüfungen, falls du das Kommerzialisierung willst dürften 
eine optische übertragung rechtfertigen.

So ein 36/40khz Modul kostet ja quasi nichts...

73

von Christian K. (christian_knuell)


Lesenswert?

Schade, andererseits beruhigend dass ich nicht völlig zu doof war ein 
entsprechendes Fertigmodul zu finden.

Dann wird es wohl doch auf IR rauslaufen.
Ist im Maschinenumfeld zwar wegen der Verschmutzungsproblematik nicht 
optimal aber die Steuerung kann es ja erkennen wenn nach der Herausnahme 
des 3D Tasters kein gutes IR Signal ankommt.
Und der Empfänger hätte bei Montage direkt auf der Spindel auch eine 
ständige direkte Sichtverbindung.

Ein anderer Gedanke war Ultraschall.
Das hatte ich eigentlich wegen der Schallgeschwindigkeit verworfen denn 
alleine dadurch bekomme ich auf einen Meter Distanz schon 3ms Latenz.
Wenn der Empfänger allerdings auf der Spindel mitfährt hat er immer 
denselben Abstand von wenigen cm zum Sender und kann vielleicht auch bei 
wasserdichtem Einbau in ein Gehäuse die kurze Strecke überwinden.
Werde ich wohl mal ausprobieren müssen - eine verschmutzungsresistente 
Lösung wäre schon schick.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.