Bonjour cher!
Dans cet article, à la demande générale, nous vous expliquerons comment réaliser un simple modem hydroacoustique: un peu de traitement du signal numérique, un peu de programmation, un peu de circuits imprimés maison et une goutte d'hydrologie pratique.
À tous ceux qui sont intéressés - nous vous demandons d'être les bienvenus sous la coupe, dans le monde réverbérant de la communication sous-marine!
Et voici l'image pertinente, pour attirer l'attention:

"En fin de compte, le sens de notre existence est de dépenser de l'énergie ... Et si possible, vous savez, afin que cela soit intéressant pour vous et pour les autres est utile."
(C) ABS, midi, XXIIe siècle
Économisez votre temps - Résumé
- Les modems acoustiques ne sont pas encore vendus sur Aliexpress
- Il existe une méthode simple et peu exigeante de détection de tonalité des ressources informatiques, dont la fréquence est 4 fois inférieure à la fréquence d'échantillonnage; Arduino est suffisant pour la mise en œuvre
- Exemple de code pour PC se trouve sur GitHub
- Nous fabriquons des antennes de réception et d'émission à partir de pie pickers de 10 r chacun
- Nous achetons (ou le faisons nous-mêmes) une carte amplificateur sur TDA2030 sur Ali pour 50 roubles
- Nous fabriquons un préamplificateur LUT-ohm, avec un coût total de ~ 100 roubles
- Nous nous connectons et allons à l'étang
- Réjouis-toi
Prélude de motivation
Maintenant, vous pouvez acheter presque n'importe quoi sur Aliexpress ou eBay. Surtout beaucoup de choses différentes pour la fabrication indépendante de quelque chose d'électronique basé sur Arduino. Vous pouvez faire (si vous ne l'achetez tout simplement pas intéressant) une station météo de milieu-stopover avec une connexion Internet, une mangeoire automatique pour chats, un contrôleur de brasserie domestique, mais vous ne pouvez toujours pas acheter un modem sonar, un concepteur pour sa fabrication, ou au moins un module pour adruino. Et bien! Et ne le faites pas - maintenant, nous allons vous dire comment le faire, et aussi comment cela fonctionne.
Nous avons longuement réfléchi à tout le laboratoire pour proposer aux amateurs une fabrication indépendante. Quelque chose de très simple, qui peut être récupéré par un étudiant et à partir d'un
bâton et d'une corde de ce que tout le monde a sous la main, mais en même temps représentant nécessairement au moins une valeur pratique ou éducative minimale.
Quelque chose promettant une amélioration longue et passionnante, quelque chose qui peut plus tard être transféré même à l'arduino
, si cela ne va pas .
Si nous abordons la question de manière matérielle, nous aimerions offrir un tutoriel détaillé pour la fabrication d'un appareil simple qui serait plus ou moins capable de transmettre des données dans un plan d'eau peu profond (un canal sonar peu profond est le plus complexe), ce qui signifierait une production maximale d'une carte de circuit imprimé utilisant LUT, avec un coût total ne dépassant pas quelques trois cents roubles à un minimum de points.
Que ferons-nous aujourd'hui?
- rappelez-vous comment faire une antenne sonar appropriée et en faire un couple;
- connectez l'une des antennes à un PC via un amplificateur sur le TDA pour ~ 50 roubles et obtenez un émetteur;
- pour la seconde nous ferons un préamplificateur avec l'aide de LUT pour ~ 100 roubles;
- nous
allons écrire (j'ai déjà tout écrit et mis sur Git) un simple modem en C # et tout essayer dans le plan d'eau le plus proche;
De quoi avons-nous besoin pour cela?
- deux éléments piézoélectriques. Par exemple, à partir d'une horloge ou d'une carte postale ;
- Câble RG-174 / U (ou similaire) ~ 5 mètres;
- scellant acétique;
- vernis résistant à l'eau;
- textolite en feuille, un total d'environ 100x200 mm;
- un amplificateur pour TDA2030 (par exemple, un pour 50 roubles);
- composants de préampli
Comment ça marche?
L'idée même du modem le plus simple repose sur, encore une fois, le plus simple (coïncidence?) Détecteur d'un certain ton, dont, à ma honte, je n'ai pas entendu. Il m'a parlé de lui complètement par hasard
andrey_9999a . Soit dit en passant, il a également fabriqué une carte de préamplificateur.
À cet égard, j'ai rappelé une citation du livre de Leonard Sasskind «La bataille du trou noir»:
«En tant que connaisseur de vin, je suis plus ou moins sûr que même les yeux fermés, je peux distinguer le rouge du blanc. Encore plus fiable, je distingue le vin de la bière. Mais le goût me décevra. »
Je peux me dire qu'en tant que véritable ingénieur en électronique, je suis plus ou moins sûr que je peux définitivement souder deux fils épais. De manière encore plus fiable, je distingue un fer à souder chaud d'un fer froid, même les yeux fermés, mais la compétence me laissera tomber. Par conséquent, tout ce qui concerne le développement et la fabrication de cartes est l'œuvre de mes camarades et collègues
andrey_9999a et
StDmitriev .
Revenons donc au détecteur. Il s'agit d'un cas particulier simplifié de calcul de l'intégrale de Fourier:
Dans le cas d'un signal numérique, pour calculer l'amplitude d'une harmonique arbitraire, il sera nécessaire d'effectuer une transformée de Fourier discrète, pour Arduina c'est difficile, mais l'astuce est que si vous prenez
Fc comme fréquence porteuse, telle qu'elle sera exactement 4 fois inférieure à la fréquence d'échantillonnage
Fs , puis l'amplitude de cette harmonique peut être calculée de façon démoniaque plus facile.
Dans ce cas,
dt = 2π * (Fs / 4) / Fs = π / 2 , et seuls 4 échantillons tombent sur la période porteuse:

Si tout est décalé de
π / 4, alors les échantillons ne prendront que deux valeurs: √2 / 2 et -√2 / 2, pour plus de simplicité nous ne laisserons que les signes -
"+" et "-" .
L'essence de la méthode est que nous représentons la phase sinusoïdale comme une séquence de signes
"+" "+" "-" "-" , et la phase cosinusoïdale comme
"+" "-" "-" "+" .
Que le signal d'entrée soit dans le tampon
sn , nous avons deux tampons de moyenne en anneau pour les phases sinus et cosinus -
bs et
bc de taille
N. Les pointeurs vers la tête et la queue sont communs pour eux -
bH et
bT . Au moment initial du temps,
bH = N-1, bT = 0 . Compteur de cycles de moyenne
C = 0 .
Nous prenons 4 échantillons du tampon d'entrée et les ajoutons en fonction des séquences de caractères.
Exemple de codea = sn(i)
bs(bH) = a
bc(bH) = a
s1 = s1 + a - bs(bT)
s2 = s2 + a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
a = sn(i+1)
bs(bH) = a
bc(bH) = -a
s1 = s1 + a - bs(bT)
s2 = s2 - a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
a = sn(i+2)
bs(bH) = -a
bc(bH) = -a
s1 = s1 - a - bs(bT)
s2 = s2 - a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
a = sn(i+3)
bs(bH) = -a
bc(bH) = a
s1 = s1 - a - bs(bT)
s2 = s2 + a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
Après avoir traité chacun quatre échantillons, nous vérifions le compteur des cycles de moyenne et s'il a dépassé
N , puis nous calculons l'amplitude de la porteuse
cA :
if ++cycle >= N cA = sqrt(s1 * s1 + s2 * s2) cycle = 0 end
Voici à quoi cela ressemble sur un signal idéal:

Le signal lui-même est affiché en bleu et les valeurs d'amplitude de la porteuse sont affichées en rouge (tout est réduit à la plage -1..1). Dans ce cas,
N = 2 puisque il n'y a pas de bruit et tout fonctionne bien quand même.
Ajoutez maintenant un peu de bruit blanc et voyez comment notre détecteur réagira à cela:

J'ai ajouté du bruit blanc pour que le rapport signal / bruit soit de 0 dB. Dans la figure ci-dessus, le signal bruyant est affiché en bleu, le signal source en vert et la valeur d'amplitude en rouge. Dans ce cas, le détecteur à
N = 2 n'a déjà rien détecté, et le N minimum auquel il fonctionne correctement est de 32. Autrement dit, la taille de la fenêtre de traitement des échantillons était de
32 * 4 = 128 échantillons.
Autrement dit, nous pouvons maintenant analyser le signal d'entrée et évaluer un paramètre qui quantifie la présence d'une fréquence, quatre fois inférieure à la fréquence d'échantillonnage. Si vous définissez une certaine valeur seuil pour ce paramètre, alors tout peut être binarisé, et en parlant d'une manière simple, nous pouvons répondre à la question: y a-t-il une tonalité donnée dans le signal d'entrée ou non?
C'est très bien, mais nous devons transmettre des bits, et les bits peuvent prendre deux valeurs.
L'implémentation d'un système avec deux états de signalisation à l'aide d'un seul est une idée, donc nous
ne coderons
pas l' un des états avec silence (pause). Cela rendrait la détection très difficile: il faudrait en quelque sorte mettre en évidence le début de la prémisse, comprendre comment organiser sa fin, etc.
Au lieu de cela, "1" et "0" nous encoderons avec des impulsions de différentes longueurs, entre les bits il y a un soi-disant intervalle de garde - parce que nous devons encore faire face à la propagation par trajets multiples et à la réverbération. En termes simples, l'intervalle de garde est l'endroit (le temps) où toutes les réflexions du bit précédent, tous les sons rémanents et les échos s'éteignent.
À l'avenir, nous notons qu'avec une telle structure de signal, l'algorithme de fonctionnement du récepteur est considérablement simplifié: nous attendons que la tonalité apparaisse, remarquons le début, attendons que la tonalité disparaisse et notons à nouveau l'heure - si l'heure reçue ressemble plus à «1», nous avons probablement pris un peu avec une valeur de "1", si cela ressemble plus à "0" - alors apparemment, nous avons pris un peu avec une valeur de "0".
En général, nous pouvons dire qu'il s'agit d'une sorte de code morse.
Partie logicielle du modem
Pour les impatients -
un exemple se trouve sur GitHub . Il a été fouetté en C # (parce que pour le PC j'écris dessus et c'est juste plus pratique et plus rapide pour moi).
La merveilleuse bibliothèque
NAudio est utilisée pour lire et capturer le son de l'entrée microphone.
Toute la logique du modem est dans la
classe SUAModem (Simple Underwater Acoustic Modem).
Les paramètres suivants sont transmis au constructeur:
double sRateHz - taux d'échantillonnage en Hertz;
int wSize - la taille de la fenêtre de traitement en échantillons;
int oneMultiplier - combien de "fenêtres" durent un peu avec une valeur de "1"
int zeroMultiplier - combien de "fenêtres" durent un peu avec une valeur de "0"
double eThreshold - seuil, parlons-en plus tard
Pour générer un signal à partir d'un tableau d'octets, il existe une méthode ModulateData (byte [] data), qui renvoie un tableau d'échantillons signés 16 bits.
short public [] ModulateData (octet [] données) public short[] ModulateData(byte[] data) { double alpha = 0; double phase = 0; List<short> samples = new List<short>(); BitArray bits = new BitArray(data); for (int i = 0; i < bits.Length; i++) { int sLim = (bits[i]) ? oneDurationSmp : zeroDurationSmp; alpha = 0; phase = 0; for (int sIdx = 0; sIdx <= sLim; sIdx++) { alpha = Math.Sin(phase); phase += delta; if (phase >= alimit) phase -= alimit; samples.Add(Convert.ToInt16(alpha * short.MaxValue)); } samples.AddRange(new short[defenseIntervalSmp]); } return samples.ToArray(); }
Dans la boucle principale par bits transmis, la liste d'échantillons est remplie. En fonction du bit transmis actuel, la longueur sLim du signal généré en échantillons est fixée. Un intervalle de garde est ajouté après chaque bit.
Bien sûr ...Beaucoup peuvent remarquer que lors de la génération d'un signal, on pourrait se passer de la fonction sinus, mais cet exemple permet, en changeant la valeur delta en conséquence, de changer la fréquence de la tonalité générée.
Pour générer un son avec une fréquence
à un taux d'échantillonnage donné
valeur correspondante
calculé simplement:
Pour générer et émettre un signal, il existe la méthode TransmitData (byte [] data), qui appelle en interne ModulateData:
double TransmitData public (octet [] données) public double TransmitData(byte[] data) { var samples = ModulateData(data); double txTime = ((double)samples.Length) / SampleRateHz; var rawBytes = new byte[samples.Length * 2]; for (int i = 0; i < samples.Length; i++) { var bts = BitConverter.GetBytes(samples[i]); rawBytes[i * 2] = bts[0]; rawBytes[i * 2 + 1] = bts[1]; } using (var ms = new MemoryStream(rawBytes)) { using (var rs = new RawSourceWaveStream(ms, new WaveFormat(Convert.ToInt32(SampleRateHz), 16, 1))) { using (var wo = new WaveOutEvent()) { wo.Init(rs); wo.Play(); while (wo.PlaybackState == PlaybackState.Playing) { Thread.SpinWait(1); } } rs.Close(); } ms.Close(); } return txTime; }
La classe SUAModem signale l'acceptation de l'octet suivant à l'aide de l'événement DataReceivedEventHandler.
Les échantillons d'entrée sont envoyés à l'analyse à l'aide de la méthode ProcessInputSignal (données courtes []), où ils sont écrits dans le tampon en anneau. L'analyse a lieu dans un thread séparé, dans la méthode Receiver.
Et le récepteur lui-même vit dans la méthode de réception:
void privé recevoir () private void Receive() int a; while (rCnt >= 4) { a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = a; dRing2[rHead] = a; s1 += a - dRing1[rTail]; s2 += a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = a; dRing2[rHead] = -a; s1 += a - dRing1[rTail]; s2 += -a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = -a; dRing2[rHead] = -a; s1 += -a - dRing1[rTail]; s2 += -a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = -a; dRing2[rHead] = a; s1 += -a - dRing1[rTail]; s2 += a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; if (++cycle >= windowSize) { cycle = 0; currentEnergy = Math.Sqrt(s1 * s1 + s2 * s2) / windowSize; double de = currentEnergy - prevEnergy; #region analysis if (skip > 0) skip -= windowSize * 4; else { if (isRise) { if (de > -Threshold) { riseSmp += windowSize * 4; } else { // analyse symbol isRise = false; double oneDiff = Math.Abs(oneDurationSmp - riseSmp); double zeroDiff = Math.Abs(zeroDurationSmp - riseSmp); if (oneDiff > zeroDiff) { // Mostly likely "0" AddBit(false); } else { // Mostly likely "1" AddBit(true); } samplesSinceLastBit = 0; skip = defenseIntervalSmp / 2; } } else { if (de > Threshold) { isRise = true; riseSmp = windowSize * 4; } } } #endregion prevEnergy = currentEnergy; if (bPos > 0) { samplesSinceLastBit += 4 * windowSize; if (samplesSinceLastBit >= defenseIntervalSmp * 2 + zeroDurationSmp + oneDurationSmp) { DiscardBits(); } } } } }
Le code montre que l'analyse est effectuée en 4 échantillons, si vous le souhaitez, vous pouvez enregistrer l'état et traiter un échantillon, ce qui sera utile lors du transfert vers un MK faible.
Au fur et à mesure de la réception des données, la valeur de l'amplitude s est calculée à une fréquence sRateHz / 4. La différence entre les valeurs précédentes et actuelles de l'amplitude est calculée puis comparée à un seuil donné, sélectionné expérimentalement. Un exemple vous permet de modifier ce seuil en temps réel.
Une forte augmentation de l'amplitude indique le début d'un «bit», une baisse brutale (un peu moins forte en raison de la réverbération) indique la fin d'un «bit».
Après avoir reçu le bit suivant, nous calculons l'intervalle de protection - nous sautons le nombre d'échantillons spécifié - il y a toutes sortes d'échos en eux, ils n'interféreront qu'avec nous.
La partie en fer du modem
Donc, avec la structure du signal, tout est clair, comment le recevoir trop clairement. La petite chose est d'apprendre à émettre un signal dans l'eau et à le recevoir de l'eau.
Si vous n'avez pas encore d'antennes sonar, alors il est temps de les faire dans
notre tutoriel précédent .
Je suis resté avec eux à partir de ce moment-là, alors je saute cette étape.
Nous connectons l'antenne destinée à la transmission à
la carte d'amplificateur avec aliexpress . Pour plusieurs dizaines de mètres (voire des centaines), cela nous suffit. Il n'y a pas d'astuces ici - la sortie de la carte son de l'ordinateur portable va à l'entrée de l'amplificateur, qui est alimenté par une batterie plomb-acide de 12 volts 4 Ah. Notre antenne de transmission hydroacoustique d'un tweeter piézoélectrique est connectée à la sortie. Dans mon cas, cela ressemble à ceci:


Sur la photo ci-dessus, sur l'écran, il y a un petit spoiler pour le prochain article. La prochaine fois sur les mêmes glandes, nous essaierons à nouveau de transmettre le son "vidéo" à travers l'eau, mais d'une manière complètement différente de la
dernière fois .
Avec une antenne de réception, c'est un peu plus compliqué. Bien que les tweeters piezo soient très sensibles, ce n'est toujours pas suffisant. Nous devrons assembler une carte de préamplificateur avec un filtre sur la bande 5-35 kHz.
Le gain que nous prenons est de 1000.
Le circuit, la conception de la carte de circuit imprimé et la liste des composants du préamplificateur sont sur notre GitHub:
circuit , pistes -
couche supérieure et
couche inférieure ,
BOM .
La
technologie LUT
a été discutée des centaines de fois, mais faisons aussi notre part.
Photo de processusDonc, nous prenons un magazine approprié, nous n'avions que celui-ci à portée de main:

Nous en prenons quelques pages et imprimons les couches à l'aide d'une imprimante laser.

Combinez avec des aiguilles et de la colle d'un côté, comme indiqué sur la photo:

Avant d'utiliser le fer, nous mouillons le toner avec de l'alcool isopropylique:

Repasser à travers une feuille A4 pliée quatre fois:

Faire tremper dans l'eau chaude sous le robinet:

Et nous lavons le reste du papier. Après quoi nous obtenons une pièce prête pour la gravure:

Nous coupons l'excédent à l'aide de ciseaux à métal ou à qui c'est plus pratique.
Nous empoisonnons dans le chlorure ferrique. Surtout pour l'article, nous en avons jeté frais, il s'est avéré si pointilleux que des bulles viennent activement de la future planche:

En conséquence, après gravure et lavage du toner, nous obtenons un tel produit semi-fini:


Après avoir soudé les composants et lavé, la carte ressemble à ceci.

Et cela ressemble à l'assemblage de la pièce de réception. L'alimentation est fournie par la même batterie au plomb de 12 volts:

Avertissement sur les petits filtresSi le lecteur veut changer de bande, nous proposons de recompter le filtre de 8ème ordre monté sur un ampli op bon marché 4 canaux TL084C (DA2 dans le
schéma ), les résistances R10-R13, R15-R23 et les condensateurs C5-C8, C11, C12, C14 et C15.
Juste au cas où, voici la réponse en fréquence de l'implémentation actuelle du filtre:

Et voici un autre
projet pour ce filtre créé dans l'application
Qucs Expériences et tests
Pour se connecter à un ordinateur portable, nous utilisons un Jack 3,5 mm ordinaire, la pointe est un signal, celui du milieu n'est pas connecté, la terre -
poussière à poussière au sol. Toutes les amplifications et tous les effets du microphone doivent être désactivés, et le volume devra jouer pour atteindre le niveau optimal. La cadence doit se produire lorsque vous touchez l'antenne connectée au préamplificateur avec votre doigt et que vous la caressez légèrement.
Si vous mettez simplement une pièce sur une autre sans amplificateur ni préamplificateur et que vous les connectez à l'entrée et à la sortie audio, alors tout fonctionne parfaitement. Vous trouverez ci-dessous une section du signal et vous pouvez même déterminer à l'œil nu où se trouvent les valeurs des bits:

Le signal lui-même est affiché en bleu, la différence entre les valeurs actuelles et précédentes de l'amplitude (avant) en rouge, et la différence entre les valeurs précédentes et actuelles (déclin) en vert. Vous pouvez facilement «démoduler» cette partie de la prémisse: 1 0 0 0 1 1 0. Notre zéro est deux fois plus long que l'unité, et la durée de l'intervalle de garde est égale à la durée de zéro.
De plus, également sans amplificateur et préamplificateur, nous abaissons nos antennes dans un réservoir métallique, aux dimensions 3x1,5x1,5. Nous l'avons dans le laboratoire, et nous avons établi une règle selon laquelle nous ne ferons aucune communication si elle n'est pas en mesure de travailler dans ce réservoir. Le fait est que dans un volume d'énergie aussi fermé, il n'y a nulle part où aller - le son est merveilleusement et à plusieurs reprises réfléchi par les parois métalliques et au point de réception, la bouillie est obtenue. Et étant donné que nous vérifions généralement les appareils prêts à l'emploi avec une énergie calculée pour des milliers de mètres, vous pouvez imaginer ce qui se passe là-bas.
Par exemple, deux de nos modems
RedLINE fonctionnent de manière stable dans ce réservoir uniquement à une distance ne dépassant pas deux mètres, et deux
uWAVE fonctionnent de manière stable à environ 1 mètre. Alors que le premier en eau libre fonctionne jusqu'à 8000 mètres, et le second -
jusqu'à un kilomètre .
Bien sûr, tous les produits commerciaux n'utilisent pas de tels schémas de modulation primitifs, qui sont discutés dans l'article et sont beaucoup plus compliqués, mais maintenant il est important pour nous de comprendre les bases et de faire quelque chose utilement avec nos mains.
En général, nous abaissons les antennes dans le réservoir à une distance d'environ 50 centimètres et nous obtenons déjà quelque chose de beaucoup moins beau qu'avec le contact direct des antennes:

Bien qu'un intervalle de garde beaucoup plus long soit utilisé ici, il est toujours visible que l'écho marche presque jusqu'au bit suivant, les fronts et surtout les creux sont très flous. Mais vous pouvez toujours déterminer le contenu du message: 1 0 0 0 1 1 0
Dans les deux cas, j'ai envoyé le message «123» et ces sept bits appartiennent au symbole de l'unité.
Cela ressemblait à quelque chose comme ça, puis l'interface a été légèrement refaite

Depuis l'écran ci-dessus, on peut voir qu'avec ces paramètres, la transmission du message «Bonjour,
habr !!! :-) "composé de 19 octets prend 9,132 secondes, c'est-à-dire que la vitesse de transmission était de 16,6 bits / s. Soit dit en passant, pour que le modem fonctionne dans notre réservoir, nous avons dû augmenter l'intervalle de garde afin que la vitesse de transmission tombe à ~ 3 bit / s.
Nous avons vérifié le travail fait maison dans la piscine, où il gagnait régulièrement 10 mètres.

Nous nous sommes également adonnés au travail fait maison sur l'étang. J'ai utilisé un hydrophone actif de conception très similaire à celui proposé dans l'article, mais au lieu d'un tweeter piézoélectrique, un capteur des capteurs de stationnement a été utilisé, la batterie y était montée dans une bobine sur laquelle le câble était enroulé:


L'antenne du récepteur et de l'émetteur descend directement du rivage, la profondeur y passe fortement de 0,5 à 2 mètres. Curieusement, dans l'expérience montrée sur la photo ci-dessus, les pires conditions étaient, la distance n'était que d'environ 5 mètres - c'était généralement le réglage initial. Sur les 20 messages transmis, 3 octets chacun, dans six d'entre eux, un octet a été battu.
Ensuite, lorsque nous avons connecté le récepteur à un deuxième ordinateur portable et l'avons déplacé de l'autre côté de l'étang (distance d'environ 30 mètres), la transmission s'est beaucoup mieux passée - il n'y a eu que quelques erreurs avec 40 messages d'une taille de 3 à 13 octets.

Sur la photo suivante sur la carte, les endroits où se trouvaient les antennes sont visibles.

Conclusion et recherches complémentaires
Comme promis, pour quelques roubles, nous avons assemblé un appareil de travail. Bien que sa valeur pratique soit douteuse, le processus de fabrication et de réglage sur un étang sera très utile pour les débutants. En utilisant la méthode de détection de porteuse décrite, il est tout à fait possible de proposer différents systèmes de navigation simples pour un usage amateur, et ce qui est particulièrement agréable, la complexité de calcul vous permet de mettre en œuvre la méthode sur un simple microcontrôleur.
Afin de ne pas être infondé en ce qui concerne la construction de systèmes de navigation sur des signaux simples, jetez un œil au
travail intéressant dans lequel ils ont construit un système de navigation à longue portée à part entière. Dans ce système, la position du doigt est déterminée, ce qui transmet périodiquement sa profondeur. La valeur de profondeur est codée par la distance entre deux impulsions simples à une certaine fréquence. Alors oui, oui, les pots ne sont pas brûlés par les dieux, la route sera accablée par le promeneur, patience et travail, étude, étude, étude - c'est tout.
Peut-être que si nous avons le temps, nous ferons un projet de bricolage pour positionner un pinger autonome émettant des signaux simples. Nous avons déjà fait quelque chose de similaire, mais pas de bricolage, sur la base de nos modems
uWAVE , dont nous avons même essayé de
tourner une vidéo . Il sera très intéressant d'entendre vos opinions à ce sujet - il est très important d'avoir la confirmation que vous faites quelque chose qui n'est pas en vain.
Néanmoins, en revenant au sujet principal, nous notons ce qui pourrait être amélioré dans le schéma proposé:
- rendre le calcul du seuil adaptatif
- analyser automatiquement la largeur des signaux
- essayez d'utiliser différentes longueurs pour différentes combinaisons de bits
resserrer le codage correcteur d'erreurs- transférez le tout à Arduino
- le volume et le seuil doivent être sélectionnés pendant longtemps et fastidieux, il serait donc bien d'ajouter AGC au préamplificateur
Lors de cette réunion, je déclarerai clos, et si vous êtes intéressé par le sujet, voici une liste de nos articles précédents:
GPS sous-marin à partir de zéro par anGPS sous-marin sur un robot sous-marin: expérienceNous avons fabriqué le plus petit modem sonar au mondeSur l'effet des cyanobactéries sur les fonctions vocales du présidentFaire une simple antenne sonar à la poubelleSession de transmission vidéo du son à travers l'eau avec expositionGPS sous-marin sur deux émetteurs-récepteursNavigation sous l'eau: Bearing Not Bearing - vous êtes voué au succèsGPS sous-marin: suitePS
Comme toujours, nous sommes heureux d'entendre des commentaires et suggestions, de bonnes critiques et des acclamations)
PPS
Ne retirez pas les glandes loin - la prochaine fois, nous les utiliserons à nouveau pour transmettre la "vidéo" à travers l'eau.