Onderstaan het circuit van de Arduino doppler blz 322
van Electron aug 2015 van PA2GLA.
En de orginele sketch van PA2GLA
En de sketch zoals ik hem voorlopig heb aangepast
Er zal nog heel wat moeten veranderen denk ik ....
Hem hem zelf nog niet gebouwd
Veel denk en knutsel plezier allen
Orinele Code
Code: Selecteer alles
/*
Deze sketch vormt samen met een antenne schakelaar, een pelorus en een interface een {Doppler} peiler met elke willekeurige smal band FM ontvanger.
Ontworpen door PA2GLA Jan Glavimans eind 2014
laatst gemodificeerd 18 juni 2015
Een ieder is vrij dit te gebruiken / modificeren.
*/
//#include <math.h>
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int meet = 4; //hoe vaak wordt er per schakeling gemeten
int average = 500; //hoeveel loops doorlopen we?
int antenneP = 2;//benoem alle pin-nummers
int antenneQ = 3;
int antenneS = 4;
int antenneR = 5;
int ledI = 6 ;
int ledII = 7;
int ledIII = 8;
int ledIV = 9;
int leda = 10;
int ledb = 11;
int ledc = 12;
int ledd = 13;
int count = 500; // bepaal de soort van variabele
float X;
float Y;
float tg;
// the setup routine runs once when you press reset:
void setup ()
{
// initialize the digital pin as an output.
pinMode (antenneP, OUTPUT);// set de soort van functie
pinMode(antenneQ, OUTPUT);
pinMode(antenneS, OUTPUT);
pinMode(antenneR, OUTPUT);
pinMode(ledI, OUTPUT);// iedere kwadrant bedient de ledjes a,b,c,d.
pinMode(ledII, OUTPUT);
pinMode(ledIII, OUTPUT);
pinMode(ledIV, OUTPUT);
pinMode(leda, OUTPUT);
pinMode(ledb, OUTPUT);
pinMode(ledc, OUTPUT);
pinMode(ledd, OUTPUT);
Serial.begin(9600);// voor ontwikkel doeleinden
}
// the loop routine runs over and over again forever:
void loop()
{
for (count = 0; count < average; count ++)
{
digitalWrite(antenneP, HIGH); // we gaan van P => Q => => R => S enz.
digitalWrite(antenneS, LOW); // P-Q eerst de nieuwe antenne aan voordat de andere uit is
delayMicroseconds(100);
for (int m = 0; m < meet; m ++)
{
Y = Y + analogRead(A0); // meet de response en stop die in de "condensator bak"
}
digitalWrite(antenneQ , HIGH);
digitalWrite(antenneP , LOW); // X-Z
delayMicroseconds(100);
for (int m = 0; m < meet; m ++)
{
X = X - analogRead(A0);
}
digitalWrite(antenneR, HIGH); // turn the antenne on (HIGH is the voltage level)
digitalWrite(antenneQ, LOW); // Z-Y
delayMicroseconds(100);
for (int m = 0; m < meet; m ++)
{
Y = Y - analogRead(A0);
}
digitalWrite(antenneS, HIGH); // Y-0
digitalWrite(antenneR, LOW);
delayMicroseconds(100);
for (int m = 0; m < meet; m ++)
{
X = X + analogRead(A0);
}
}
//if (abs(X) + abs(Y) > 80000 ) // drempel inbouwen om valse display te voorkomen wordt aan gewerkt
{
tg = abs(Y / X);
digitalWrite(ledI, LOW); // zet het ledje dat "aan " was "uit "
digitalWrite(ledII, LOW);
digitalWrite(ledIII, LOW);
digitalWrite(ledIV, LOW);
digitalWrite(leda, HIGH);
digitalWrite(ledb, HIGH);
digitalWrite(ledc, HIGH);
digitalWrite(ledd, HIGH);
if ((X > 0) && (Y > 0)) digitalWrite(ledI, HIGH);// kwadrant bepaling
if ((X < 0) && (Y > 0)) digitalWrite(ledII, HIGH);
if ((X < 0) && (Y < 0)) digitalWrite(ledIII, HIGH);
if ((X > 0) && (Y < 0)) digitalWrite(ledIV, HIGH);
if (tg < 0.41) digitalWrite(leda, LOW); //, 22.5 gr
if ((tg > 0.41) && (tg < 1)) digitalWrite(ledb, LOW);//tussen 22.5 en 45 gr
if ((tg > 1) && (tg < 2.41)) digitalWrite(ledc, LOW);//tussen 45 en 67.5 gr
if (tg > 2.41) digitalWrite(ledd, LOW);// > 67.5 gr
Serial.print ("X ");// handig voor ontwikkelingsfase, terugmelden aan laptop
Serial.print (X);
Serial.print ("; Y ");
Serial.print (Y);
Serial.print ("; hoek ");
Serial.print (atan(tg) * 180 / 3.14159);
//Serial.print (" T= ");
//Serial.print (millis());
Serial.println (" ");
X = Y = 0 ;//maak onze "condensator bakken"leeg en begin opnieuw
}
}
Code: Selecteer alles
/*
Modified by PA3BNX Not tested yet 05-08-2015 because I do not have the hardware build yet
Deze sketch vormt samen met een antenne schakelaar, een pelorus en een interface een {Doppler} peiler met elke willekeurige smalband FM ontvanger.
Ontworpen door PA2GLA Jan Glavimans eind 2014
laatst gemodificeerd 18 juni 2015
Een ieder is vrij dit te gebruiken / modificeren.
*/
//#include <math.h>
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
const int calibratie=0; //calibration offset in graden
const int average=500; //hoeveel loops doorloprn we?
const byte meet=4; //hoevaak wordt er per schakeling gemeten
const byte delaym=100; //100 mSec delay tussen antennes schakelen
const int offset = 511; //Analoge input gaat van 0 to 1023 Audio heeft offset dus 511
const float rad1 = 180/PI;
int antenneP = 2;//benoem alle pin-nummers
int antenneQ = 3;
int antenneS = 4;
int antenneR = 5;
int ledI = 6 ;
int ledII = 7;
int ledIII = 8;
int ledIV = 9;
int leda = 10;
int ledb = 11;
int ledc = 12;
int ledd = 13;
float x;
float y;
//Returns Agrelo geformatteerde string % en 3 cijfers altyd
String Format3Degrees(int d){
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;
}
// the setup routine runs once when you press reset:
void setup ()
{
// initialize the digital pin as an output.
pinMode (antenneP, OUTPUT);// set de soort van functie
pinMode(antenneQ, OUTPUT);
pinMode(antenneS, OUTPUT);
pinMode(antenneR, OUTPUT);
pinMode(ledI, OUTPUT);// iedere kwadrant bedient de ledjes a,b,c,d.
pinMode(ledII, OUTPUT);
pinMode(ledIII, OUTPUT);
pinMode(ledIV, OUTPUT);
pinMode(leda, OUTPUT);
pinMode(ledb, OUTPUT);
pinMode(ledc, OUTPUT);
pinMode(ledd, OUTPUT);
Serial.begin(9600);// voor ontwikkeldoeleinden
}
// the loop routine runs over and over again forever:
void loop()
{
int count;
byte m;
int hoek;
byte hoek90;
for (count=0;count<average;count++)
{
digitalWrite(antenneP, HIGH); // we gaan van P => Q => => R => S enz.
digitalWrite(antenneS, LOW); // P-Q eerst de nieuwe antenne aan voordat de andere uit is
delayMicroseconds(delaym);
for (m=0;m<meet;m++)
{
y += analogRead(A0); // meet de response en stop die in de "condensator bak"
}
digitalWrite(antenneQ , HIGH);
digitalWrite(antenneP , LOW); // X-Z
delayMicroseconds(delaym);
for (m=0;m<meet; m ++)
{
x-=(analogRead(A0)-offset);
}
digitalWrite(antenneR, HIGH); // turn the antenne on (HIGH is the voltage level)
digitalWrite(antenneQ, LOW); // Z-Y
delayMicroseconds(delaym);
for (m=0;m<meet; m++)
{
y-=(analogRead(A0)-offset);
}
digitalWrite(antenneS, HIGH); // Y-0
digitalWrite(antenneR, LOW);
delayMicroseconds(delaym);
for (m=0; m<meet; m++)
{
x+=(analogRead(A0)-offset);
}
}
//drempel inbouwen om valse display te voorkomen wordt aan gewerkt
if (abs(x)+abs(y)>80000)
{
//Toon nieuwe Pelorus
//Idee ? Het zou leuk zijn dat er twee naast elkaar liggende leds op lichten bij bv 12,5 graden led 0 en 22,5
digitalWrite(ledI, LOW); // zet het ledje dat "aan " was "uit "
digitalWrite(ledII, LOW);
digitalWrite(ledIII, LOW);
digitalWrite(ledIV, LOW);
digitalWrite(leda, HIGH);
digitalWrite(ledb, HIGH);
digitalWrite(ledc, HIGH);
digitalWrite(ledd, HIGH);
//Bereken de hoek in graden van x en y
hoek = int(atan2(y,x) * rad1);
if (hoek<0){hoek+=360;}
//Hier kun je makkelijk kalibreren alleen Hoek en Calibratie optellen
hoek+=calibratie;
hoek=hoek%360; //Graden altyd tussen 0 en 360
if (hoek>=0&&hoek<90) {digitalWrite(ledI, HIGH);}// kwadrant bepaling
if (hoek>=90&&hoek<180) {digitalWrite(ledII, HIGH);}
if (hoek>=180&&hoek<270) {digitalWrite(ledIII, HIGH);}
if (hoek>=270&&hoek<360) {digitalWrite(ledIV, HIGH);}
//Modules 90 Geeft altijd output van 0 tot 90 graden
hoek90=hoek%90;
if(hoek90<23){digitalWrite(leda, LOW);} //tussen 0 en 22.5 gr
if(hoek90<=45){digitalWrite(ledb, LOW);} //tussen 22.5 en 45 gr
if(hoek90<68){digitalWrite(ledc, LOW);} //tussen 45 en 67.5 gr
if(hoek90<=90){digitalWrite(ledd, LOW);} //tussen 67.5 en 90 gr
//Ik adviseer om de hoek terug te zenden in agrelo format dus %ddd
//Dan kun je het ook laten werken met MyMapping.exe
//Roep hier functie 3 degrees aan zodat agrelo altyd 001, 011 of 111 is
Serial.println (Format3Degrees(hoek));
x=0;
y=0;//maak onze "condensator bakken"leeg en begin opnieuw
}
}//End of loop