По окончании измерения красный светодиод гаснет, зуммер снова издает звуковой сигнал, это означает что установка готова к измерениям на следующем пикете.
3. Начать перемещение вдоль выбранного профиля, производя измерения на каждом отдельном пикете. Программный код будет выполнять периодические измерения (отсчеты) компонент поля и азимут профиля, а также вычислять модуль напряженности поля и его градиент.
Число пикетов, отсчетов на каждом пикете, а также время измерений задается в программном коде до начала измерений. На каждом пикете выбранного профиля можно произвести от 1 до 10 измерений.
4. Результаты измерений записываются в виде текстовых файлов и хранятся во Flash-памяти микроконтроллера RP2040. При необходимости, текстовые файлы с данными измерений могут быть скопированы или перемещены из памяти микроконтроллера в специальную папку, организованную в файловой системе консоли.
Формат файла с данными измерений:
Дата/Время | Пикет |Отсчет | Азимут (o) | T (uT) | |ΔT (uT)
Например, если в программном коде указаны следующие параметры:
– Число пикетов: 10;
– Число измерений на каждом пикете: 10;
то массив данных измерений (в текстовом формате) будет содержать 100 строк, каждая из которых будет содержать информацию о номере пикета и соответствующими данными измерений.
Съемка проводилась по предварительно подготовленной сети в дневное время, на ровном участке открытой местности размерами 1.5х1.5 м, с шагом профильной сетки 20x20 см.
– количество профилей: 7;
– количество пикетов на каждом профиле: 10;
– количество отсчетов на каждом пикете: 5.
Тип почвы – суглинок, поверхностный горизонт гумусного типа, равномерно покрытый травяным слоем. Влажность почвы по предварительным оценкам составляла 20—30%, при температуре воздуха 23 С.
В приповерхностном слое исследуемой площадки на глубине 100 мм были заранее размещены посторонние обьекты:
– 2 неодимовых магнитных диска (Ø12х 5 мм);
– стальная полоска (150x20x0.5 мм).
На карте изолиний магнитного поля исследуемого участка отчетливо выделяются три аномальные зоны, вносимые магнитными дисками и стальной полоской (Рис. 13):
Рис. 13 – Карта изолиний магнитного поля исследуемого участка.
Полученные результаты имеют статус демострационного теста для оценки неоднородности магнитных свойств исследуемого участка грунта. Для точных измерений и анализа необходимо использовать профессиональную аппаратуру и пакеты программ для микромагнитных съемок и обработки магнитометрических данных.
Рис. 14 – Общий вид модулей макета магнитометра.
Микропроцессор Pico/RP2040 размещен на плате Kitronik и соединяется с консолью с помощью Мicro-USB кабеля. Модуль HMC5883L соединяется с Pico/RP2040.
Рис. 15 – Принципиальная электрическая схема магнитометра.
#magnetometer.py
from machine import I2C, Pin, PWM
from utime import localtime
import time
import math
# HMC5883L address and register addresses
HMC5883L_ADDR = 0x1E
CONFIG_REG_A = 0x00
CONFIG_REG_B = 0x01
MODE_REG = 0x02
DATA_REG = 0x03
# Conversion factor from raw value to uT
# With default gain 1 Ga = 1090 LSb
# And 1 Ga = 100 uT, therefore 1 LSb = 100 uT / 1090 LSb
LSB_TO_UT = 100.0 / 1090.0
# Initialize I2C
i2c = I2C (0, scl=Pin (21), sda=Pin (20), freq=400000)
# Check if HMC5883L is connected
if HMC5883L_ADDR not in i2c.scan ():
raise ValueError («HMC5883L not found’)
# Write configuration to HMC5883L
i2c. writeto_mem (HMC5883L_ADDR, CONFIG_REG_A, bytes ([0x70]))
i2c. writeto_mem (HMC5883L_ADDR, CONFIG_REG_B, bytes ([0x20]))
i2c. writeto_mem (HMC5883L_ADDR, MODE_REG, bytes ([0x00]))
#Initialize button PIN19 GPIO
button = machine.Pin(19,machine.Pin.IN,machine. Pin. PULL_DOWN)
led_red = machine. Pin (17, machine. Pin. OUT)
#Initialize passive buzzer
BUZZER_PIN = 6 # (+) to GP6, (-) to GND
buzzer = PWM (Pin (BUZZER_PIN, Pin. OUT))
numpickets = 10
numcounts = 5
def playNote (frequency, duration, pause) :
global buzzer
#adjust loudness: smaller number is quieter.
buzzer. duty_u16 (8000)
buzzer.freq (frequency)
time.sleep (duration)
buzzer. duty_u16 (0) # loudness set to 0 = sound off
time.sleep (pause)
def write_count (out_file: file, picketnum: int, countnum: int, prev_mod):
data = i2c.readfrom_mem (HMC5883L_ADDR, DATA_REG, 6)
x = ((data [0] <<8) | data [1])
z = ((data [2] <<8) | data [3])
y = ((data [4] <<8) | data [5])
if x> 32767:
x -= 65536
if y> 32767:
y -= 65536
if z> 32767:
z -= 65536
# Convert to uT
x *= LSB_TO_UT
y *= LSB_TO_UT
z *= LSB_TO_UT
# Calculate heading in degrees
heading = math.atan2 (y, x)
# Convert radian to degree
heading = math.degrees (heading)
# If you know the declination in your area, put it instead 0.0
declination_angle = 0.0
heading += declination_angle
# Correct negative values
if heading <0:
heading += 360
fieldmod = math. sqrt (math. pow (x,2) + math. pow (y,2) + math. pow (z,2))
gradient = fieldmod – prev_mod
year, month, day, hour, mins, secs, weekday, yearday = time. localtime ()
print («Дата/Время | Пикет |Отсчет | X (uT): %.2f uT, Y (uT): %.2f uT, Z (uT): %.2f uT, Азимут: %.2f° Модуль: %.2f, Градиент: %.2f» % (x, y, z, heading, fieldmod, gradient))
out_file. write (»{} – {:02d} – {:02d} {}:{}:{}".format (year, month, day, hour, mins, secs) +», " + str (picketnum) +», " + str (countnum) +», " + str (heading) +», " + str (fieldmod) +», " + str (gradient) + "\r\n»)
time.sleep (1.8)
return fieldmod
def write_picket (cur_picket: int):
print («Writing picket " + str (cur_picket))
playNote (2093, 0.2, 0.2)
picket_output_file = open («picket» + str (cur_picket) +». csv», «w»)
picket_output_file. write («Дата/Время, Пикет, Отсчет, Азимут, Модуль, Градиент\r\n»)
res = 0
for count_num in range (0,numcounts):
res = write_count (picket_output_file, cur_picket, count_num, res)
picket_output_file.close ()
playNote (1047, 0.5, 0.5)
#MAIN PROGRAM BELOW:
cur_picket = 1
while cur_picket <= numpickets:
if button.value () == True:
led_red. high ()
write_picket (cur_picket)
led_red. low ()
cur_picket += 1
elif button.value () == False:
time.sleep (0.05)
notes = [1047, 1319, 1568, 2093, 1568, 1319, 1047, 1319, 1568, 2093]
for note in notes :
playNote (note, 0.05, 0.05)
Для запуска MicroPython скриптов необходимо установить приложение Micro REPL, которое можно найти на сайте сервиса приложений Google Play Store по следующей ссылке: https://play.google.com/.
Приложение Micro REPL является средой разработки (IDE) в системе Android, и устанавливается на планшете или мобильном телефоне. Приложение имеет: терминал для доступа к интерактивному интерпретатору, менеджер файлов и редактор MicroPython-скриптов.
Порядок установки приложения следующий:
– Подключите Raspberry Pi Pico к планшету (Galaxy A7 Lite);
– Откройте страницу сервиса приложений Google Play Store;
– Найдите и установите приложение Micro REPL;
– Разместите нужные скрипты используя менеджер файлов.
Рис. 16 – Micro REPL (скриншот 1).
Рис. 17— Micro REPL (скриншот 2).