Entwicklung der Schleifen Sensoren (Signalstärkenauswertung)

Habe jetzt beim zusammentragen für http://www.rasenroboter-wiki.at/Rasenroboter_Projekte nochmal gesehen, dass robi2mow einen Empfängerschlaltung für das Ambrogio-Sinus entworfen hat.
Das gilt als zuverlässig auch über längere Distanzen. Warum nimmt man nicht diese Technik?

(zuletzt war der nachbau der Empfängertechnik doch eher China-Rechteck, oder?)

danke und gruss,
ozett
 
ozett schrieb:
Habe jetzt beim zusammentragen für http://www.rasenroboter-wiki.at/Rasenroboter_Projekte nochmal gesehen, dass robi2mow einen Empfängerschlaltung für das Ambrogio-Sinus entworfen hat. Das gilt als zuverlässig auch über längere Distanzen. Warum nimmt man nicht diese Technik?

(zuletzt war der nachbau der Empfängertechnik doch eher China-Rechteck, oder?)

danke und gruss,
ozett

Ja, mein derzeitiger Aufbau ist sogar schlimmer: Spikes (also nur kurze Pulse). Und ich stelle gerade fest, dass meine Antriebsmotoren bei mir ebenfalls Spikes in der Spule erzeugen. Auch wenn ich die Motoren entstöre , bekomme ich die zufälligen Spikes nicht weg. Die Schaltungsvariante mit Spikes ist für mich derzeit also nicht besonders brauchbar. Mein zweiter Versuch wäre dann die von Dir genannte Sinus-Variante.
 
Zuletzt bearbeitet von einem Moderator:
die anzahl der bauteile für den sinus-empfänger ist überschaubar.
ein fertiger sender wäre (finde ich) nicht 'übertrieben' teuer. kann 3 unterschiedliche frequenzen.
beim selbstbau eröffnet das die möglichkeiten, schleifen auf unterschiedlicher frequenz "automatisch" zu aktivieren, um z.bsp. Fahrwege/Suchwege zu steuern.
und die länge der schleife mit sinus scheint auch ok.

ich würde hier einsteigen und helfen, aber meine elektronikkenntnisse sind leider begrenzt ...
ich könnte ggfs. nachbauen und bestimme konstellationen testen ... also, wenn es soweit ist....
 
ozett schrieb:

Ja, es kommt Hoffnung auf :) Und das nicht nur für den Sinus.

Hatte mir um Störungen vorher keinen Kopf gemacht - Motoren und Umwelt sind aber voller Störungen. In so einer Umgebung nur Spikes zu detektieren (ohne Frequenzerkennung) macht kaum Sinn. Man muss also die Trägerfrequenz erkennen. Dann kann man auch mehrere Schleifen verlegen und mit Störungen Leben.

Mein neuer Ansatz (Prototyp):
1. Man braucht ein Wechselsignal. Ob Sinus oder Rechteck oder auch kurze Pulse ist eigentlich egal. Wichtig ist, dass das Signal mit einer bestimmten Frequenz daherkommt. Ich erzeuge derzeit ein Rechteck-Signal mit dem Arduino und einer kleinen Verstärkerschaltung. Die Frequenz kann ich beliebig einstellen.

2. Man braucht eine Schaltung welche das empfangene Signal verstärkt. Alle im Netz gezeigten Schaltungen mit OPV sind dazu in der Lage. Es spielt also fast keine Rolle welche Schaltung man nimmt, es muss eigentlich nur das verstärkte Wechselsignal herauskommen (0-5V).

3. Neu: Aus dem Mix an Wechselsignalen (Motor, Umwelt, Schleife) muss man nun das richtige herausfiltern. Dazu schicke ich das verstärkte Wechselsignal in einen Arduino Nano (ADC) welcher die Filterung durchführt (FFT Code). Probiert habe ich diesen Code hier gefunden) und es funktioniert (s. Anhang). In dem Frequenz-Graph sieht man sehr schön die tiefere Frequenz mit der die Motoren laufen (links) und die etwas höhere Frequenz(weiter rechts) dann meine Schleifenfrequenz. Der einzige Nachteil dieses Ansatzes ist, ich kann keine Phasenverschiebung auswerten (also das Signal im Zeitverhalten untersuchen). Ich denke mir reicht aber die Signalstärke für ein bestimmtes Frequenzband (wie in diesem Beispiel).

UPDATE: Der FFT-Algo soll angeblich auch die Phase auswerten (also zeitliche "Verschiebung" des Signals), ich muss es nur noch anzeigen lassen - Mit anderen Worten der FFT würde uns beides liefern, Frequenz und Phase ... Wenn das klappt, kann man sogar mit dem FFT feststellen, ob man die Induktionsschleife überfahren hat. Das wäre ja nicht schlecht. Fazit: es würde ein x-beliebiger Verstärker (OPV) und ein Arduino Nano zur Auswertung (Frequenz+Phase) reichen...

receiver_fft.jpg

Attachment: https://forum.ardumower.de/data/media/kunena/attachments/905/receiver_fft.jpg/
 
Zuletzt bearbeitet von einem Moderator:
Sobald die Hardware feststeht wird bestellt, ich fummel zur Zeit immer noch wegen BT Modul rum.
Zum Glück wird es die nächste Zeit wieder ruhiger dann bleibt wieder mehr Zeit für hier über.
 
Hallo zusammen!

Zur zeit habe ich die Spike- Methode vom rn-wissen und bei dieser Methode hat man eben Probleme mit den Motoren, Erdkabel,...
Deshalb wäre ich an der Sinus Verson interresiert. Alerdings würde ich auf jedem Fall auf Einzelplatinen setzen um Flexibel zu bleiben.
Nachdem jeder in einer anderen Sprache (C, Bascom, Arduino, Assambler,...) programmiert würde ich die Auswertung auf einem eigenen Mikrocontroller der ein "einfaches" Signal" ausgibt auslagern.
So kann man dass fertige "Schleifen-Modul" leicht auch in anderen Selbstbau Robotern integrieren. Denn je universeller es aufgebaut ist, umso größere Stückzahlen sind möglich, was bedeutet das es Günstiger herzustellen ist.
Ich finde es auch besser denn Microcontroller direkt auf der Platine zu haben und nicht wieder so ein "teures" Arduino Modul wo man das meiste dann eh nicht verwendet.

Ich habe es schon ins rn geschreiben: Klick
Wenn jemand einen Schaltplan (Eagle) hat kann ich beim Layout / Platine helfen. Ich kann Platinen mit Leiterbahnbreiten von 0,2mm Ätzen und Im Reflow-Pizza Ofen bestücken.
Wäre bereit die Arbeit von Layout bis zur Fertigen Platine zu übernehmen. Sofern jemand so etwas entwickelt. Alles was irgendwie in den Bereich Funk fällt habe ich leider keine Ahnung.


Mfg
mc19dg
 
Hallo MC19 (von Graupner? ;) )
Willkommen und keine Angst, hier wird keiner gefragt ob er "besser als ein ganzes Team von Entwicklungsingenieuren ?" ist. :whistle:
Das mit den Platinen "backen" wäre eine tolle Sache.
Für die Leute ohne große Bastler Fähigkeiten wäre eine fertige Sensor Platine sicher toll.
Das Sensor Thema ist zur Zeit auch der große Knackpunkt.
Welche Methode, Funktionen, Hardware ...
Die anderen Themen sind erst mal durch/erledigt, wenn wir fertig werden, wäre das schlimmste geschafft .

PS Womit fliegst Du zur Zeit? Quadcopter?
 
Hallo MC19 (von Graupner? ;) )
hey du bist der erste der da drauf kommt! B) war meine erste Fernsteuerung.
Fliege hier . Hauptsächlich Nachtflug. Fliege von Fläche über Hubi bis zum Quad alles was Spass macht.

ende Offtopic

Einseitige Platinen sind überhaupt kein Thema. Bei doppel Layer steigt der Arbeitsaufwand bei jeder Durchkontaktierung erheblich, sollte aber wenn es anders nicht geht auch kein Problem darstellen. Ich habe den Vorteil das das Material für eine Eurokarte vielleicht 3-4€ kostet.

Ich würde in Richtung Sinus tendieren, es ist zwar mehr Aufwand aber wenn es Funktioniert müsste es unempfindlicher als die Spike-Methode sein.
Vieleiche kann robi2mow ein paar Takte dazu schreiben. Der hat ja schon teils recht ausgereifte Schaltungsansätze.
 
Hi

bin mir nicht ganz sicher ob und wie das hier rein passt??

Aber da ich noch extremer Leihe bin und mich erst seit 2 Wochen mit dem Arduino beschäftige, habe ich jetzt das Problem das ich gerne eine stop Funktion in den Sketch einbauen möchte.

Ich würde gerne Pin 4 als digital INPUT nehmen und wenn der auf High geht die pause aktivieren, ist er auf LOW geht der Sketch weiter oder startet neu das ist egal.


/*
HC-SR04 Ping distance sensor]
VCC to arduino 5v GND to arduino GND
Echo to Arduino pin 13 Trig to Arduino pin 12
Red POS to Arduino pin 11
Green POS to Arduino pin 10
560 ohm resistor to both LED NEG and GRD power rail
More info at: http://goo.gl/kJ8Gl Original code improvements to the Ping sketch sourced from Trollmaker.com
Some code and wiring inspired by http://en.wikiversity.org/wiki/User:Dstaub/robotcar */
#define trigPin 10
#define echoPin 9
#define trigPin1 8
#define echoPin1 7
#define led1 13
#define led2 12
#define relay1 5
#define relay2 6




void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);

}

void loop() {
long duration1, distance1;
digitalWrite(trigPin1, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin1, HIGH);
// delayMicroseconds(1000); - Removed this line
delayMicroseconds(10); // Added this line
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = (duration1/2) / 29.1;
if (distance1 < 100) { // This is where the LED On/Off happens
digitalWrite(led1,HIGH); // When the Red condition is met, the Green LED should turn off
digitalWrite(relay2,LOW);
}
else {
digitalWrite(led1,LOW);
digitalWrite(relay2,HIGH);
}
if (distance1 >= 200 || distance1 = 200 || distance
 
Hendrik schrieb:
Hi

bin mir nicht ganz sicher ob und wie das hier rein passt??

Aber da ich noch extremer Leihe bin und mich erst seit 2 Wochen mit dem Arduino beschäftige, habe ich jetzt das Problem das ich gerne eine stop Funktion in den Sketch einbauen möchte.

Ich würde gerne Pin 4 als digital INPUT nehmen und wenn der auf High geht die pause aktivieren, ist er auf LOW geht der Sketch weiter oder startet neu das ist egal.

Falls Du mit PAUSE die Hauptprogrammlogik (loop) meinst, könntest Du es so lösen:


Code:
#define pausePin 4

void setup(){
 // Pin4 für Digital Input konfigurieren
 pinMode(pausePin, INPUT);
}

void loop(){
  if (digitalRead(pausePin) == LOW) {
    // Pause-Pin ist Low => keine Pause
    ... bisherige Programmlogik ...
  } else {
    // Pause-Pin ist High => Pause
    delay(200);
  }
}
 
Zuletzt bearbeitet von einem Moderator:
Also verstehe ich das richtig ??

if (digitalRead(pausePin) == LOW) {


bremst mein Sketch sobald der pin 4 auf HIGH geht und wenn er auf LOW ist läuft der Sketch.

Und mehr nicht ???

oder muss ich das hinter // noch rein schreiben, ich dachte die Texte hinter // sind nur hinweise oder lieg ich da falsch ???


Mfg Hendrik


Edit: Ich habe es mit If verstanden nur reagiert der Sketch etwas lahm, wo muss ich das else mit dem delay setzen ganz nach hinten ??
 
Hendrik schrieb:
Also verstehe ich das richtig ??

Edit: Ich habe es mit If verstanden nur reagiert der Sketch etwas lahm, wo muss ich das else mit dem delay setzen ganz nach hinten ??

Dann den else-Zweig einfach leer lassen (bzw. ganz weglassen).

Das ganze nennt sich "Kontrollstruktur". Es schadet auch nicht, wenn man sich ein wenig mit der Theorie vertraut macht :)
http://www.rn-wissen.de/index.php/Arduino_Tutorial
 
Zuletzt bearbeitet von einem Moderator:
Ja sorry hab es jetzt geschafft Danke.

Bin ja schon am lernen habe das Buch von Massimo da und lese fleißig aber manche sachen verstehe ich mancmal nur wenn ich es in der Praxis teste.


Mfg Hendrik
 
Für die Experimentierstufe mit dem Generator:

Ein Generator mit dem Sound-Ausgang eines Handys. Vielleicht interessant?

http://www.edn.com/electronics-blogs/embedded-basics/4416138/Turn-a-Smart-Phone-into-a-Signal-Generator
 
@Hendrik
welche Sensoren sind denn das genau, haste mal nen Link oder Typ bezeichnung?

@ozett Link geht nicht :(
 
Das sind die HC-SR04 , die habe nur einen Bereich von 15 grad.
Ich werde das noch mal testen mit anderen Positionen für die Sensoren.
 
http://www.edn.com/electronics-blogs/embedded-basics/4416138/Turn-a-Smart-Phone-into-a-Signal-Generator

(im firefox war erst werbung, schien nicht zu laufen. dann beim refreshen der URL gings doch .. hmmm)

also auch mal als pdf anbei. ansonsten kommt man über die suche von "Turn-a-Smart-Phone-into-a-Signal-Generator" bei www.edn.com auch dahin
Turn-a-Smart-Phone-into-a-Signal-Generator.pdf



www_edn_com_electronics_blogs_embedded_basics_4416138_Turn_a.pdf

Attachment: https://forum.ardumower.de/data/med...rn-a-Smart-Phone-into-a-Signal-Generator.pdf/
 
Zuletzt bearbeitet von einem Moderator:
ich habe jetzt alle Sensoren vorne als reihe angeordnet, jetzt klappt das ganz gut mit der Hindernis Erkennung.

Ich habe jetzt die Distanz, ab der der Mäher wenden soll, auf 20 cm eingestellt.
Leider ist mein Rasen recht hoch und die Sensoren sind so empfindlich das sie sogar einen einzelnen Grashalm als Hindernis Erkennen.
Kann man dies noch in der Programierung ändern ???
Hier mal den recht groben und zusammengewürfelten Sketch



#define trigPin1 10
#define echoPin1 9
#define trigPin2 8
#define echoPin2 7
#define trigPin3 4
#define echoPin3 3
#define trigPin4 6
#define echoPin4 5
#define relay1 13
#define relay2 12
#define relay3 11
#define relay4 2
int IRpin = 1;



void setup() {
Serial.begin (9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(trigPin4, OUTPUT);
pinMode(echoPin4, INPUT);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);


}

void loop() {
float volts = analogRead(IRpin)*0.0048828125; // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3
float distance = 30*pow(volts, -1.10); // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk
if (distance > 30) {



long duration1, distance1;
digitalWrite(trigPin1, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin1, HIGH);
// delayMicroseconds(1000); - Removed this line
delayMicroseconds(10); // Added this line
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = (duration1/2) / 29.1;
if (distance1 < 20) { // This is where the LED On/Off happens
digitalWrite(relay1,LOW); // When the Red condition is met, the Green LED should turn off

}
else {
digitalWrite(relay1,HIGH);

}
if (distance1 >= 200 || distance1 = 200 || distance2 = 200 || distance3 = 200 || distance4
 
Oben