Super Simple Sound Doppler Peiler

Hardware en software.
Bericht
Auteur
Gebruikersavatar
PA3DJS
Berichten: 2493
Lid geworden op: 04 mei 2014, 16:41
Roepletters: PA3DJS
Locatie: Maarssen
Contacteer:

Re: Super Simple Sound Doppler Peiler

#751 Bericht door PA3DJS »

Goos schreef:Vooral in het H vlak heeft een HB9CV een nogal grote openingshoek.

Waarom niet gelijk 2 antennes naast elkaar ?
2 uitgangen maken , een som en een verschil.
Dit geeft een veel scherper en nauwkeuriger resultaat , wordt ook prof. gedaan.
Het kan met 1 ontvanger , maar je moet dan wel schakelen . 2 ontvangers is mooier.

ik kon zo gauw geen beter voorbeeld vinden maar dit lijkt er wat op , de logper's staan schuin naar elkaar toe om de afstand konstant te houden. Voor 2 elements antennes gewoon parallel.
https://www.researchgate.net/figure/Dir ... _289779492

Eeh ja 2 gelijke antennes en de nauwkeurige som verschil schakeling is het lastigste.

Goos
Dit doet mij denken aan monopulse RARAR. Indien het geval, dan is er veel info over te vinden.

Goos
Berichten: 338
Lid geworden op: 16 nov 2011, 20:45
Roepletters: pa0sir

Re: Super Simple Sound Doppler Peiler

#752 Bericht door Goos »

@PA3DJS

Ja klopt techniek wordt in radar en ook anti-radar gebruikt ( 4 x logper in de neuskegel van een radarzoekendprojectiel)
Maar in dit geval zit er een motor onder om het antenne diagram te "tekenen" en aangezien dit erg breed is de resolutie niet erg hoog echter door gelijk de sigma en de delta te "tekenen" heb je een enorme goede resolutie.
In Krefeld bij de BNA staat/stond een dergelijke opstelling.

Ik moet nog ergens iets hebben over het tracken van dieren maar dan werden er 2 ontvangers gebruikt en de tangens van de outputs gebruikt voor correctie op de richting van de antenne. Op de tangens werd nog een correctie toegepast omdat het 3 elements beampjes waren. Antenne richting was handmatig.
Bij interesse zal ik het eens opzoeken.

Goos
Peilen is het omgekeerde van een antennediagram opmeten.
pa0sir

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: Super Simple Sound Doppler Peiler

#753 Bericht door Dopp »

Hallo Allemaal,


Radio Direction Finding Equipment KerberosSDR Coherent 4 x RTL SDR RDF Setup
https://youtu.be/n5aWrz-42qc
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
pa8w
Berichten: 946
Lid geworden op: 22 dec 2011, 21:30
Roepletters: PA8W
Locatie: Beuningen
Contacteer:

Re: Super Simple Sound Doppler Peiler

#754 Bericht door pa8w »

Dopp schreef:Hallo Allemaal,

Radio Direction Finding Equipment KerberosSDR Coherent 4 x RTL SDR RDF Setup
https://youtu.be/n5aWrz-42qc
Alle respect voor de mensen die dit systeem en de software hebben gemaakt hoor: Ik zou het niet kunnen...
Maar tegelijkertijd moet ik met verbazing vaststellen dat ik zelden zo een knullige performance van een peilsysteem heb gezien:
Traag, vaak zeer grote afwijkingen. Geen mogelijkheid om de betrouwbaarheid van een peiling te zien (of heb ik wat gemist?).

Of zijn er ergens betere demo's te vinden?

Groet,
Wil.
Let op: website verhuisd naar: http://www.paluidsprekers.nl/pa8w/index.html

Goos
Berichten: 338
Lid geworden op: 16 nov 2011, 20:45
Roepletters: pa0sir

Re: Super Simple Sound Doppler Peiler

#755 Bericht door Goos »

Helemaal mee eens Wil.
In theorie moet het beter en sneller werken dan een eenkanaals doppler , omdat je continue de faseverschillen kunt meten, heeft ook geen last te hebben van modulatie. Ook breedband FM is dan geen probleem.

Het lijkt er op dat de ontvangers vanuit zichzelf fase-coherent zijn dit maakt het lastig om er snel mee te werken.

Ik vraag me ook af waarom je MUSIC zou moeten gebruiken , Dit is een vrij bewerkelijke methode , wordt gebruikt wordt om meerdere signalen ( niet gecorreleerd ) op dezelfde frequentie zitten en afzonderlijk te peilen, maar dan moet je het ook anders presenteren.
Had het bordje al wel eens ergens gezien , maar ik had er meer van verwacht , kan misschien wel meer , maar had eigenlijk als lapmiddel een soort van autocal. moeten hebben. Dit is veel te omslachtig.

Goos
Peilen is het omgekeerde van een antennediagram opmeten.
pa0sir

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: Super Simple Sound Doppler Peiler

#756 Bericht door Dopp »

Hallo Allemaal,


Nu close up foto hoe 32 mm PVC te verwbinden met ruitenwisser motor.

En mijn blauwe simpele bedien kastje met schaaltje graden + slow fast switch.

Jammer dat het VU metertje logaritmisch is oid schaaltje in ingedrongen aan einde van schaal.


Gewoon met de gaten zaag 5 cm rondje gedaan en 2.5 cm rondje onder Grijze PVC afsluitdop

Dus geen duur gereedschap nodig dus...

Toplager is gewoon stukje 40 mm PVC pijp.


Nog een leuk detail:

De 16 reed contactjes met magneetje maakten sluiting
bij 337-0 graden

Dus heb ik een extra weerstand geplaats 100 Ohm in serie met voeding
reed contact weerstanden array.
Bijlagen
circuit1.jpg
circuit1.jpg (31.43 KiB) 8686 keer bekeken
Wiper2PVC32mm.png
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: Super Simple Sound Doppler Peiler

#757 Bericht door Dopp »

Hallo Allemaal,

Alvast een plaatje van de nieuwe functie in SoundDoppler 1.56
wat betreft Manual send button...

Routines werken veel beter nu
Bovendien een help pagina zodat je kunt zien
waar de Peiling naar toe opgestuurd worden...


Ik zal de zip file ook hier uploaden

Gewoon deze Sounddoppler.exe overschrijven
op de plaats waar de oude stond...

Oude kun je hier downloaden
https://a43.veron.nl/projecten/doppler- ... inder-rdf/

Have Fun !!!

PA3BNX
Bijlagen
SoundDopplerManualSend.png
SoundDoppler156.zip
(725.73 KiB) 300 keer gedownload
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: Super Simple Sound Doppler Peiler

#758 Bericht door Dopp »

Hallo Allemaal

Omdat ik geen programma in mijn bezit heb
wat snel even kan verdelen in segmenten heb
ik vandaag effetjes een programmaatje in vb6 gemaakt
om snel circel met verdelingen te maker
bedoeld voor boren gaatjes in circel reedcontactjes
of evt ledjes voor pelorus o.i.d.


Je kunt gewoon copieeren naar clipboard met alt+printsceen

En dan plakken in bv paint.exe van windows en daarna printen op
papier en dan dat papiertje plakken op te boren werkstuk

Have fun...
Bijlagen
CircleSegmentsExample.png
CircleSegment.zip
(74.99 KiB) 261 keer gedownload
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Goos
Berichten: 338
Lid geworden op: 16 nov 2011, 20:45
Roepletters: pa0sir

Re: Super Simple Sound Doppler Peiler

#759 Bericht door Goos »

Ik doe dit altijd met Excel of Open-office
Grafiektype Radar.
Binnen de minuut klaar. Printen duurt het langst.

Goos
Peilen is het omgekeerde van een antennediagram opmeten.
pa0sir

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: Super Simple Sound Doppler Peiler

#760 Bericht door Dopp »

Hallo Allemaal

Ik heb ondertussen weer een kast gemaakt voor Foxcopter3 hi
(De ruitenwisser motor die hier al op het forum staat)


Een stuk kleiner dan Foxcopter2 (c.a. de helft)


Is ook al grijs geverfd en nu wachten tot dat het droog is en dan de ruiten-
wisser motor e.t.c. monteren..

Moet nog wel op reed contactjes jacht...


Groeten,
Allemaal
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: Super Simple Sound Doppler Peiler

#761 Bericht door Dopp »

Hallo Allemaal,


Alvast een fotooke van de 3 Foxcopters in aan bouw hi..
Bijlagen
3xFoxcopterNow.png
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: Super Simple Sound Doppler Peiler

#762 Bericht door Dopp »

Hallo Allemaal,


Na nog is nagedacht te hebben over de uitlezing van een foxcopter2/3 midden
op het dak van een auto waar ik nu dus een rotory encoder met reed contactjes
en een magneetje en ruitenwissermotor voor gebruik en voor de uitlezing (protractor ?)
Nokia lcd5110 screen + arduino-nano of gewoon met een simpel VU metertje.
Kan het ook anders....

In Indonesie (Mobile ARDF @ JARF2017 part1)
https://youtu.be/hEMPLkzPqGk

zie je gewoon een mast gemonteerd aan voor bumper zodat je de
contraptie draaibare antenne gewoon kunt zien.

Maar toen dacht ik zou je niet een spiegel kunnen gebruiken om gewoon door de
voorruit de antenne en richting te kunnen gadeslaan.

Die spiegel moet dan worden gemonteerd aan en op de moterkap midden voor o.i.d. ?

Toen kwam ik op het idee waarom geen camera en monitor te gebruiken hi.

Dat spul is immers tegenwoordig ook cheap...

Maar een (buiten) spiegel + montage lijkt mij het simpelste....
Door de vooruit kijken om te zien welke kant de antenne op staat.

De draaibare antenne kan dan misschien ook een oude accu boormachine zijn
met een pijpje en montage natuurlijk op dak auto.


Ook kreeg ik het idee om een beugel te maken aan foxcoptermast waar een complete
80 meter vossenjacht receiver + ferriet en sens in zit aan de draai mast te monteren
en dan het koptelefoon snoertje naat beneden en binnen te voeren i.p.v. weer
een nieuwe 80 meter loop of ferrit en sense antenne te bouwen.

Nog een gedachten kronkel:

De camera monteren op de draaibare mast zodat je kunt zien welke kant de kamera uitkijkt hi


Nou weer genoeg gedachten kronkels hi.


73's

PA3BNX
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: Super Simple Sound Doppler Peiler

#763 Bericht door Dopp »

Hallo Allemaal,


Hierbij alvast een plaatje van de 24 reedcontact hoek uitlezer

zoals ik die nu heb in Foxcopter3 met wiper motor...
Bijlagen
Foxcopter3Contacts.png
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: Super Simple Sound Doppler Peiler

#764 Bericht door Dopp »

Hallo Allemaal,

Alvast een voorproefje van de Arduino bestuuring software

voor Foxcopter 2 en 3 met wiper motor en reed contactjes.

Nokia LCD5110
Dubbele relais print maak breek voor CW, CCW en stop

4 push buttons + adjust potmeter

Not all ready yet.

Code: Selecteer alles

 
/* FoxCopter2
   Easy to use standalone antenna rotator with wiper moter for foxhunting with a car  
   Not all working and tested yet!
   Hardware:
   2x Relais print wiper-motor
   16 reedcontacts angle readout
   nokia LCD5110
   4 x push button + adjust potmeter
      
   26-03-2019
   08-04-2019
   25-04-2019
   26-04-2019
   28-04-2019
   29-04-2019
   30-04-2018
   02-05-2019
   ((C))PA3BNX 
   L.J.W. Baars
*/

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); 

//String
const String Version("Foxcopter2 V1.00");
const String strStop="Stopped";
const String strNormal="Normal ??";
const String strAdjust="Adjust";
const String strSwing="Swing ### ?? $$$";//Shuttle Swing Commute Pendelen 

const String strMenuNormalAdjustSectorX1X2="MenuNormalAdjustSwingOrX1X2";
const String strMenuSwingValues="MenuSwingValues";


//Float
const float AnalogFactor = 360.0/1023.0;  //   (360 / 1023)
const float AnalogFactor2 = 15.0/360.0; 
const float rad =PI/180 ; //0.017453292

//Integer
int x1=0;  //Start Swing turning
int x2=360;//Stop Swing turning
int xcenter;//center between x1 and x2
  
const int xc = (display.width()/2)-1;//Is it here already initialised ?
const int yc = (display.height()/2)-1;

const int cNoDegrees = 999;
const int yL = display.height() -9; //DrawBottomTextLinePosition 37
 

//Bytes
byte mode; //Can be all mode... values

//All pin used Arduino Nano
const byte cPinMotor1=9;
const byte cPinMotor2=10;

const byte cPinReedContacts=A0;
const byte cPinAdjust=A1;
const byte cPinPush1=A2;
const byte cPinPush2=A3;
const byte cPinPush3=A4;
const byte cPinPush4=A5;


//Some const for easy programming
//Modus  in witch mode is the software now
const byte modeStop=0;
const byte modeNormal=1;
const byte modeAdjust=2;
const byte modeSwingToRange=3;
const byte modeSwing=4;
const byte modeMenuNormalAdjustSectorOrX1X2=5;

//Motor immediate CMD's
const byte btnStop=0;
const byte btnCW=1;
const byte btnCCW=2;  
const byte btnMenu=3;


//---------------------Fuctions-----------------------------

void ShowSerialInfo()
//Serial port Info About Pins Used 
{
Serial.println(Version);
Serial.print("MotorPins");Serial.print(cPinMotor1) ;Serial.print(",");Serial.println(cPinMotor2);
Serial.println("AnalogPins");
}

int LimitDegrees360(int d)
//Degrees only from 0 to 359
{
  //Limit degrees 0 to 360 here
   int x;
   x = d%360;
   if (x<0)
   {
    x+=360;  
   }
   return x;
 }//End LimitDegrees360

void SwapX1X2forSmallestSwing()
 //ToDo Swap x1,x2
{
 if (x1 < 90 && x2 > 270 && x1 !=0)    
 {
  int x;
  x=x2;
  x2=x1;
  x1=x;
 }
}//End SwapX1X2forSamallestSwing


void FindCenterX1X2()
//ToDo find center X1 X2 for Swing
{
 if (x2 > x1) 
  {
   xcenter = (x1+x2)/2;
  }
   else if (x1 > x2)
  {
   xcenter = LimitDegrees360(x1 + x2 + 360)/2;
  }
}//End FindCenter
 

String Format3Degrees(int d)
//ToDo make always 3 digits
{
  String str;
  int digits[3];
  int reminder;  
  digits[0]=d/100;
  reminder=d%100;
  digits[1]=reminder/10;
  reminder=reminder%10;
  digits[2]=reminder;
  //str+='%';
  str+=digits[0]; 
  str+=digits[1];
  str+=digits[2];
  return str;
} //End Format3Degrees 

int Analog2Degrees(int a)
{
 return int(AnalogFactor * float(a));
}//End Analog2Degrees

int Degrees2Contacts(int d)
{
  return  int( AnalogFactor2 * float(LimitDegrees360(d))) ;
}//End Degrees2Contacts

byte GetBtnPressed(int oldbtn)
//Get witch button is pressed Argument = btnOld
{
 //ToDo check if a button is pressed and key logic
 //If nothing Pressed return oldBtn
 byte b=oldbtn; //Keep last value if nothing pressed
 
  
 for (byte i;i<10;i++)
 {
  if (digitalRead(cPinPush1)==LOW){b= btnStop ;}
  if (digitalRead(cPinPush2)==LOW){b= btnCW ;}
  if (digitalRead(cPinPush3)==LOW){b= btnCCW ;}
  if (digitalRead(cPinPush4)==LOW){b= btnMenu ;}
  delay(10);
 }
 return b;

}//End GetBtnPressed

byte Motor(byte btnPressed)
//MotorRelais Cmd's  Returns last turning direction  
{
 //ToDo motor cmd's Stop, CW and CCW and return last TurnDirection RL
bool a; 
bool b;


static byte RL; 
switch(btnPressed){
  case btnStop:
   a=false;
   b=false;
   break;
  case btnCW:
   RL=1;
   a=true;
   b=false;
   break;
  case btnCCW:
   RL=2;
   a=false;
   b=true;
   break;
  case btnMenu: //Always stop motor
   a=false;
   b=false;
   break;
  default:
   RL=0;
   a=true;
   b=true;
   break;
}

digitalWrite(cPinMotor1,a);
digitalWrite(cPinMotor2,b);

return RL;


}//End Motor

bool ReadToPointPotmeter(int d, int a )
//See if RotorDegrees = AdjustDegrees 
{
 //ToDo return true if potmeter   AdjustDegrees is RotorDegrees
 //Analog to degrees
 d=Analog2Degrees(d);
 a=Analog2Degrees(a);

 d=Degrees2Contacts(d);
 a=Degrees2Contacts(a);
 
 //Change degrees in 16 steps

 //Check to see if reached in 16 steps
 if (a == d)
 { 
  return true;
 }
  
}//End ReadPointPotmeter

void DrawPelorus(int d)
//Draw Pelorus Arrow + Degrees Text 06-07-2018
{
//Float
//const float rad =PI/180 ; //0.017453292
float q;

//Int
static int OldDegrees = cNoDegrees;

//Integer
int r = yc-2;
int s,ss;

byte y;

 //Draw ArrowLine
 q  = (d-90) * rad; 
 s  = xc + int(cos(q) * r);
 ss = yc + int(sin(q) * r);
  
 display.drawLine(xc,yc,s,ss,BLACK);

//Nothing ToDo
if (OldDegrees==d)
{
  return;
}

display.clearDisplay();
display.drawCircle(xc,yc,yc,BLACK);//Rim of circle

if (d==cNoDegrees) 
{
 //Draw Just CenterDot
 display.fillCircle(xc,yc,2,BLACK);  
}
else
{
 //Draw Just ArrowLine
 display.drawLine(xc,yc,s,ss,BLACK);

 //Draw Just Text Degrees Print
 if (d > 270 || d < 90) 
 {
  y=yc+3;
 }
 else
 {
  y=yc-10;
 }
 display.setTextSize(1);
 display.setCursor(xc-9,y);
 display.println(Format3Degrees(d));
}
 display.display();
 OldDegrees=d;//Backup now
 Serial.println(d); 
}//End DrawPelorus
void DrawOnlyGotoPoint(int d)
//Draw turntopoint arrow  from adjustpotmeter 25-04-2019
{
//int xc = display.width()/2 -1;
//int yc = display.height()/2-1;
int rs = yc -2;//Begin Radius
int r = yc + 2;//End Radius
int xs,ys;
int s,ss;
float q;

if (mode == modeAdjust)
 {
  //Draw ShortEndArrowLine
  q  = (d-90) * rad; 

  xs = xc + int(cos(q) * rs);
  ys = yc + int(sin(q) * rs);
  s  = xc + int(cos(q) * r);
  ss = yc + int(sin(q) * r);
  
  display.drawLine(xs,ys,s,ss,BLACK);
 }
}//End DrawOnlyGotoPoint

void DrawText(byte RL)
//Draw Text and/or do MenuSettings
{
/*
Value
const byte modeStop=0;
const byte modeNormal=1;
const byte modeAdjust=2;
const bytemodeSwing=3;
const byte modeMenuNormalAdjustSectorOrX1X2=4;

String
const String Version("Foxcopter2 V1.00");
const String strStop="Stopped";
const String strNormal="Normal ##";
const String strAdjust="Adjust";
const String strSwing="Swing ### ?? $$$";

const String strMenuNormalAdjustSector="MenuNormalOrSector";
const String strMenuSwingValues="MenuSectorValues ## ?? $$";
*/

 String myval;
 bool bFlag;

switch (mode){
  case modeStop:
   myval= strStop;
  bFlag=true;
   break;
  case modeNormal:
   //here it can be Nothing, CW or CCW  
   myval=strNormal;
   
   if (RL==0)
    {
     //myval.replace("??","??");
    }
   else if (RL==1)
   { 
    myval.replace("??",">>");
   }
    else if (RL==2) 
   {
    myval.replace("??","<<");
   }
  bFlag=true;
   break;
  case modeAdjust:
   myval=strAdjust;
  bFlag=true;
   break;
  case modeSwing:
   myval=strSwing;
   myval.replace("###", Format3Degrees(x1)); //Show Swing range
   if (RL==1){
   myval.replace("??",">>");}
   else if (RL==2){
   myval.replace("??","<<");}
   myval.replace("$$$",Format3Degrees(x2));
  bFlag=true;
   break;
  case modeMenuNormalAdjustSectorOrX1X2:
   ModeSetting();
   //ToDo Select NormalAdjustSector or X1X2Adjust
   bFlag=false;
   break;
  default:
  bFlag=false;
   break;
}

 if (bFlag==true)
 {
  display.setTextSize(1);
  display.setCursor(0,yL);
  display.print(myval);
 }
}//End DrawText
  
void ModeSetting()
//Call this only from DrawText() if modeMenuNormalAdjustSectorOrX1X2
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0,15);
  display.println(strMenuNormalAdjustSectorX1X2);
  display.display(); 

  //Go checking now
  //If here mode = modeMenuNormalAdjustSectorX1X2 
  //So never leave it this mode 

  byte x;

  String myval;
   
   //You must Press a Key
   do {  
    if (digitalRead(cPinPush1)==LOW) {x=1;}
    if (digitalRead(cPinPush2)==LOW) {x=2;}
    if (digitalRead(cPinPush3)==LOW) {x=3;}
    if (digitalRead(cPinPush4)==LOW) {x=4;}
   }while(x==0); 


  switch (x){
    case 1:
    mode=modeNormal; 
    myval=strNormal;
    break;
    case 2:
     mode=modeAdjust; 
     myval=strAdjust;
    break;
    case 3:
     mode=modeSwing; 
     myval=strSwing + " " + Format3Degrees(x1) + " <> " + Format3Degrees(x2);
     break;
    case 4:
     X1andX2Setting();//Get new values for x1 x2
      mode=modeSwingToRange; //If in range then it changes to modeSwing
      //mode=modeSwing;
     return;
     break;
    default:
     mode=modeNormal;
     myval="Nothing";
     break;
  }

  display.setTextSize(1);
  display.setCursor(0,15);
  display.println(myval); 
  display.display();
  
  delay(1000);
  
}//End ModeSetting

void X1andX2Setting()
//Call this only from Function ModeSetting()
{
  
  byte x; 
  int oldX12;
  
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0,15);
  display.print(strMenuSwingValues);
  display.display();

  //Go finding out values x1 and x2 with the potmeter
       
    do{
    x1=Analog2Degrees(analogRead(cPinAdjust));
    if (x1 != oldX12)
    { 
     display.setCursor(0,18);
     display.setTextColor(WHITE); 
     display.print(Format3Degrees(oldX12));//Erease from screen
     display.setTextColor(BLACK); 
     display.print(Format3Degrees(x1)); 
     display.display();
     oldX12=x1;
     delay(100);
    }
    if (digitalRead(cPinPush1)==LOW) {x=1;}
    if (digitalRead(cPinPush2)==LOW) {x=1;}
    if (digitalRead(cPinPush3)==LOW) {x=1;}
    if (digitalRead(cPinPush4)==LOW) {x=1;}
    }
    while(x==0);

    x=0;
    oldX12=0;

    display.setCursor(20,18);
    display.setTextColor(BLACK); 
    display.print("<>");
    display.display();

    //How run from 270 to 22 degrees ??
    //Always run Smallest Swing
    do{
    x2=Analog2Degrees(analogRead(cPinAdjust));
     if (oldX12 != x2 )
     {
     display.setCursor(30,18);
     display.setTextColor(WHITE); 
     display.print(Format3Degrees(oldX12));//Erease from screen
     display.setTextColor(BLACK); 
     display.print(Format3Degrees(x2));
     display.display();
     x2=oldX12;
     delay(100);
     }
    if (digitalRead(cPinPush1)==LOW){x=1;}
    if (digitalRead(cPinPush2)==LOW){x=1;}
    if (digitalRead(cPinPush3)==LOW){x=1;}
    if (digitalRead(cPinPush4)==LOW){x=1;}
    
    }
    while(x==0);

    if (x2 < x1)
    {  
     x2=x1+1;
    }

     //Swap if needed smallest Swing
     SwapX1X2forSmallestSwing();
     FindCenterX1X2();

     display.setCursor(1,40);
     display.setTextColor(BLACK);
     display.print("I use this " + Format3Degrees(x1) + " <> " + Format3Degrees(x2));
     display.display();
     delay(1000);
}//End X1 and X2 Setting

byte TimeMotorRunsOneDirectionLimit(byte btn,byte RL)
//ToDo Time Limit Returns btnStop
{
  //Not Okay Yet
  
  const unsigned long tMax=15000; //15 seconds
  static unsigned long tStart;
  long unsigned tNow;

  //Get time
  tNow=millis();

   //Reset time
   // Reset always
  if (btn==btnStop || btn==btnMenu) 
   {
    tStart=tNow;//Restart counting
   }

  //Restart Counting if direction is changed
  if (btn!=RL && (btn==btnCW || btn==btnCCW )) //To Long running one direction
   {
    tStart=tNow;//Restart counting
   }
  
  //Time Overflow check
  if ((tNow-tStart)>=tMax)
   {
    return btnStop;//Modify to Stop
   }
   else
   {
    return btn;
   }
}//End Time Limit

void setup() {
 
Serial.begin(9600);

//Motor relais
pinMode(cPinMotor1,OUTPUT);
pinMode(cPinMotor2,OUTPUT);

//Buttons
pinMode(cPinPush1,INPUT_PULLUP);
pinMode(cPinPush2,INPUT_PULLUP);
pinMode(cPinPush3,INPUT_PULLUP);
pinMode(cPinPush4,INPUT_PULLUP);

ShowSerialInfo();

display.begin(); 
display.setContrast(50); 

FindCenterX1X2();

mode=modeNormal ; //Can be all mode... values
DrawPelorus(cNoDegrees);

delay(2000); 
display.clearDisplay();   //clears the screen and buffer
}//--------------------------------------------------End Setup---------------------------------------------------

void loop() {

//Byte
byte btn;                        //Witch button is pressed
static byte btnOld=btnStop;      //button Old pressed
static byte modeOld=modeNormal;  //mode Old
static byte RLOld=btnStop;       //Last turning stop, left or right 0.1,2
//Integer
int RotorDegrees;                //Analog reedcontactjes degrees
int AdjustDegrees ;              //Analog potmeter degrees 
static int AdjustDegreesOld;     //Old analog potmeter value

//Check button 's pressed 
btn=GetBtnPressed(btnOld);

//Get RotorDegrees
RotorDegrees=Analog2Degrees(analogRead(cPinReedContacts)); 

//Get PotmeterAdjustDegrees
AdjustDegrees=Analog2Degrees(analogRead(cPinAdjust));


switch (mode){
 //Turn CW or CCW but not to far so limit turning
 //Not used yet
 
 case modeNormal:
  if (RotorDegrees >= 337 && btn == btnCW){btn=btnStop;}//Modify btn
  else if (RotorDegrees <= 22 && btn == btnCCW){btn=btnStop;}//Modify btn
      
  if(btn != btnOld){RLOld=Motor(btn);}//Switch the Motor
  break;

 case modeAdjust:
   //Run to potmeter value
  if (ReadToPointPotmeter(RotorDegrees,AdjustDegrees)==true){btn=btnStop;}//Modify btn
  else if (RotorDegrees < AdjustDegrees) {btn=btnCCW;}
  else if (RotorDegrees > AdjustDegrees) {btn=btnCW;} 
  
  if(btn != btnOld){RLOld=Motor(btn);}//Switch the Motor
  break;

 case modeSwingToRange: 
   //Start always xcenter RotorDegrees for Swing
      
   if (ReadToPointPotmeter(RotorDegrees,xcenter)==false)
    {
      btn=btnCCW;
    }
     else
    {   
     mode=modeSwing;
     btn=btnStop;
    }
    
    if(btn != btnOld){RLOld=Motor(btn);}//Switch the Motor
    break;
    
 case modeSwing:
   //Not Okay here Yet 29-04-2019
   //Swing 
  
   //Find smallest swing 
   //Run to in range x1, x2 position xcenter modeSwingToRange
   //Swing between x1 and x2
   //Change direction automatic
   //If btn=btnStop stop motor don't swing
  
 
   if (btn != btnStop)
   { 
     
  if (x2 > x1)
   //Swinging not over point 0  
  {
   if (RLOld==btnCW && RotorDegrees >=377)
   {
     Motor(btnStop);
     btn=btnCCW;//Modify btn
    }
   else if (RLOld==btnCCW &&  RotorDegrees <=0)
   {
    Motor(btnStop);
    btn=btnCW;//Modify btn
   }
    delay(100);
    RLOld=Motor(btn);
  }
    else if (x1 > x2)
    //Swinging over point 0 degrees 
    {
     if (RLOld==btnCW && (RotorDegrees >= x1 && RotorDegrees < x2)) 
    {
      Motor(btnStop);
      btn=btnCCW;
    }
    else if (RLOld==btnCCW &&  (RotorDegrees <= x2  && RotorDegrees > x1))
    { 
      Motor(btnStop);
      btn=btnCW;
    }
     delay(100);
     RLOld=Motor(btn);
    }
  }

  
  if(btn != btnOld){RLOld=Motor(btn);}//Switch the Motor
  break; 
}

//Display on Nokia LCD5110

//Display (Pelorus + Degrees Now) + GotoArrow + (Text + Menu's)  
DrawPelorus(RotorDegrees); //Pelorus
//Only draw GotoPointArrow if mode is adjustpotmeter
DrawOnlyGotoPoint(AdjustDegrees);
//Only Draw text or go to Menu 
DrawText(RLOld);


//Display Serial Monitor
//Display the btn 
if (btnOld!=btn)
{
 Serial.print("btn=");Serial.println(btn);//Only for test purposes print once
 btnOld=btn;//Backup
}

//Display the mode 
if (modeOld!=mode)
{
 Serial.print("mode=");Serial.println(mode);//Only for test purposes print once
 modeOld=mode;//Backup
}

//Time motor runs one direction limit 15 seconds ?
btnOld=TimeMotorRunsOneDirectionLimit(btn,RLOld);//It can modify btn to btnStop

}//End Loop End Program



73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Gebruikersavatar
Dopp
Berichten: 1242
Lid geworden op: 08 mei 2011, 18:03
Roepletters: PA3BNX

Re: Super Simple Sound Doppler Peiler

#765 Bericht door Dopp »

Hallo Allemaal,

Update RDF kerberos RTL



https://www.rtl-sdr.com/kerberossdr-dir ... -tutorial/

https://youtu.be/imT2tmAe8wI


Enjoy watching reading
73's
PA3BNX
Lodewijk

Mijn Credo!

Zelfbouw:
Minimaal hardware
en maximaal software.

Plaats reactie