corsagsi16v
New member
Hallo zusammen,
ich bin seid einiger Zeit an meinem Mähroboter Projekt tätig. Anfangs bin ich auch gut voran gekommen. Der Roboter fährt, Bumper funktionieren, Ultraschallsensoren, Regensensoren Spannungssensoren auch.
Nur die Induktionsschleife bekomme ich nicht ans laufen.
Ich habe hier schon einige verschiedene Möglichkeiten ausprobiert.
Erstmal ein paar Angaben zum Projekt:
Mähroboter
- Atmega 16 - 16Mhz
- Soundsensor(wie Ardumower) mit einer Spule an ADC http://wiki.ardumower.de/images/3/3f/Perimeter_v2_receiver_circuit.png
Perimeter_Sender
- Atmega16 1Mhz(intern)
- 2 Ausgänge an Schrittmotor Modul mit L298N https://tronixlabs.com.au/news/tutorial-l298n-dual-motor-controller-module-2a-and-arduino/
- Perimeterschleife direkt an Schrittmotor Modul mit integriertem Widerstand
Laut Oszi kommt das benötigte Signal aus dem Sender heraus. Ich empfange am Analogeingang auch etwas, was ich an einem sich änderndem Messwert ablesen kann wenn die Spule in Betrieb ist.
Der Analog Eingang steht auf einem Messwert von 505 im Ruhezustand (Sender aus).
Wenn ich nun innerhalb oder außerhalb der Spule bin erhalte ich vergleichbare Ergebnisse. Ich dachte wenn ich innerhalb bin komme ich z.B. auf 600 und außerhalb z.B. auf 400, dann könnte ich ganz einfach zwischen innen und außen unterscheiden.
Jedoch ist dem nicht so, der Wert pendelt innen sowie außen eher im höheren Bereich zwischen 500 und 600.
Hier mal die Programmschnipsel des Senders:
Hier noch die Konfiguration des Timers:
Und hier die Auswertung im Mähroboter:
Wäre schön wenn mir jemand helfen könnte. Wenn ich Daten bzw. Angaben vergessen habe, gebt mir bitte kurz ne Info.
Vielen Dank vorab!
Gruß
Christian
ich bin seid einiger Zeit an meinem Mähroboter Projekt tätig. Anfangs bin ich auch gut voran gekommen. Der Roboter fährt, Bumper funktionieren, Ultraschallsensoren, Regensensoren Spannungssensoren auch.
Nur die Induktionsschleife bekomme ich nicht ans laufen.
Ich habe hier schon einige verschiedene Möglichkeiten ausprobiert.
Erstmal ein paar Angaben zum Projekt:
Mähroboter
- Atmega 16 - 16Mhz
- Soundsensor(wie Ardumower) mit einer Spule an ADC http://wiki.ardumower.de/images/3/3f/Perimeter_v2_receiver_circuit.png
Perimeter_Sender
- Atmega16 1Mhz(intern)
- 2 Ausgänge an Schrittmotor Modul mit L298N https://tronixlabs.com.au/news/tutorial-l298n-dual-motor-controller-module-2a-and-arduino/
- Perimeterschleife direkt an Schrittmotor Modul mit integriertem Widerstand
Laut Oszi kommt das benötigte Signal aus dem Sender heraus. Ich empfange am Analogeingang auch etwas, was ich an einem sich änderndem Messwert ablesen kann wenn die Spule in Betrieb ist.
Der Analog Eingang steht auf einem Messwert von 505 im Ruhezustand (Sender aus).
Wenn ich nun innerhalb oder außerhalb der Spule bin erhalte ich vergleichbare Ergebnisse. Ich dachte wenn ich innerhalb bin komme ich z.B. auf 600 und außerhalb z.B. auf 400, dann könnte ich ganz einfach zwischen innen und außen unterscheiden.
Jedoch ist dem nicht so, der Wert pendelt innen sowie außen eher im höheren Bereich zwischen 500 und 600.
Hier mal die Programmschnipsel des Senders:
Code:
int8_t sign_code[] = {1,1,2,2,1,2,1,2,2,1,2,1,1,2,2,1,2,2,1,2,2,1,1};
int sign_length = 24;
int sign_step = 0;
int main(void)
{
Initialize_timer0();
DDRD |= (1<<PD1); // Pin PD1 an Port D als Ausgang
DDRD |= (1<<PD2); // Pin PD2 an Port D als Ausgang
signal = signalstart;
sei();
while (1)
{
}
}
ISR (TIMER0_COMP_vect)
{
if (caseswitch <= caseswitch_end)
{
caseswitch++;
}
else
{
if (sign_step < sign_length)
{
signal = sign_code[sign_step];
sign_step++;
}
else
{
sign_step = 0;
signal = sign_code[sign_step];
}
caseswitch = 2; // Standard = 0 für zusätzlichen prescaler bzw. impulsbreite
}
switch(signal)
{
case 0:
PORTD &= ~(1<<PD1);
break;
case 1:
PORTD |= (1<<PD1);
PORTD |= (1<<PD2);
break;
case 2:
PORTD |= (1<<PD1);
PORTD &= ~(1<<PD2);
break;
default:
break;
}
}
Hier noch die Konfiguration des Timers:
Code:
void Initialize_timer0()
{
OCR0 = 5;// 5ms
TCCR0 |= (1 << CS00)|(1<<CS02); ; //1024 prescaling
TCCR0 |= (1<<WGM01);
TIMSK |= (1 << OCIE0); //Timer overflow interrupt enable
}
Und hier die Auswertung im Mähroboter:
Code:
void Perimeter_Abfrage_compare_inside_outside()
{
if (Perimeter_gestartet<1)
{
A0 = 505; //Ausgangswert der Sensor 1 (ohne Impuls)
Max = 550; //oberer Grenzwert Sensor1
Min = 450; //- Grenzwert; //unterer Grenzwert Sensor1
Perimeter_gestartet++;
}
// In Code 112212122121122122122112
// Ex Code 221121211212211211211221
if (Signal_value<50)
{
if (Signal_In==1)
{
if (S0<Min)
{
Signal_Receive[Signal_value] = 2;
Signal_In = 2;
Signal_value++;
}
}
else if (Signal_In==2)
{
if (S0>Max)
{
Signal_Receive[Signal_value] = 1;
Signal_In = 1;
Signal_value++;
}
}
}
if (Signal_value>=50)
{
for (j=0;j<16;j++) // hier ist 16 die Länge empfangenes (50 Zeichen) - erwartetem Signal (24 Zeichen)
{
for(i=0;i<24;i++) // hier ist 24 die Länge des erwarteten Signals
{
Signalcorr[j] += Signal_Receive[i+j]*sign_code[i];
}
}
// Minium 48
// Maximum 63
for(i=0;i<16;i++) // Länge des Korrelations Arrays (16 Zeichen)
{
if (Signalcorr[i]>Signal_Max) Signal_Max = Signalcorr[i];
if (Signalcorr[i]<Signal_Min) Signal_Min = Signalcorr[i];
Auswertung = 1;
}
if (Signal_Max >= 63) Perimeter=1;
if (Signal_Min <= 48) Perimeter=0;
if (Auswertung == 1)
{
Signal_value = 0; // Signal auffangen wiederholen.
Auswertung = 0;
}
}
Wäre schön wenn mir jemand helfen könnte. Wenn ich Daten bzw. Angaben vergessen habe, gebt mir bitte kurz ne Info.
Vielen Dank vorab!
Gruß
Christian