@jjlmoya/utils-drones 1.36.0 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +17 -5
- package/scripts/postinstall.mjs +2 -4
- package/src/category/index.ts +4 -0
- package/src/components/ProductionBreadcrumb.astro +134 -0
- package/src/components/ProductionStructuredData.astro +46 -0
- package/src/components/ProductionWidget.astro +182 -0
- package/src/entries.ts +4 -0
- package/src/i18n/header-ui.ts +15 -0
- package/src/i18n/language-ui.ts +9 -0
- package/src/i18n/languages.ts +24 -0
- package/src/identity/brands.ts +5 -0
- package/src/layouts/ProductionCategoryPage.astro +184 -0
- package/src/layouts/ProductionPage.astro +218 -0
- package/src/layouts/ProductionUtilityPage.astro +283 -0
- package/src/mfe/assets.ts +39 -0
- package/src/mfe/category-ui.ts +34 -0
- package/src/mfe/manifest.ts +45 -0
- package/src/mfe/routes.ts +50 -0
- package/src/pages/[locale]/[utilities]/[categories]/[category]/[slug]/manifest.json.ts +49 -0
- package/src/pages/[locale]/[utilities]/[categories]/[category]/[slug].astro +100 -0
- package/src/pages/[locale]/[utilities]/[categories]/[category].astro +44 -0
- package/src/pages/index.astro +3 -4
- package/src/pages/utilidades/[slug]/manifest.json.ts +28 -0
- package/src/pages/utilidades/[slug].astro +90 -0
- package/src/pages/utilidades/categorias/[category].astro +38 -0
- package/src/tests/diacritics_density.test.ts +1 -1
- package/src/tests/inverted_punctuation.test.ts +1 -1
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/mfe_cache_contract.test.ts +11 -0
- package/src/tests/mfe_manifest.test.ts +28 -0
- package/src/tests/registry_contract.test.ts +67 -0
- package/src/tests/script_density.test.ts +1 -1
- package/src/tests/seo_length.test.ts +1 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tests/translation_copy.test.ts +2 -2
- package/src/tool/antenna-length-calculator/index.ts +1 -0
- package/src/tool/drone-flight-time/index.ts +1 -0
- package/src/tool/drone-mission-battery-reserve-planner/bibliography.astro +6 -0
- package/src/tool/drone-mission-battery-reserve-planner/bibliography.ts +7 -0
- package/src/tool/drone-mission-battery-reserve-planner/component.astro +229 -0
- package/src/tool/drone-mission-battery-reserve-planner/controller.ts +124 -0
- package/src/tool/drone-mission-battery-reserve-planner/dom-views.ts +114 -0
- package/src/tool/drone-mission-battery-reserve-planner/drone-mission-battery-reserve-planner.css +392 -0
- package/src/tool/drone-mission-battery-reserve-planner/entry.ts +27 -0
- package/src/tool/drone-mission-battery-reserve-planner/evaluator.ts +23 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/de.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/en.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/es.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/fr.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/id.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/it.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/ja.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/ko.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/nl.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/pl.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/pt.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/ru.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/sv.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/tr.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/i18n/zh.ts +223 -0
- package/src/tool/drone-mission-battery-reserve-planner/index.ts +11 -0
- package/src/tool/drone-mission-battery-reserve-planner/logic.test.ts +94 -0
- package/src/tool/drone-mission-battery-reserve-planner/logic.ts +203 -0
- package/src/tool/drone-mission-battery-reserve-planner/seo.astro +15 -0
- package/src/tool/drone-mission-battery-reserve-planner/storage.ts +59 -0
- package/src/tool/drone-mission-battery-reserve-planner/ui.ts +78 -0
- package/src/tool/gps-coordinates-converter/index.ts +1 -0
- package/src/tools.ts +4 -0
- package/src/types.ts +4 -6
- package/src/worker.ts +25 -0
- package/src/pages/[locale]/[slug].astro +0 -161
- package/src/pages/[locale].astro +0 -251
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import type { DroneMissionBatteryReservePlannerLocaleContent } from '../entry';
|
|
2
|
+
import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
|
|
3
|
+
import { bibliography } from '../bibliography';
|
|
4
|
+
|
|
5
|
+
const slug = 'perencana-cadangan-baterai-misi-drone';
|
|
6
|
+
const title = 'Perencana Cadangan Baterai Misi Drone';
|
|
7
|
+
const description = 'Hitung margin cadangan energi kembali ke rumah, penalti angin sakal, dan radius misi aman untuk operasi drone UAV.';
|
|
8
|
+
|
|
9
|
+
const faqItems = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Mengapa terbang melawan angin mengonsumsi lebih banyak daya?',
|
|
12
|
+
answer: 'Terbang melawan angin membutuhkan sudut kemiringan lebih curam untuk mengatasi hambatan udara dan mempertahankan kecepatan darat, yang meningkatkan arus motor secara non-linear.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Bagaimana waktu hover di target memengaruhi titik tidak bisa kembali?',
|
|
16
|
+
answer: 'Waktu hover operasional di area target mengurangi energi baterai yang dapat digunakan sebelum menghitung sisa jarak jelajah aman.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Apa yang menyebabkan penurunan tegangan LiPo di bawah beban berat?',
|
|
20
|
+
answer: 'Penarikan arus tinggi meningkatkan kerugian hambatan internal dalam sel litium, mengurangi Watt-jam efektif yang dapat digunakan.',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const howToSteps = [
|
|
25
|
+
{
|
|
26
|
+
name: 'Masukkan Spesifikasi Baterai & Propulsi',
|
|
27
|
+
text: 'Masukkan kapasitas baterai dalam mAh, tegangan nominal, dan konsumsi arus rata-rata.',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'Atur Jarak Misi & Waktu Hover Target',
|
|
31
|
+
text: 'Tentukan jarak sekali jalan dan durasi hover di area target.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Konfigurasikan Kecepatan & Vektor Angin',
|
|
35
|
+
text: 'Pilih kecepatan angin dan arahnya relatif terhadap jalur keberangkatan.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Tinjau Radius Aman & Telemetri',
|
|
39
|
+
text: 'Analisis titik tidak bisa kembali, konsumsi daya per segmen, dan tingkat baterai saat mendarat.',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const schemas: DroneMissionBatteryReservePlannerLocaleContent['schemas'] = [
|
|
44
|
+
{
|
|
45
|
+
'@context': 'https://schema.org',
|
|
46
|
+
'@type': 'FAQPage',
|
|
47
|
+
mainEntity: faqItems.map((item) => ({
|
|
48
|
+
'@type': 'Question',
|
|
49
|
+
name: item.question,
|
|
50
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
51
|
+
})),
|
|
52
|
+
} as WithContext<FAQPage>,
|
|
53
|
+
{
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description: description,
|
|
58
|
+
step: howToSteps.map((step, i) => ({
|
|
59
|
+
'@type': 'HowToStep',
|
|
60
|
+
position: i + 1,
|
|
61
|
+
name: step.name,
|
|
62
|
+
text: step.text,
|
|
63
|
+
})),
|
|
64
|
+
} as WithContext<HowTo>,
|
|
65
|
+
{
|
|
66
|
+
'@context': 'https://schema.org',
|
|
67
|
+
'@type': 'SoftwareApplication',
|
|
68
|
+
name: title,
|
|
69
|
+
description: description,
|
|
70
|
+
applicationCategory: 'UtilityApplication',
|
|
71
|
+
operatingSystem: 'Web',
|
|
72
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'IDR' },
|
|
73
|
+
} as WithContext<SoftwareApplication>,
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
export const content: DroneMissionBatteryReservePlannerLocaleContent = {
|
|
77
|
+
slug,
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
ui: {
|
|
81
|
+
title: 'Perencana Cadangan Baterai Misi Drone',
|
|
82
|
+
subtitle: 'Hitung margin keselamatan kembali ke rumah dan radius penerbangan',
|
|
83
|
+
description: 'Perencanaan penerbangan drone presisi dengan penyesuaian angin sakal dan ambang batas titik tidak bisa kembali.',
|
|
84
|
+
sections: {
|
|
85
|
+
batteryPropulsion: '1. Baterai & Propulsi',
|
|
86
|
+
flightAtmosphere: '2. Profil Penerbangan & Atmosfer',
|
|
87
|
+
},
|
|
88
|
+
inputs: {
|
|
89
|
+
unitSystemLabel: 'Sistem Unit',
|
|
90
|
+
metricLabel: 'Metrik',
|
|
91
|
+
imperialLabel: 'Imperial',
|
|
92
|
+
presetLabel: 'Preset Misi Cepat',
|
|
93
|
+
batteryCapacityLabel: 'Kapasitas Baterai',
|
|
94
|
+
batteryVoltageLabel: 'Tegangan Nominal',
|
|
95
|
+
averageCurrentLabel: 'Arus Jelajah Rata-rata',
|
|
96
|
+
cruiseSpeedLabel: 'Kecepatan Udara Jelajah',
|
|
97
|
+
oneWayDistanceLabel: 'Jarak Sekali Jalan',
|
|
98
|
+
targetHoverTimeLabel: 'Durasi Operasional Target',
|
|
99
|
+
windSpeedLabel: 'Kecepatan Angin',
|
|
100
|
+
windDirectionLabel: 'Arah Angin Relatif terhadap Keberangkatan',
|
|
101
|
+
windHeadwindLabel: 'Angin Sakal Saat Berangkat',
|
|
102
|
+
windTailwindLabel: 'Angin Buritan Saat Berangkat',
|
|
103
|
+
windCrosswindLabel: 'Angin Samping',
|
|
104
|
+
reservePolicyLabel: 'Buffer Cadangan Keselamatan',
|
|
105
|
+
},
|
|
106
|
+
presets: {
|
|
107
|
+
mappingSurvey: 'Pemetaan Fotogrametri',
|
|
108
|
+
fpvRecon: 'Pengintaian FPV Jarak Jauh',
|
|
109
|
+
cinematicInspection: 'Inspeksi Struktur Sinematik',
|
|
110
|
+
microRecon: 'Misi Drone Mikro',
|
|
111
|
+
surveyMeta: 'pemetaan',
|
|
112
|
+
scoutMeta: 'pengintaian',
|
|
113
|
+
hoverMeta: 'hover',
|
|
114
|
+
},
|
|
115
|
+
results: {
|
|
116
|
+
totalCapacityEnergy: 'Kapasitas Energi Total',
|
|
117
|
+
usableEnergy: 'Energi Misi Yang Dapat Digunakan',
|
|
118
|
+
reserveEnergyBuffer: 'Buffer Energi Cadangan',
|
|
119
|
+
totalAutonomyTime: 'Otonomi Penerbangan Total',
|
|
120
|
+
maxSafeMissionRadius: 'Radius Titik Tidak Bisa Kembali',
|
|
121
|
+
outboundLegTime: 'Durasi Penerbangan Keberangkatan',
|
|
122
|
+
targetHoverTime: 'Durasi Hover Target',
|
|
123
|
+
returnLegTime: 'Durasi Penerbangan Kepulangan',
|
|
124
|
+
totalMissionTime: 'Durasi Transit Total',
|
|
125
|
+
remainingEnergyLanding: 'Perkiraan Baterai Saat Mendarat',
|
|
126
|
+
feasibilityStatus: 'Penilaian Kelayakan Misi',
|
|
127
|
+
voltageSagSubLabel: 'Penurunan tegangan',
|
|
128
|
+
maxRadiusSubLabel: 'Radius aman maks dengan hover target',
|
|
129
|
+
powerSubLabel: 'Daya',
|
|
130
|
+
},
|
|
131
|
+
statusBadges: {
|
|
132
|
+
optimalTitle: 'MARGIN CADANGAN ENERGI OPTIMAL',
|
|
133
|
+
optimalSubtitle: 'Profil penerbangan aman dengan cadangan mendarat yang cukup',
|
|
134
|
+
tightTitle: 'MARGIN CADANGAN ENERGI KETAT',
|
|
135
|
+
tightSubtitle: 'Cadangan mendarat rendah, pantau tegangan baterai secara ketat',
|
|
136
|
+
criticalTitle: 'PERINGATAN ENERGI KRITIS',
|
|
137
|
+
criticalSubtitle: 'Cadangan terlampaui, segera mulai penerbangan kembali',
|
|
138
|
+
exceededTitle: 'MISI MELEBIHI KAPASITAS AMAN',
|
|
139
|
+
exceededSubtitle: 'Energi baterai tidak cukup untuk menyelesaikan misi dengan aman',
|
|
140
|
+
},
|
|
141
|
+
chart: {
|
|
142
|
+
batteryProfileTitle: 'PROFIL ALOKASI ENERGI NON-LINEAR',
|
|
143
|
+
modelTitle: 'MODEL DAYA AERODINAMIS & ANGIN',
|
|
144
|
+
windLabel: 'Angin',
|
|
145
|
+
homeNode: 'RUMAH',
|
|
146
|
+
targetNode: 'TARGET',
|
|
147
|
+
landNode: 'LANDAR',
|
|
148
|
+
launchPadLabel: 'Lokasi lepas landas',
|
|
149
|
+
surveyHoverLabel: 'Hover target',
|
|
150
|
+
safeRadiusLabel: 'Radius aman',
|
|
151
|
+
outboundSegment: 'Berangkat',
|
|
152
|
+
targetSegment: 'Hover',
|
|
153
|
+
returnSegment: 'Kembali',
|
|
154
|
+
reserveSegment: 'Cadangan',
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
seo: [
|
|
158
|
+
{
|
|
159
|
+
type: 'title',
|
|
160
|
+
text: 'Penalti Daya Aerodinamis pada Angin Sakal',
|
|
161
|
+
level: 2,
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
type: 'paragraph',
|
|
165
|
+
html: 'Keselamatan penerbangan drone bergantung pada prinsip fisika aerodinamis non-linear. Terbang melawan angin membutuhkan sudut kemiringan lebih curam untuk mempertahankan kecepatan darat.',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
type: 'paragraph',
|
|
169
|
+
html: 'Perencana kami secara dinamis menghitung variasi daya per segmen berdasarkan kondisi angin.',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
type: 'title',
|
|
173
|
+
text: 'Perhitungan Waktu Hover di Area Target',
|
|
174
|
+
level: 2,
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
type: 'paragraph',
|
|
178
|
+
html: 'Misi pemetaan dan inspeksi membutuhkan waktu hover di area target. Konsumsi ini dikurangi sebelum menghitung radius perjalanan pulang pergi yang aman.',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
type: 'list',
|
|
182
|
+
items: [
|
|
183
|
+
'Masukkan durasi hover sebelum menghitung batas misi.',
|
|
184
|
+
'Antisipasi lonjakan daya saat terbang melawan angin.',
|
|
185
|
+
'Pantau penurunan tegangan LiPo di bawah beban.',
|
|
186
|
+
'Mulai perjalanan kembali begitu mencapai batas cadangan.',
|
|
187
|
+
],
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'tip',
|
|
191
|
+
title: 'Peringatan Penurunan Tegangan Baterai LiPo',
|
|
192
|
+
html: 'Penarikan arus tinggi menyebabkan penurunan tegangan sementara akibat hambatan internal, mengurangi energi efektif.',
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
type: 'title',
|
|
196
|
+
text: 'Formula Perhitungan Cadangan Baterai Drone',
|
|
197
|
+
level: 2,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
type: 'table',
|
|
201
|
+
headers: ['Parameter', 'Formula / Model', 'Unit'],
|
|
202
|
+
rows: [
|
|
203
|
+
['Energi Bruto', 'Kapasitas (mAh) x Tegangan (V) / 1000', 'Watt-jam (Wh)'],
|
|
204
|
+
['Kerugian Sag', 'Energi Bruto x Faktor Sag', 'Watt-jam (Wh)'],
|
|
205
|
+
['Daya dengan Angin', 'Daya Dasar x (1 + 0.65 x RasioAngin)^1.3', 'Watt (W)'],
|
|
206
|
+
['Radius Aman Maks', '(Energi Utilitas - Energi Hover) / Konsumsi per Km', 'Kilometer (km)'],
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
type: 'title',
|
|
211
|
+
text: 'Praktik Terbaik Perencanaan Penerbangan Drone',
|
|
212
|
+
level: 2,
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
type: 'paragraph',
|
|
216
|
+
html: 'Selalu verifikasi data telemetri dengan perhitungan sebelum terbang untuk memastikan tingkat keselamatan terbaik.',
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
faq: faqItems,
|
|
220
|
+
bibliography,
|
|
221
|
+
howTo: howToSteps,
|
|
222
|
+
schemas,
|
|
223
|
+
};
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import type { DroneMissionBatteryReservePlannerLocaleContent } from '../entry';
|
|
2
|
+
import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
|
|
3
|
+
import { bibliography } from '../bibliography';
|
|
4
|
+
|
|
5
|
+
const slug = 'pianificatore-riserva-batteria-missione-drone';
|
|
6
|
+
const title = 'Pianificatore Riserva Batteria Missione Drone';
|
|
7
|
+
const description = 'Calcola margini di sicurezza batteria per ritorno a casa, penali per vento contrario e raggio massimo di volo per droni UAV.';
|
|
8
|
+
|
|
9
|
+
const faqItems = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Perché volare controvento consuma più energia?',
|
|
12
|
+
answer: 'Volare controvento richiede un angolo di pitch più accentuato per vincere la resistenza aerodinamica e mantenere la velocità al suolo, aumentando la corrente in modo non lineare.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'In che modo il tempo di stazionamento influisce sul punto di non ritorno?',
|
|
16
|
+
answer: 'Il tempo trascorso in stazionamento sull obiettivo sottrae direttamente energia dalla batteria prima del calcolo del raggio di volo disponibile.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Cosa causa il calo di tensione LiPo sotto carico?',
|
|
20
|
+
answer: 'Un elevato assorbimento di corrente aumenta le perdite per resistenza interna nelle celle al litio, riducendo i Watt-ora effettivamente utilizzabili.',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const howToSteps = [
|
|
25
|
+
{
|
|
26
|
+
name: 'Inserisci le specifiche della batteria e della propulsione',
|
|
27
|
+
text: 'Imposta la capacità in mAh, la tensione nominale e la corrente media di volo.',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'Imposta la distanza e il tempo sull obiettivo',
|
|
31
|
+
text: 'Specifica la distanza di andata e il tempo previsto in hovering sull area di missione.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Configura la velocità e la direzione del vento',
|
|
35
|
+
text: 'Seleziona la velocità del vento e la sua direzione rispetto alla tratta di andata.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Analizza il raggio sicuro e la telemetria',
|
|
39
|
+
text: 'Esamina il punto di non ritorno calcolato, i consumi per tratta e la carica residua all atterraggio.',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const schemas: DroneMissionBatteryReservePlannerLocaleContent['schemas'] = [
|
|
44
|
+
{
|
|
45
|
+
'@context': 'https://schema.org',
|
|
46
|
+
'@type': 'FAQPage',
|
|
47
|
+
mainEntity: faqItems.map((item) => ({
|
|
48
|
+
'@type': 'Question',
|
|
49
|
+
name: item.question,
|
|
50
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
51
|
+
})),
|
|
52
|
+
} as WithContext<FAQPage>,
|
|
53
|
+
{
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description: description,
|
|
58
|
+
step: howToSteps.map((step, i) => ({
|
|
59
|
+
'@type': 'HowToStep',
|
|
60
|
+
position: i + 1,
|
|
61
|
+
name: step.name,
|
|
62
|
+
text: step.text,
|
|
63
|
+
})),
|
|
64
|
+
} as WithContext<HowTo>,
|
|
65
|
+
{
|
|
66
|
+
'@context': 'https://schema.org',
|
|
67
|
+
'@type': 'SoftwareApplication',
|
|
68
|
+
name: title,
|
|
69
|
+
description: description,
|
|
70
|
+
applicationCategory: 'UtilityApplication',
|
|
71
|
+
operatingSystem: 'Web',
|
|
72
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
73
|
+
} as WithContext<SoftwareApplication>,
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
export const content: DroneMissionBatteryReservePlannerLocaleContent = {
|
|
77
|
+
slug,
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
ui: {
|
|
81
|
+
title: 'Pianificatore Riserva Batteria Missione Drone',
|
|
82
|
+
subtitle: 'Calcola i margini di sicurezza per il ritorno e i raggi di volo',
|
|
83
|
+
description: 'Pianifica le misiones UAV con calcolo preciso delle riserve e correzioni per il vento.',
|
|
84
|
+
sections: {
|
|
85
|
+
batteryPropulsion: '1. Batteria e Propulsione',
|
|
86
|
+
flightAtmosphere: '2. Profilo di Volo e Atmosfera',
|
|
87
|
+
},
|
|
88
|
+
inputs: {
|
|
89
|
+
unitSystemLabel: 'Sistema di Unità',
|
|
90
|
+
metricLabel: 'Metrico',
|
|
91
|
+
imperialLabel: 'Imperiale',
|
|
92
|
+
presetLabel: 'Preset Rapidi di Missione',
|
|
93
|
+
batteryCapacityLabel: 'Capacità Batteria',
|
|
94
|
+
batteryVoltageLabel: 'Tensione Nominale',
|
|
95
|
+
averageCurrentLabel: 'Corrente Media in Crociera',
|
|
96
|
+
cruiseSpeedLabel: 'Velocità Aria in Crociera',
|
|
97
|
+
oneWayDistanceLabel: 'Distanza Solo Andata',
|
|
98
|
+
targetHoverTimeLabel: 'Tempo Operativo sull Obiettivo',
|
|
99
|
+
windSpeedLabel: 'Velocità del Vento',
|
|
100
|
+
windDirectionLabel: 'Direzione del Vento Rispetto all Andata',
|
|
101
|
+
windHeadwindLabel: 'Vento Contro in Andata',
|
|
102
|
+
windTailwindLabel: 'Vento a Favore in Andata',
|
|
103
|
+
windCrosswindLabel: 'Vento Trasversale',
|
|
104
|
+
reservePolicyLabel: 'Buffer Riserva di Sicurezza',
|
|
105
|
+
},
|
|
106
|
+
presets: {
|
|
107
|
+
mappingSurvey: 'Fotogrammetria e Mappatura',
|
|
108
|
+
fpvRecon: 'Ricognizione FPV Long Range',
|
|
109
|
+
cinematicInspection: 'Ispezione Strutturale Cinematografica',
|
|
110
|
+
microRecon: 'Esplorazione Micro Drone',
|
|
111
|
+
surveyMeta: 'mappatura',
|
|
112
|
+
scoutMeta: 'ricognizione',
|
|
113
|
+
hoverMeta: 'stazionamento',
|
|
114
|
+
},
|
|
115
|
+
results: {
|
|
116
|
+
totalCapacityEnergy: 'Energia Totale Capacità',
|
|
117
|
+
usableEnergy: 'Energia Utile di Missione',
|
|
118
|
+
reserveEnergyBuffer: 'Buffer Energia di Riserva',
|
|
119
|
+
totalAutonomyTime: 'Autonomia Totale di Volo',
|
|
120
|
+
maxSafeMissionRadius: 'Raggio Punto di Non Ritorno',
|
|
121
|
+
outboundLegTime: 'Durata Tratta di Andata',
|
|
122
|
+
targetHoverTime: 'Durata Stazionamento Obiettivo',
|
|
123
|
+
returnLegTime: 'Durata Tratta di Ritorno',
|
|
124
|
+
totalMissionTime: 'Durata Totale Transito',
|
|
125
|
+
remainingEnergyLanding: 'Livello Batteria all Atterraggio',
|
|
126
|
+
feasibilityStatus: 'Valutazione Fattibilità Missione',
|
|
127
|
+
voltageSagSubLabel: 'Calo di tensione',
|
|
128
|
+
maxRadiusSubLabel: 'Raggio max con stazionamento',
|
|
129
|
+
powerSubLabel: 'Potenza',
|
|
130
|
+
},
|
|
131
|
+
statusBadges: {
|
|
132
|
+
optimalTitle: 'MARGINE RISERVA ENERGIA OTTIMALE',
|
|
133
|
+
optimalSubtitle: 'Profilo di volo sicuro con riserva sufficiente all atterraggio',
|
|
134
|
+
tightTitle: 'MARGINE RISERVA RISICATO',
|
|
135
|
+
tightSubtitle: 'Riserva bassa all atterraggio, monitora la tensione batteria',
|
|
136
|
+
criticalTitle: 'ALLARME CRITICO ENERGIA',
|
|
137
|
+
criticalSubtitle: 'Riserva superata, avvia il ritorno a casa immediatamente',
|
|
138
|
+
exceededTitle: 'MISSIONE ECCEDE LA CAPACITÀ SICURA',
|
|
139
|
+
exceededSubtitle: 'Energia insufficiente per completare la missione in sicurezza',
|
|
140
|
+
},
|
|
141
|
+
chart: {
|
|
142
|
+
batteryProfileTitle: 'PROFILO NON LINEARE ALLOCAZIONE ENERGETICA',
|
|
143
|
+
modelTitle: 'MODELLO POTENZA AERODINAMICA E VENTO',
|
|
144
|
+
windLabel: 'Vento',
|
|
145
|
+
homeNode: 'BASE',
|
|
146
|
+
targetNode: 'TARGET',
|
|
147
|
+
landNode: 'LAND',
|
|
148
|
+
launchPadLabel: 'Punto di decollo',
|
|
149
|
+
surveyHoverLabel: 'Stazionamento obiettivo',
|
|
150
|
+
safeRadiusLabel: 'Raggio sicuro',
|
|
151
|
+
outboundSegment: 'Andata',
|
|
152
|
+
targetSegment: 'Stazionamento',
|
|
153
|
+
returnSegment: 'Ritorno',
|
|
154
|
+
reserveSegment: 'Riserva',
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
seo: [
|
|
158
|
+
{
|
|
159
|
+
type: 'title',
|
|
160
|
+
text: 'Penalità di Potenza Aerodinamica con Vento Contrario',
|
|
161
|
+
level: 2,
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
type: 'paragraph',
|
|
165
|
+
html: 'La sicurezza dei voli UAV si basa su leggi fisiche non lineari. Volare controvento richiede un inclinazione maggiore per vincere la resistenza e mantenere la velocità desiderata al suolo, aumentando l assorbimento di corrente.',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
type: 'paragraph',
|
|
169
|
+
html: 'Il nostro strumento calcola le variazioni di potenza per ciascuna tratta di volo considerando il vettore vento.',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
type: 'title',
|
|
173
|
+
text: 'Calcolo del Tempo di Stazionamento sull Obiettivo',
|
|
174
|
+
level: 2,
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
type: 'paragraph',
|
|
178
|
+
html: 'Le misiones di fotogrammetria richiedono tempo in hovering sopra l area di lavoro. Questo consumo viene sottratto prima del calcolo del raggio massimo di ritorno.',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
type: 'list',
|
|
182
|
+
items: [
|
|
183
|
+
'Imposta la durata del lavoro sull obiettivo prima dei limiti di volo.',
|
|
184
|
+
'Considera i picchi di potenza durante le tratte controvento.',
|
|
185
|
+
'Monitora il calo di tensione LiPo sotto carico intenso.',
|
|
186
|
+
'Ritorna alla base non appena raggiungi la riserva calcolata.',
|
|
187
|
+
],
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'tip',
|
|
191
|
+
title: 'Avviso sul Calo di Tensione delle Batterie LiPo',
|
|
192
|
+
html: 'Correnti elevate generano cali di tensione temporanei per resistenza interna, riducendo l energia utile effettiva.',
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
type: 'title',
|
|
196
|
+
text: 'Formule per il Calcolo della Riserva Batteria UAV',
|
|
197
|
+
level: 2,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
type: 'table',
|
|
201
|
+
headers: ['Parametro', 'Formula / Modello', 'Unità'],
|
|
202
|
+
rows: [
|
|
203
|
+
['Energia Lorda', 'Capacità (mAh) x Tensione (V) / 1000', 'Watt-ora (Wh)'],
|
|
204
|
+
['Perdita da Sag', 'Energia Lorda x Fattore di Sag', 'Watt-ora (Wh)'],
|
|
205
|
+
['Potenza con Vento', 'Potenza Base x (1 + 0.65 x RatioVento)^1.3', 'Watt (W)'],
|
|
206
|
+
['Raggio Sicuro Max', '(Energia Utile - Energia Hovering) / Consumo per Km', 'Chilometri (km)'],
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
type: 'title',
|
|
211
|
+
text: 'Linee Guida per la Pianificazione dei Voli UAV',
|
|
212
|
+
level: 2,
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
type: 'paragraph',
|
|
216
|
+
html: 'Confronta sempre la telemetria reale con i calcoli teorici prima del volo per garantire massima sicurezza in ogni operazione.',
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
faq: faqItems,
|
|
220
|
+
bibliography,
|
|
221
|
+
howTo: howToSteps,
|
|
222
|
+
schemas,
|
|
223
|
+
};
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import type { DroneMissionBatteryReservePlannerLocaleContent } from '../entry';
|
|
2
|
+
import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
|
|
3
|
+
import { bibliography } from '../bibliography';
|
|
4
|
+
|
|
5
|
+
const slug = 'drone-mission-battery-reserve-planner';
|
|
6
|
+
const title = 'ドローン任務バッテリー予備電力計画ツール';
|
|
7
|
+
const description = 'ドローン飛行任務における安全帰還バッテリー予備電力、向かい風抵抗損失、および最大安全限界半径を計算します。';
|
|
8
|
+
|
|
9
|
+
const faqItems = [
|
|
10
|
+
{
|
|
11
|
+
question: '向かい風飛行時に消費電力が急増する理由は何ですか?',
|
|
12
|
+
answer: '向かい風では、空気抵抗を克服し対地速度を維持するために機体のピッチ角が大きくなり、モーター電流消費が非線形に増加します。',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: '目標地域でのホバリング時間はポイントオブノーリターンにどう影響しますか?',
|
|
16
|
+
answer: '目標空域での作業ホバリング時間はバッテリーエネルギーを直接消費するため、往復可能な安全飛行半径が減少します。',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: '負荷時のLiPoバッテリー電圧降下の原因は何ですか?',
|
|
20
|
+
answer: '大電流放電によりリチウムセルの内部抵抗損失が増加し、実効利用可能ワット時(Wh)が減少するためです。',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const howToSteps = [
|
|
25
|
+
{
|
|
26
|
+
name: 'バッテリーおよび推進仕様を入力',
|
|
27
|
+
text: 'バッテリー容量(mAh)、定格電圧(V)、および平均巡航電流(A)を入力します。',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: '片道距離と目標ホバリング時間を設定',
|
|
31
|
+
text: '目標地点までの片道距離と現場での作業時間を指定します。',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: '風速と風向を設定',
|
|
35
|
+
text: '往路に対する風速と風向を選択し、空気力学的な電力補正を適用します。',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: '安全半径とテレメトリを確認',
|
|
39
|
+
text: '計算されたポイントオブノーリターン、区間ごとの消費電力、および着陸時の予想残量を検証します。',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const schemas: DroneMissionBatteryReservePlannerLocaleContent['schemas'] = [
|
|
44
|
+
{
|
|
45
|
+
'@context': 'https://schema.org',
|
|
46
|
+
'@type': 'FAQPage',
|
|
47
|
+
mainEntity: faqItems.map((item) => ({
|
|
48
|
+
'@type': 'Question',
|
|
49
|
+
name: item.question,
|
|
50
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
51
|
+
})),
|
|
52
|
+
} as WithContext<FAQPage>,
|
|
53
|
+
{
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: title,
|
|
57
|
+
description: description,
|
|
58
|
+
step: howToSteps.map((step, i) => ({
|
|
59
|
+
'@type': 'HowToStep',
|
|
60
|
+
position: i + 1,
|
|
61
|
+
name: step.name,
|
|
62
|
+
text: step.text,
|
|
63
|
+
})),
|
|
64
|
+
} as WithContext<HowTo>,
|
|
65
|
+
{
|
|
66
|
+
'@context': 'https://schema.org',
|
|
67
|
+
'@type': 'SoftwareApplication',
|
|
68
|
+
name: title,
|
|
69
|
+
description: description,
|
|
70
|
+
applicationCategory: 'UtilityApplication',
|
|
71
|
+
operatingSystem: 'Web',
|
|
72
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'JPY' },
|
|
73
|
+
} as WithContext<SoftwareApplication>,
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
export const content: DroneMissionBatteryReservePlannerLocaleContent = {
|
|
77
|
+
slug,
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
ui: {
|
|
81
|
+
title: 'ドローン任務バッテリー予備電力計画ツール',
|
|
82
|
+
subtitle: '帰還安全マージン、風の影響および飛行半径の計算',
|
|
83
|
+
description: '向かい風補正と帰還限界閾値を備えた高精度ドローンバッテリー予備電力計画ツール。',
|
|
84
|
+
sections: {
|
|
85
|
+
batteryPropulsion: '1. バッテリー&推進システム',
|
|
86
|
+
flightAtmosphere: '2. 飛行プロフィール&気象',
|
|
87
|
+
},
|
|
88
|
+
inputs: {
|
|
89
|
+
unitSystemLabel: '単位系',
|
|
90
|
+
metricLabel: 'メートル法',
|
|
91
|
+
imperialLabel: 'ヤード・ポンド法',
|
|
92
|
+
presetLabel: 'クイックプリセット',
|
|
93
|
+
batteryCapacityLabel: 'バッテリー容量',
|
|
94
|
+
batteryVoltageLabel: '定格電圧',
|
|
95
|
+
averageCurrentLabel: '平均巡航電流',
|
|
96
|
+
cruiseSpeedLabel: '対気巡航速度',
|
|
97
|
+
oneWayDistanceLabel: '片道目標距離',
|
|
98
|
+
targetHoverTimeLabel: '目標空域作業時間',
|
|
99
|
+
windSpeedLabel: '風速',
|
|
100
|
+
windDirectionLabel: '往路に対する風向',
|
|
101
|
+
windHeadwindLabel: '往路向かい風',
|
|
102
|
+
windTailwindLabel: '往路追い風',
|
|
103
|
+
windCrosswindLabel: '横風',
|
|
104
|
+
reservePolicyLabel: '安全予備マージン',
|
|
105
|
+
},
|
|
106
|
+
presets: {
|
|
107
|
+
mappingSurvey: '測量&マッピング',
|
|
108
|
+
fpvRecon: 'FPV長距離偵察',
|
|
109
|
+
cinematicInspection: '構造物点検撮影',
|
|
110
|
+
microRecon: 'マイクロドローン偵察',
|
|
111
|
+
surveyMeta: '測量',
|
|
112
|
+
scoutMeta: '偵察',
|
|
113
|
+
hoverMeta: 'ホバリング',
|
|
114
|
+
},
|
|
115
|
+
results: {
|
|
116
|
+
totalCapacityEnergy: '総エネルギー容量',
|
|
117
|
+
usableEnergy: '任務利用可能エネルギー',
|
|
118
|
+
reserveEnergyBuffer: '安全予備エネルギー',
|
|
119
|
+
totalAutonomyTime: '総飛行可能時間',
|
|
120
|
+
maxSafeMissionRadius: '限界帰還半径',
|
|
121
|
+
outboundLegTime: '往路飛行時間',
|
|
122
|
+
targetHoverTime: '目標滞空時間',
|
|
123
|
+
returnLegTime: '復路飛行時間',
|
|
124
|
+
totalMissionTime: '総移動時間',
|
|
125
|
+
remainingEnergyLanding: '着陸時予想バッテリー残量',
|
|
126
|
+
feasibilityStatus: '任務実現可能性評価',
|
|
127
|
+
voltageSagSubLabel: '電圧降下損失',
|
|
128
|
+
maxRadiusSubLabel: '作業時間を考慮した最大安全半径',
|
|
129
|
+
powerSubLabel: '電力',
|
|
130
|
+
},
|
|
131
|
+
statusBadges: {
|
|
132
|
+
optimalTitle: '最適予備電力マージン',
|
|
133
|
+
optimalSubtitle: '十分な着陸予備電力を持つ安全飛行領域',
|
|
134
|
+
tightTitle: '予備電力不足警戒',
|
|
135
|
+
tightSubtitle: '着陸予備電力が少数です。電圧降下に注意してください',
|
|
136
|
+
criticalTitle: '緊急エネルギー警報',
|
|
137
|
+
criticalSubtitle: '予備電力を超過しました。直ちに帰還を開始してください',
|
|
138
|
+
exceededTitle: '安全容量超過任務',
|
|
139
|
+
exceededSubtitle: '安全に着陸するためのバッテリー電力が不足しています',
|
|
140
|
+
},
|
|
141
|
+
chart: {
|
|
142
|
+
batteryProfileTitle: '非線形配分エネルギープロフィール',
|
|
143
|
+
modelTitle: '空気力学パワー&風力モデル',
|
|
144
|
+
windLabel: '風速',
|
|
145
|
+
homeNode: '拠点',
|
|
146
|
+
targetNode: '目標',
|
|
147
|
+
landNode: '着陸',
|
|
148
|
+
launchPadLabel: '離陸地点',
|
|
149
|
+
surveyHoverLabel: '目標ホバリング',
|
|
150
|
+
safeRadiusLabel: '安全半径',
|
|
151
|
+
outboundSegment: '往路飛行',
|
|
152
|
+
targetSegment: '目標作業',
|
|
153
|
+
returnSegment: '復路飛行',
|
|
154
|
+
reserveSegment: '予備電力',
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
seo: [
|
|
158
|
+
{
|
|
159
|
+
type: 'title',
|
|
160
|
+
text: '向かい風飛行における空気力学的パワー損失',
|
|
161
|
+
level: 2,
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
type: 'paragraph',
|
|
165
|
+
html: '無人航空機の飛行安全は非線形な空気力学に基づいています。向かい風の中での飛行は対地速度を維持するために機体のピッチ角を大きくする必要があり、モーター消費電力が急増します。',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
type: 'paragraph',
|
|
169
|
+
html: '当ツールの計算エンジンは、風向と風速に応じて各飛行区間の消費電力を動的に算出します。',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
type: 'title',
|
|
173
|
+
text: '目標空域でのホバリング時間の考慮',
|
|
174
|
+
level: 2,
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
type: 'paragraph',
|
|
178
|
+
html: '測量や点検の任務では現場上空でのホバリングが必要です。この消費電力は復路の最大半径を計算する前にあらかじめ減算されます。',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
type: 'list',
|
|
182
|
+
items: [
|
|
183
|
+
'限界計算を行う前に目標空域での作業時間を設定してください。',
|
|
184
|
+
'向かい風区間における電力スパイクを考慮してください。',
|
|
185
|
+
'高負荷時のLiPoセル電圧降下を追跡してください。',
|
|
186
|
+
'設定した予備ラインに達したら直ちに帰還を開始してください。',
|
|
187
|
+
],
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'tip',
|
|
191
|
+
title: 'LiPoバッテリーの電圧降下に関する警告',
|
|
192
|
+
html: '高電流放電は内部抵抗による電圧降下を引き起こし、実質的な利用可能エネルギーを減衰させます。',
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
type: 'title',
|
|
196
|
+
text: 'ドローンバッテリー予備電力の計算式',
|
|
197
|
+
level: 2,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
type: 'table',
|
|
201
|
+
headers: ['パラメータ', '計算モデル', '単位'],
|
|
202
|
+
rows: [
|
|
203
|
+
['総エネルギー容量', '容量 (mAh) x 電圧 (V) / 1000', 'ワット時 (Wh)'],
|
|
204
|
+
['電圧降下損失', '総エネルギー x サグ係数', 'ワット時 (Wh)'],
|
|
205
|
+
['向かい風電力', '基本電力 x (1 + 0.65 x 風比率)^1.3', 'ワット (W)'],
|
|
206
|
+
['最大安全半径', '(利用可能エネルギー - ホバリング電力) / Kmあたり消費', 'キロメートル (km)'],
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
type: 'title',
|
|
211
|
+
text: 'UAV飛行計画におけるベストプラクティス',
|
|
212
|
+
level: 2,
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
type: 'paragraph',
|
|
216
|
+
html: '商業運航の安全性を維持するために、事前計算値と実際のテレメトリログを常に照合してください。',
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
faq: faqItems,
|
|
220
|
+
bibliography,
|
|
221
|
+
howTo: howToSteps,
|
|
222
|
+
schemas,
|
|
223
|
+
};
|