@jjlmoya/utils-drones 1.35.0 → 1.37.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.
Files changed (63) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +4 -0
  3. package/src/entries.ts +8 -0
  4. package/src/index.ts +1 -0
  5. package/src/tests/locale_completeness.test.ts +2 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/drone-mission-battery-reserve-planner/bibliography.astro +6 -0
  8. package/src/tool/drone-mission-battery-reserve-planner/bibliography.ts +7 -0
  9. package/src/tool/drone-mission-battery-reserve-planner/component.astro +229 -0
  10. package/src/tool/drone-mission-battery-reserve-planner/controller.ts +124 -0
  11. package/src/tool/drone-mission-battery-reserve-planner/dom-views.ts +114 -0
  12. package/src/tool/drone-mission-battery-reserve-planner/drone-mission-battery-reserve-planner.css +392 -0
  13. package/src/tool/drone-mission-battery-reserve-planner/entry.ts +27 -0
  14. package/src/tool/drone-mission-battery-reserve-planner/evaluator.ts +23 -0
  15. package/src/tool/drone-mission-battery-reserve-planner/i18n/de.ts +223 -0
  16. package/src/tool/drone-mission-battery-reserve-planner/i18n/en.ts +223 -0
  17. package/src/tool/drone-mission-battery-reserve-planner/i18n/es.ts +223 -0
  18. package/src/tool/drone-mission-battery-reserve-planner/i18n/fr.ts +223 -0
  19. package/src/tool/drone-mission-battery-reserve-planner/i18n/id.ts +223 -0
  20. package/src/tool/drone-mission-battery-reserve-planner/i18n/it.ts +223 -0
  21. package/src/tool/drone-mission-battery-reserve-planner/i18n/ja.ts +223 -0
  22. package/src/tool/drone-mission-battery-reserve-planner/i18n/ko.ts +223 -0
  23. package/src/tool/drone-mission-battery-reserve-planner/i18n/nl.ts +223 -0
  24. package/src/tool/drone-mission-battery-reserve-planner/i18n/pl.ts +223 -0
  25. package/src/tool/drone-mission-battery-reserve-planner/i18n/pt.ts +223 -0
  26. package/src/tool/drone-mission-battery-reserve-planner/i18n/ru.ts +223 -0
  27. package/src/tool/drone-mission-battery-reserve-planner/i18n/sv.ts +223 -0
  28. package/src/tool/drone-mission-battery-reserve-planner/i18n/tr.ts +223 -0
  29. package/src/tool/drone-mission-battery-reserve-planner/i18n/zh.ts +223 -0
  30. package/src/tool/drone-mission-battery-reserve-planner/index.ts +11 -0
  31. package/src/tool/drone-mission-battery-reserve-planner/logic.test.ts +94 -0
  32. package/src/tool/drone-mission-battery-reserve-planner/logic.ts +203 -0
  33. package/src/tool/drone-mission-battery-reserve-planner/seo.astro +15 -0
  34. package/src/tool/drone-mission-battery-reserve-planner/storage.ts +59 -0
  35. package/src/tool/drone-mission-battery-reserve-planner/ui.ts +78 -0
  36. package/src/tool/fpv-drone-speed-calculator/bibliography.astro +6 -0
  37. package/src/tool/fpv-drone-speed-calculator/bibliography.ts +14 -0
  38. package/src/tool/fpv-drone-speed-calculator/component.astro +115 -0
  39. package/src/tool/fpv-drone-speed-calculator/controller.ts +105 -0
  40. package/src/tool/fpv-drone-speed-calculator/dom-views.ts +80 -0
  41. package/src/tool/fpv-drone-speed-calculator/entry.ts +27 -0
  42. package/src/tool/fpv-drone-speed-calculator/fpv-drone-speed-calculator.css +558 -0
  43. package/src/tool/fpv-drone-speed-calculator/i18n/de.ts +20 -0
  44. package/src/tool/fpv-drone-speed-calculator/i18n/en.ts +47 -0
  45. package/src/tool/fpv-drone-speed-calculator/i18n/es.ts +40 -0
  46. package/src/tool/fpv-drone-speed-calculator/i18n/fr.ts +13 -0
  47. package/src/tool/fpv-drone-speed-calculator/i18n/id.ts +13 -0
  48. package/src/tool/fpv-drone-speed-calculator/i18n/it.ts +13 -0
  49. package/src/tool/fpv-drone-speed-calculator/i18n/ja.ts +13 -0
  50. package/src/tool/fpv-drone-speed-calculator/i18n/ko.ts +13 -0
  51. package/src/tool/fpv-drone-speed-calculator/i18n/nl.ts +13 -0
  52. package/src/tool/fpv-drone-speed-calculator/i18n/pl.ts +13 -0
  53. package/src/tool/fpv-drone-speed-calculator/i18n/pt.ts +13 -0
  54. package/src/tool/fpv-drone-speed-calculator/i18n/ru.ts +13 -0
  55. package/src/tool/fpv-drone-speed-calculator/i18n/sv.ts +13 -0
  56. package/src/tool/fpv-drone-speed-calculator/i18n/tr.ts +13 -0
  57. package/src/tool/fpv-drone-speed-calculator/i18n/zh.ts +13 -0
  58. package/src/tool/fpv-drone-speed-calculator/index.ts +11 -0
  59. package/src/tool/fpv-drone-speed-calculator/logic.test.ts +53 -0
  60. package/src/tool/fpv-drone-speed-calculator/logic.ts +126 -0
  61. package/src/tool/fpv-drone-speed-calculator/seo.astro +16 -0
  62. package/src/tool/fpv-drone-speed-calculator/ui.ts +47 -0
  63. package/src/tools.ts +7 -0
@@ -0,0 +1,47 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+
6
+ const slug = 'fpv-drone-speed-calculator';
7
+ const title = 'FPV Drone Speed Calculator';
8
+ const description = 'Estimate an FPV drone propeller speed from motor KV, battery voltage, propeller pitch, efficiency and aircraft mass, with slip and sensitivity shown separately.';
9
+
10
+ const ui = {
11
+ presetsLabel: 'Start with a flight setup', presetRacing: 'Racing 4S', presetFreestyle: 'Freestyle 6S', presetCruiser: 'Cruiser 7 inch',
12
+ unitsLabel: 'Display units', metricUnit: 'Metric', imperialUnit: 'Imperial', inputsLabel: 'Flight recipe', motorKvLabel: 'Motor KV', batteryVoltageLabel: 'Battery voltage', propellerPitchLabel: 'Propeller pitch', efficiencyLabel: 'Efficiency estimate', aircraftMassLabel: 'Aircraft mass', calculateFromLabel: 'Build the estimate from five inputs', resultsLabel: 'Flight trace', estimatedSpeedLabel: 'Estimated forward speed', pitchSpeedLabel: 'No-slip pitch speed', loadedRpmLabel: 'Loaded motor speed', noLoadRpmLabel: 'No-load RPM', slipLabel: 'Speed left as slip', loadEffectLabel: 'Load correction', speedLaneLabel: 'Propeller speed lane', sensitivityLabel: 'One change at a time', lowerPitchLabel: 'Lower pitch', selectedPitchLabel: 'Selected pitch', higherPitchLabel: 'Higher pitch', diagnosisLabel: 'Reading', diagnosisPlanning: 'Planning estimate', diagnosisHighSlip: 'High slip', diagnosisHeavyLoad: 'Heavy load', diagnosisOverspeed: 'Check RPM', diagnosisPlanningAdvice: 'Use this as a first sizing estimate, then compare it with a manufacturer chart or a thrust-stand test.', diagnosisHighSlipAdvice: 'The selected efficiency leaves a wide gap between geometric pitch speed and forward speed. Check propeller loading, battery sag and motor temperature.', diagnosisHeavyLoadAdvice: 'The aircraft mass makes the load correction more influential. Treat the speed as a broad planning range and validate the complete powertrain.', diagnosisOverspeedAdvice: 'The no-load RPM is unusually high for this setup. Check the motor, battery and propeller limits before applying power.', assumptionsLabel: 'Model boundary.', assumptionsText: 'Pitch speed is geometric: pitch x loaded RPM. Efficiency is a user-entered proxy for slip; aircraft mass applies a small transparent load correction. The model has no propeller diameter, thrust curve or wind data.', safetyText: 'This is not a flight guarantee. Keep clear of the propeller and validate current, temperature, vibration and speed in a controlled test.', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: 'no-load', loadedCaption: 'loaded', slipCaption: 'slip', massUnit: 'g', speedUnit: 'km/h',
13
+ } satisfies Record<string, string>;
14
+
15
+ const faq = [
16
+ { question: 'How is FPV drone pitch speed calculated?', answer: 'The calculator multiplies propeller pitch by loaded revolutions per minute and converts inches per revolution into kilometres per hour. That is a geometric no-slip speed, not a promise of airspeed.' },
17
+ { question: 'What does efficiency mean in this speed estimate?', answer: 'Efficiency is an explicit planning proxy for the gap between geometric pitch speed and estimated forward speed. It does not replace a propeller performance map or a flight test.' },
18
+ { question: 'Why does aircraft mass affect the result?', answer: 'A heavier aircraft generally loads the powertrain more, so the tool applies a small bounded RPM correction. Without propeller diameter, thrust data and motor torque data, this correction is only a transparent heuristic.' },
19
+ { question: 'Can this calculator confirm my drone is safe to fly?', answer: 'No. It cannot validate a motor, ESC, battery, propeller, frame or flight controller. Check manufacturer limits and verify the setup on a restrained test stand before flight.' },
20
+ { question: 'Why is the real speed lower than pitch speed?', answer: 'Geometric pitch assumes the propeller advances its stated distance every revolution. Slip, blade shape, airflow, voltage sag, loading and installation losses reduce the useful forward speed.' },
21
+ ];
22
+
23
+ const howTo = [
24
+ { name: 'Enter the powertrain', text: 'Enter motor KV and the battery voltage you expect under load, not only the nominal pack label.' },
25
+ { name: 'Describe the propeller and aircraft', text: 'Enter geometric pitch, a conservative efficiency estimate and ready-to-fly aircraft mass. Use the presets when you need a starting point.' },
26
+ { name: 'Read the trace and validate it', text: 'Compare estimated speed with no-slip pitch speed, slip and the pitch sensitivity view. Treat the result as a test plan and verify the complete powertrain safely.' },
27
+ ];
28
+
29
+ const seo: SEOSection[] = [
30
+ { type: 'title', text: 'Estimate FPV Drone Speed from Propeller Pitch', level: 2 },
31
+ { type: 'paragraph', html: 'An FPV drone speed estimate starts with the distance a fixed-pitch propeller would advance in one revolution. Motor KV and battery voltage provide a first RPM estimate, while efficiency and aircraft mass help frame a conservative planning number. This calculator keeps the geometric pitch speed and the estimated forward speed visible together so you can see the assumptions instead of confusing them with a measured result.' },
32
+ { type: 'title', text: 'What the speed trace means', level: 2 },
33
+ { type: 'table', headers: ['Signal', 'Interpretation'], rows: [['No-slip pitch speed', 'Pitch multiplied by loaded RPM. It assumes the propeller advances its nominal pitch every revolution.'], ['Estimated forward speed', 'The no-slip value multiplied by the efficiency proxy you entered.'], ['Speed left as slip', 'The percentage gap between geometric pitch speed and estimated forward speed.'], ['Pitch sensitivity', 'The result if the same setup used a propeller with 0.5 inch less or more pitch.']] },
34
+ { type: 'title', text: 'A practical way to use the estimate', level: 2 },
35
+ { type: 'list', items: ['Use the battery voltage expected under load rather than an optimistic full-charge value.', 'Start with a known motor and propeller combination or a manufacturer data point.', 'Treat a high slip reading as a prompt to inspect loading, voltage sag and propeller choice.', 'Validate current, temperature, vibration and actual speed in a controlled test before flight.'] },
36
+ { type: 'title', text: 'Why the model has limits', level: 2 },
37
+ { type: 'paragraph', html: 'Propeller performance changes across advance ratio, blade geometry, air density, inflow and operating angle. Research models for UAV propellers use measured or identified aerodynamic data across operating conditions. This lightweight calculator is deliberately narrower: it is useful for comparing a few setup assumptions, but it cannot replace a propeller chart, thrust stand or flight instrumentation.' },
38
+ { type: 'tip', title: 'Use the gap as a decision signal', html: 'If a setup looks fast only because its no-slip number is high, inspect the gap to the efficiency-adjusted estimate. A lower-pitch propeller may trade headline speed for a more manageable load and better response, but that choice still needs a real powertrain check.' },
39
+ ];
40
+
41
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [
42
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>,
43
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>,
44
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } } as WithContext<SoftwareApplication>,
45
+ ];
46
+
47
+ export const content: FpvDroneSpeedLocaleContent = { slug, title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
@@ -0,0 +1,40 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+
6
+ const slug = 'calculadora-velocidad-drone-fpv';
7
+ const title = 'Calculadora de Velocidad para Drones FPV';
8
+ const description = 'Estima la velocidad de un dron FPV a partir del KV del motor, el voltaje, el paso de hélice, la eficiencia y la masa de la aeronave, mostrando el deslizamiento y la sensibilidad.';
9
+ const ui = {
10
+ presetsLabel: 'Empieza con un montaje', presetRacing: 'Carreras 4S', presetFreestyle: 'Freestyle 6S', presetCruiser: 'Crucero 7 pulgadas', unitsLabel: 'Unidades de pantalla', metricUnit: 'Métrico', imperialUnit: 'Imperial', inputsLabel: 'Receta de vuelo', motorKvLabel: 'KV del motor', batteryVoltageLabel: 'Voltaje de batería', propellerPitchLabel: 'Paso de hélice', efficiencyLabel: 'Estimación de eficiencia', aircraftMassLabel: 'Masa de la aeronave', calculateFromLabel: 'Construye la estimación con cinco datos', resultsLabel: 'Trazado de vuelo', estimatedSpeedLabel: 'Velocidad de avance estimada', pitchSpeedLabel: 'Velocidad de paso sin deslizamiento', loadedRpmLabel: 'Velocidad cargada del motor', noLoadRpmLabel: 'RPM sin carga', slipLabel: 'Velocidad perdida por deslizamiento', loadEffectLabel: 'Corrección por carga', speedLaneLabel: 'Carril de velocidad de la hélice', sensitivityLabel: 'Cambia una cosa cada vez', lowerPitchLabel: 'Paso menor', selectedPitchLabel: 'Paso elegido', higherPitchLabel: 'Paso mayor', diagnosisLabel: 'Lectura', diagnosisPlanning: 'Estimación de planificación', diagnosisHighSlip: 'Deslizamiento alto', diagnosisHeavyLoad: 'Carga alta', diagnosisOverspeed: 'Revisa las RPM', diagnosisPlanningAdvice: 'Úsalo como primera comparación y contrástalo con una tabla del fabricante o un ensayo en banco.', diagnosisHighSlipAdvice: 'La eficiencia elegida deja una brecha amplia entre la velocidad geométrica y el avance. Revisa carga, caída de voltaje y temperatura.', diagnosisHeavyLoadAdvice: 'La masa da más peso a la corrección de carga. Trata la velocidad como un rango amplio y valida todo el conjunto.', diagnosisOverspeedAdvice: 'Las RPM sin carga son inusualmente altas. Comprueba los límites del motor, la batería y la hélice antes de aplicar potencia.', assumptionsLabel: 'Límite del modelo.', assumptionsText: 'La velocidad de paso es geométrica: paso x RPM cargadas. La eficiencia es un indicador introducido por el usuario para aproximar el deslizamiento; la masa aplica una corrección de carga pequeña y transparente. No se usan diámetro, curva de empuje ni viento.', safetyText: 'No es una garantía de vuelo. Mantén distancia de la hélice y valida corriente, temperatura, vibraciones y velocidad en una prueba controlada.', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: 'sin carga', loadedCaption: 'cargado', slipCaption: 'deslizamiento', massUnit: 'g', speedUnit: 'km/h',
11
+ } satisfies Record<string, string>;
12
+ const faq = [
13
+ { question: '¿Cómo se calcula la velocidad de paso de un dron FPV?', answer: 'Se multiplica el paso de la hélice por las revoluciones por minuto cargadas y se convierten las pulgadas por revolución a kilómetros por hora. Es una velocidad geométrica sin deslizamiento, no una promesa de velocidad aérea.' },
14
+ { question: '¿Qué significa la eficiencia en esta estimación?', answer: 'La eficiencia es un indicador de planificación que representa la distancia entre la velocidad geométrica y el avance estimado. No sustituye una curva de rendimiento ni una prueba de vuelo.' },
15
+ { question: '¿Por qué influye la masa de la aeronave?', answer: 'Una aeronave pesada suele cargar más el sistema, por lo que la herramienta aplica una corrección de RPM pequeña y limitada. Sin diámetro, empuje y par del motor, solo es una heurística transparente.' },
16
+ { question: '¿Confirma esta calculadora que el dron es seguro?', answer: 'No. No valida motor, ESC, batería, hélice, estructura ni controlador. Comprueba los límites del fabricante y verifica el conjunto en un banco sujeto antes de volar.' },
17
+ { question: '¿Por qué la velocidad real es menor que la de paso?', answer: 'La velocidad geométrica supone que la hélice avanza su paso nominal en cada vuelta. El deslizamiento, la forma de las palas, la caída de voltaje, la carga y las pérdidas de montaje reducen el avance útil.' },
18
+ ];
19
+ const howTo = [
20
+ { name: 'Introduce la propulsión', text: 'Escribe el KV del motor y el voltaje que esperas bajo carga, no solo el valor nominal de la batería.' },
21
+ { name: 'Describe la hélice y el dron', text: 'Introduce el paso geométrico, una eficiencia prudente y la masa lista para volar. Usa un preset si necesitas un punto de partida.' },
22
+ { name: 'Lee el trazado y valida', text: 'Compara la velocidad estimada con la de paso, el deslizamiento y la sensibilidad. Convierte el resultado en un plan de prueba y valida la propulsión con seguridad.' },
23
+ ];
24
+ const seo: SEOSection[] = [
25
+ { type: 'title', text: 'Estimar la velocidad de un dron FPV con el paso de hélice', level: 2 },
26
+ { type: 'paragraph', html: 'Una estimación de velocidad para un dron FPV parte de la distancia que una hélice de paso fijo avanzaría en una vuelta. El KV y el voltaje proporcionan una primera aproximación de las RPM; la eficiencia y la masa ayudan a encuadrar una cifra de planificación. La calculadora mantiene visibles la velocidad geométrica y el avance estimado para que las hipótesis no se confundan con una medición.' },
27
+ { type: 'title', text: 'Qué significa el trazado de velocidad', level: 2 },
28
+ { type: 'table', headers: ['Señal', 'Interpretación'], rows: [['Velocidad de paso sin deslizamiento', 'Paso multiplicado por las RPM cargadas. Supone que la hélice avanza su paso nominal en cada vuelta.'], ['Velocidad de avance estimada', 'El valor sin deslizamiento multiplicado por la eficiencia introducida.'], ['Velocidad perdida por deslizamiento', 'Porcentaje de diferencia entre velocidad geométrica y avance estimado.'], ['Sensibilidad al paso', 'Resultado si el mismo montaje usara 0,5 pulgadas menos o más de paso.']] },
29
+ { type: 'title', text: 'Cómo usar la estimación', level: 2 },
30
+ { type: 'list', items: ['Usa el voltaje esperado bajo carga y no un valor optimista de batería recién cargada.', 'Parte de una combinación de motor y hélice conocida o de datos del fabricante.', 'Interpreta un deslizamiento alto como señal para revisar carga, caída de voltaje y elección de hélice.', 'Verifica corriente, temperatura, vibraciones y velocidad real en una prueba controlada antes de volar.'] },
31
+ { type: 'title', text: 'Por qué el modelo tiene límites', level: 2 },
32
+ { type: 'paragraph', html: 'El rendimiento de una hélice cambia con el avance, la geometría de las palas, la densidad del aire, la entrada de flujo y el ángulo de operación. Los modelos de hélices UAV de investigación usan datos medidos o identificados para cubrir esas condiciones. Esta calculadora es más estrecha: sirve para comparar hipótesis de montaje, pero no reemplaza una tabla de hélice, un banco de empuje ni instrumentación de vuelo.' },
33
+ { type: 'tip', title: 'Usa la brecha para decidir', html: 'Si un montaje parece rápido solo porque su cifra sin deslizamiento es alta, revisa la distancia hasta la estimación ajustada por eficiencia. Una hélice de menor paso puede cambiar velocidad máxima por una carga más manejable, pero también necesita una comprobación real.' },
34
+ ];
35
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [
36
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>,
37
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>,
38
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>,
39
+ ];
40
+ export const content: FpvDroneSpeedLocaleContent = { slug, title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'Calculateur de vitesse pour drone FPV';
6
+ const description = 'Estimez la vitesse d avance d un drone FPV avec le KV moteur, la tension, le pas d hélice, le rendement et la masse, avec le glissement détaillé.';
7
+ const ui = { presetsLabel: 'Commencer avec un réglage', presetRacing: 'Course 4S', presetFreestyle: 'Freestyle 6S', presetCruiser: 'Croisière 7 pouces', unitsLabel: 'Unités affichées', metricUnit: 'Métrique', imperialUnit: 'Impérial', inputsLabel: 'Recette de vol', motorKvLabel: 'KV du moteur', batteryVoltageLabel: 'Tension de batterie', propellerPitchLabel: 'Pas d hélice', efficiencyLabel: 'Rendement estimé', aircraftMassLabel: 'Masse de l appareil', calculateFromLabel: 'Construire l estimation avec cinq données', resultsLabel: 'Trace de vol', estimatedSpeedLabel: 'Vitesse d avance estimée', pitchSpeedLabel: 'Vitesse de pas sans glissement', loadedRpmLabel: 'Régime moteur en charge', noLoadRpmLabel: 'Régime à vide', slipLabel: 'Vitesse perdue par glissement', loadEffectLabel: 'Correction de charge', speedLaneLabel: 'Piste de vitesse de l hélice', sensitivityLabel: 'Une seule modification à la fois', lowerPitchLabel: 'Pas inférieur', selectedPitchLabel: 'Pas choisi', higherPitchLabel: 'Pas supérieur', diagnosisLabel: 'Lecture', diagnosisPlanning: 'Estimation de planification', diagnosisHighSlip: 'Glissement élevé', diagnosisHeavyLoad: 'Charge élevée', diagnosisOverspeed: 'Vérifier le régime', diagnosisPlanningAdvice: 'Utilisez ceci comme première comparaison puis consultez une courbe constructeur ou un banc d essai.', diagnosisHighSlipAdvice: 'Le rendement choisi crée un écart important entre vitesse géométrique et avance. Vérifiez la charge, la chute de tension et la température.', diagnosisHeavyLoadAdvice: 'La masse rend la correction de charge plus influente. Traitez la vitesse comme une plage et validez toute la propulsion.', diagnosisOverspeedAdvice: 'Le régime à vide est inhabituellement élevé. Vérifiez les limites du moteur, de la batterie et de l hélice avant la mise sous tension.', assumptionsLabel: 'Limite du modèle.', assumptionsText: 'La vitesse de pas est géométrique: pas multiplié par le régime chargé. Le rendement est un indicateur de glissement fourni par l utilisateur; la masse applique une petite correction transparente. Le diamètre, la courbe de poussée et le vent ne sont pas modélisés.', safetyText: 'Ce résultat ne garantit pas le vol. Éloignez vous de l hélice et vérifiez courant, température, vibrations et vitesse lors d un essai contrôlé.', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: 'à vide', loadedCaption: 'en charge', slipCaption: 'glissement', massUnit: 'g', speedUnit: 'km/h' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'Comment calculer la vitesse de pas d un drone FPV?', answer: 'Le pas est multiplié par le régime chargé puis converti de pouces par tour en kilomètres par heure. C est une vitesse géométrique sans glissement, pas une promesse de vitesse aérienne.' }, { question: 'Que signifie le rendement dans cette estimation?', answer: 'Le rendement est un indicateur de planification pour représenter l écart entre vitesse géométrique et vitesse d avance. Il ne remplace ni une carte de performance ni un essai en vol.' }, { question: 'Pourquoi la masse de l appareil compte t elle?', answer: 'Un appareil plus lourd charge généralement davantage la propulsion. Le calcul applique donc une petite correction de régime bornée, qui reste une approximation transparente sans diamètre ni données de poussée.' }, { question: 'Le calculateur confirme t il la sécurité du drone?', answer: 'Non. Vérifiez les limites publiées pour le moteur, l ESC, la batterie, l hélice et le châssis, puis testez la propulsion sur un banc sécurisé.' }, { question: 'Pourquoi la vitesse réelle est elle plus faible que la vitesse de pas?', answer: 'La vitesse géométrique suppose que l hélice avance de son pas nominal à chaque tour. Le glissement, la forme des pales, la chute de tension et la charge réduisent l avance utile.' }];
9
+ const howTo = [{ name: 'Saisir la propulsion', text: 'Saisissez le KV et la tension attendue en charge, et pas seulement la valeur nominale de la batterie.' }, { name: 'Décrire l hélice et l appareil', text: 'Saisissez le pas, un rendement prudent et la masse prête à voler. Un réglage rapide peut servir de point de départ.' }, { name: 'Lire la trace puis vérifier', text: 'Comparez l estimation, la vitesse de pas, le glissement et la sensibilité. Utilisez le résultat pour préparer un essai sûr.' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: 'Estimer la vitesse d un drone FPV avec le pas d hélice', level: 2 }, { type: 'paragraph', html: 'Une estimation de vitesse FPV part de la distance qu une hélice à pas fixe avancerait en un tour. Le KV et la tension donnent un premier régime; le rendement et la masse cadrent une valeur de planification. Le calculateur affiche la vitesse géométrique et l avance estimée ensemble afin de distinguer les hypothèses d une mesure.' }, { type: 'title', text: 'Lire la piste de vitesse', level: 2 }, { type: 'table', headers: ['Signal', 'Interprétation'], rows: [['Vitesse de pas sans glissement', 'Pas multiplié par le régime chargé, en supposant l avance nominale à chaque tour.'], ['Vitesse d avance estimée', 'Valeur sans glissement multipliée par le rendement saisi.'], ['Vitesse perdue par glissement', 'Écart en pourcentage entre la vitesse géométrique et l avance estimée.'], ['Sensibilité au pas', 'Résultat avec 0,5 pouce de pas en moins ou en plus.']] }, { type: 'title', text: 'Utiliser l estimation avec méthode', level: 2 }, { type: 'list', items: ['Employez la tension attendue sous charge.', 'Commencez avec des données constructeur ou une combinaison connue.', 'Considérez un glissement élevé comme un signal à vérifier la charge et la tension.', 'Mesurez courant, température, vibrations et vitesse réelle avant le vol.'] }, { type: 'paragraph', html: 'Les performances d une hélice changent avec le taux d avance, la géométrie, la densité de l air et l écoulement entrant. Les modèles de recherche pour UAV utilisent des données mesurées ou identifiées. Cet outil reste volontairement simple et ne remplace ni courbe d hélice ni banc de poussée.' }, { type: 'tip', title: 'Transformer l écart en décision', html: 'Si un montage paraît rapide uniquement grâce à sa valeur sans glissement, observez l écart jusqu à l estimation corrigée par le rendement. Un pas inférieur peut réduire la charge, mais doit encore être vérifié sur la propulsion réelle.' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'calculateur-vitesse-drone-fpv', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: 'La mesure reste la dernière étape', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'Kalkulator kecepatan drone FPV';
6
+ const description = 'Perkirakan kecepatan maju drone FPV dari KV motor, tegangan baterai, pitch baling baling, efisiensi, dan massa pesawat, dengan slip serta sensitivitas.';
7
+ const ui = { presetsLabel: 'Mulai dari pengaturan terbang', presetRacing: 'Racing 4S', presetFreestyle: 'Freestyle 6S', presetCruiser: 'Cruiser 7 inci', unitsLabel: 'Satuan tampilan', metricUnit: 'Metrik', imperialUnit: 'Imperial', inputsLabel: 'Resep penerbangan', motorKvLabel: 'KV motor', batteryVoltageLabel: 'Tegangan baterai', propellerPitchLabel: 'Pitch baling baling', efficiencyLabel: 'Perkiraan efisiensi', aircraftMassLabel: 'Massa pesawat', calculateFromLabel: 'Bangun perkiraan dari lima data', resultsLabel: 'Jejak penerbangan', estimatedSpeedLabel: 'Kecepatan maju perkiraan', pitchSpeedLabel: 'Kecepatan pitch tanpa slip', loadedRpmLabel: 'Putaran motor berbeban', noLoadRpmLabel: 'RPM tanpa beban', slipLabel: 'Kecepatan yang hilang karena slip', loadEffectLabel: 'Koreksi beban', speedLaneLabel: 'Lintasan kecepatan baling baling', sensitivityLabel: 'Ubah satu hal setiap kali', lowerPitchLabel: 'Pitch lebih rendah', selectedPitchLabel: 'Pitch terpilih', higherPitchLabel: 'Pitch lebih tinggi', diagnosisLabel: 'Pembacaan', diagnosisPlanning: 'Perkiraan perencanaan', diagnosisHighSlip: 'Slip tinggi', diagnosisHeavyLoad: 'Beban berat', diagnosisOverspeed: 'Periksa RPM', diagnosisPlanningAdvice: 'Gunakan sebagai perkiraan awal lalu bandingkan dengan data produsen atau bangku uji.', diagnosisHighSlipAdvice: 'Efisiensi yang dipilih menyisakan jarak besar antara kecepatan geometris dan gerak maju. Periksa beban, penurunan tegangan, dan suhu motor.', diagnosisHeavyLoadAdvice: 'Massa membuat koreksi beban lebih berpengaruh. Perlakukan kecepatan sebagai rentang perencanaan dan validasi sistem penggerak.', diagnosisOverspeedAdvice: 'RPM tanpa beban sangat tinggi untuk setelan ini. Periksa batas motor, baterai, dan baling baling sebelum memberi daya.', assumptionsLabel: 'Batas model.', assumptionsText: 'Kecepatan pitch bersifat geometris: pitch dikali RPM berbeban. Efisiensi adalah pendekatan slip yang dimasukkan pengguna; massa memberi koreksi beban kecil yang terlihat. Diameter, kurva dorong, dan angin tidak dimodelkan.', safetyText: 'Ini bukan jaminan penerbangan. Jauhi baling baling dan validasi arus, suhu, getaran, serta kecepatan dalam pengujian terkendali.', speedAxisStart: '0 km/j', speedAxisEnd: '300 km/j', noLoadCaption: 'tanpa beban', loadedCaption: 'berbeban', slipCaption: 'slip', massUnit: 'g', speedUnit: 'km/j' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'Bagaimana kecepatan pitch drone FPV dihitung?', answer: 'Pitch baling baling dikalikan dengan putaran per menit berbeban lalu diubah dari inci per putaran menjadi kilometer per jam. Ini kecepatan geometris tanpa slip, bukan jaminan kecepatan udara.' }, { question: 'Apa arti efisiensi pada perkiraan ini?', answer: 'Efisiensi adalah pendekatan perencanaan untuk jarak antara kecepatan geometris dan kecepatan maju. Ini tidak menggantikan peta performa atau pengujian terbang.' }, { question: 'Mengapa massa pesawat memengaruhi hasil?', answer: 'Pesawat yang lebih berat biasanya memberi beban lebih besar pada penggerak, sehingga model menerapkan koreksi RPM kecil yang dibatasi. Tanpa diameter, data dorong, dan torsi, ini hanya pendekatan transparan.' }, { question: 'Apakah kalkulator ini memastikan drone aman?', answer: 'Tidak. Periksa batas produsen untuk motor, ESC, baterai, baling baling, dan rangka, lalu uji penggerak pada bangku yang terikat.' }, { question: 'Mengapa kecepatan nyata lebih rendah dari kecepatan pitch?', answer: 'Kecepatan geometris menganggap baling baling maju sesuai pitch nominal di setiap putaran. Slip, bentuk bilah, penurunan tegangan, dan beban mengurangi gerak maju yang berguna.' }];
9
+ const howTo = [{ name: 'Masukkan penggerak', text: 'Masukkan KV motor dan tegangan baterai yang diharapkan saat berbeban, bukan hanya nilai nominal.' }, { name: 'Jelaskan baling baling dan pesawat', text: 'Masukkan pitch, efisiensi yang hati hati, dan massa siap terbang. Preset dapat menjadi titik awal.' }, { name: 'Baca jejak lalu validasi', text: 'Bandingkan perkiraan, kecepatan pitch, slip, dan sensitivitas. Gunakan hasil sebagai rencana uji yang aman.' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: 'Memperkirakan kecepatan drone FPV dari pitch baling baling', level: 2 }, { type: 'paragraph', html: 'Perkiraan kecepatan FPV dimulai dari jarak yang akan ditempuh baling baling pitch tetap dalam satu putaran. KV motor dan tegangan memberi putaran awal; efisiensi dan massa membingkai nilai perencanaan. Kalkulator menampilkan kecepatan geometris dan gerak maju perkiraan bersama agar asumsi tidak disalahartikan sebagai pengukuran.' }, { type: 'title', text: 'Membaca lintasan kecepatan', level: 2 }, { type: 'table', headers: ['Sinyal', 'Arti'], rows: [['Kecepatan tanpa slip', 'Pitch dikali RPM berbeban dengan gerak maju nominal tiap putaran.'], ['Gerak maju perkiraan', 'Nilai tanpa slip dikali efisiensi yang dimasukkan.'], ['Kecepatan yang hilang', 'Perbedaan persentase antara kecepatan geometris dan gerak maju.'], ['Sensitivitas pitch', 'Hasil dengan pitch 0,5 inci lebih rendah atau lebih tinggi.']] }, { type: 'title', text: 'Gunakan perkiraan secara tepat', level: 2 }, { type: 'list', items: ['Gunakan tegangan yang diharapkan saat berbeban.', 'Mulai dari data produsen atau kombinasi motor dan baling baling yang dikenal.', 'Anggap slip tinggi sebagai tanda untuk memeriksa beban dan penurunan tegangan.', 'Ukur arus, suhu, getaran, dan kecepatan nyata sebelum terbang.'] }, { type: 'paragraph', html: 'Performa baling baling berubah menurut rasio gerak maju, geometri bilah, kepadatan udara, dan aliran masuk. Penelitian UAV menggunakan data terukur atau teridentifikasi. Alat ini sengaja lebih sederhana dan tidak menggantikan kurva baling baling atau bangku dorong.' }, { type: 'tip', title: 'Gunakan selisih sebagai sinyal keputusan', html: 'Jika setelan terlihat cepat hanya karena angka tanpa slip, lihat selisih menuju perkiraan yang disesuaikan efisiensi. Pitch lebih rendah dapat mengurangi beban, tetapi tetap perlu uji sistem penggerak nyata.' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'IDR' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'kalkulator-kecepatan-drone-fpv', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: 'Pengukuran tetap menjadi langkah terakhir', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'Calcolatore della velocità per droni FPV';
6
+ const description = 'Stima la velocità in avanti di un drone FPV usando KV del motore, tensione, passo dell elica, efficienza e massa del velivolo, con scorrimento e sensibilità.';
7
+ const ui = { presetsLabel: 'Inizia da una configurazione', presetRacing: 'Racing 4S', presetFreestyle: 'Freestyle 6S', presetCruiser: 'Cruiser 7 pollici', unitsLabel: 'Unità visualizzate', metricUnit: 'Metrico', imperialUnit: 'Imperiale', inputsLabel: 'Ricetta di volo', motorKvLabel: 'KV del motore', batteryVoltageLabel: 'Tensione batteria', propellerPitchLabel: 'Passo dell elica', efficiencyLabel: 'Efficienza stimata', aircraftMassLabel: 'Massa del velivolo', calculateFromLabel: 'Costruisci la stima con cinque dati', resultsLabel: 'Traccia di volo', estimatedSpeedLabel: 'Velocità in avanti stimata', pitchSpeedLabel: 'Velocità di passo senza scorrimento', loadedRpmLabel: 'Regime del motore sotto carico', noLoadRpmLabel: 'RPM senza carico', slipLabel: 'Velocità persa per scorrimento', loadEffectLabel: 'Correzione del carico', speedLaneLabel: 'Corsia di velocità dell elica', sensitivityLabel: 'Cambia una cosa alla volta', lowerPitchLabel: 'Passo minore', selectedPitchLabel: 'Passo scelto', higherPitchLabel: 'Passo maggiore', diagnosisLabel: 'Lettura', diagnosisPlanning: 'Stima di pianificazione', diagnosisHighSlip: 'Scorrimento elevato', diagnosisHeavyLoad: 'Carico elevato', diagnosisOverspeed: 'Controlla gli RPM', diagnosisPlanningAdvice: 'Usala come prima stima e confrontala poi con una tabella del produttore o con un banco di prova.', diagnosisHighSlipAdvice: 'L efficienza scelta crea un ampio divario tra velocità geometrica e avanzamento. Controlla carico, caduta di tensione e temperatura.', diagnosisHeavyLoadAdvice: 'La massa rende più importante la correzione del carico. Considera la velocità una fascia di pianificazione e verifica tutta la propulsione.', diagnosisOverspeedAdvice: 'Gli RPM senza carico sono insolitamente alti. Controlla i limiti di motore, batteria ed elica prima di alimentare il sistema.', assumptionsLabel: 'Limite del modello.', assumptionsText: 'La velocità di passo è geometrica: passo per RPM sotto carico. L efficienza è un indicatore inserito dall utente per approssimare lo scorrimento; la massa applica una piccola correzione trasparente. Diametro, curva di spinta e vento non sono modellati.', safetyText: 'Non è una garanzia di volo. Tieniti lontano dall elica e verifica corrente, temperatura, vibrazioni e velocità con una prova controllata.', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: 'senza carico', loadedCaption: 'sotto carico', slipCaption: 'scorrimento', massUnit: 'g', speedUnit: 'km/h' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'Come si calcola la velocità di passo di un drone FPV?', answer: 'Il passo dell elica viene moltiplicato per gli RPM sotto carico e convertito da pollici per giro a chilometri orari. È una velocità geometrica senza scorrimento, non una promessa di velocità reale.' }, { question: 'Che cosa significa efficienza in questa stima?', answer: 'L efficienza è un indicatore di pianificazione della distanza tra velocità geometrica e avanzamento stimato. Non sostituisce una mappa di rendimento o una prova di volo.' }, { question: 'Perché la massa del velivolo influenza il risultato?', answer: 'Un velivolo più pesante carica in genere maggiormente la propulsione, quindi il modello applica una piccola correzione limitata degli RPM. Senza diametro, spinta e coppia resta un approssimazione trasparente.' }, { question: 'Il calcolatore conferma che il drone è sicuro?', answer: 'No. Controlla i limiti del produttore per motore, ESC, batteria, elica e telaio, quindi prova la propulsione su un banco fissato.' }, { question: 'Perché la velocità reale è inferiore a quella di passo?', answer: 'La velocità geometrica suppone che l elica avanzi del suo passo nominale a ogni giro. Scorrimento, forma delle pale, caduta di tensione e carico riducono l avanzamento utile.' }];
9
+ const howTo = [{ name: 'Inserisci la propulsione', text: 'Inserisci KV del motore e tensione prevista sotto carico, non solo il valore nominale della batteria.' }, { name: 'Descrivi elica e velivolo', text: 'Inserisci passo, efficienza prudente e massa pronta al volo. Un preset offre un punto di partenza.' }, { name: 'Leggi la traccia e verifica', text: 'Confronta stima, velocità di passo, scorrimento e sensibilità. Usa il risultato per preparare una prova sicura.' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: 'Stimare la velocità di un drone FPV dal passo dell elica', level: 2 }, { type: 'paragraph', html: 'Una stima della velocità FPV parte dalla distanza che un elica a passo fisso avanzerebbe in un giro. KV e tensione danno un primo regime; efficienza e massa definiscono un valore di pianificazione. Il calcolatore mostra insieme velocità geometrica e avanzamento stimato per distinguere le ipotesi da una misura.' }, { type: 'title', text: 'Leggere la corsia di velocità', level: 2 }, { type: 'table', headers: ['Segnale', 'Interpretazione'], rows: [['Velocità senza scorrimento', 'Passo moltiplicato per RPM sotto carico, assumendo l avanzamento nominale a ogni giro.'], ['Avanzamento stimato', 'Valore senza scorrimento moltiplicato per l efficienza inserita.'], ['Velocità persa', 'Differenza percentuale tra velocità geometrica e avanzamento stimato.'], ['Sensibilità al passo', 'Risultato con 0,5 pollici di passo in meno o in più.']] }, { type: 'title', text: 'Usare la stima con criterio', level: 2 }, { type: 'list', items: ['Usa la tensione prevista sotto carico.', 'Parti da dati del produttore o da una combinazione conosciuta.', 'Considera lo scorrimento elevato un segnale per controllare carico e tensione.', 'Misura corrente, temperatura, vibrazioni e velocità reale prima del volo.'] }, { type: 'paragraph', html: 'Le prestazioni dell elica cambiano con rapporto di avanzamento, geometria delle pale, densità dell aria e flusso in ingresso. I modelli di ricerca per UAV usano dati misurati o identificati. Questo strumento rimane volutamente semplice e non sostituisce una curva dell elica né un banco di spinta.' }, { type: 'tip', title: 'Trasforma il divario in una decisione', html: 'Se una configurazione sembra veloce solo grazie al numero senza scorrimento, osserva la distanza dalla stima corretta per efficienza. Un passo inferiore può ridurre il carico, ma richiede comunque una verifica reale.' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'calcolatore-velocita-drone-fpv', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: 'La misura resta il passaggio finale', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'FPVドローン速度計算機';
6
+ const description = 'モーターKV、バッテリー電圧、プロペラピッチ、効率、機体質量からFPVドローンの前進速度を推定し、滑りと感度を表示します。';
7
+ const ui = { presetsLabel: 'フライト設定から開始', presetRacing: 'レーシング4S', presetFreestyle: 'フリースタイル6S', presetCruiser: 'クルーザー7インチ', unitsLabel: '表示単位', metricUnit: 'メートル', imperialUnit: 'インペリアル', inputsLabel: 'フライトレシピ', motorKvLabel: 'モーターKV', batteryVoltageLabel: 'バッテリー電圧', propellerPitchLabel: 'プロペラピッチ', efficiencyLabel: '推定効率', aircraftMassLabel: '機体質量', calculateFromLabel: '5つの値から推定', resultsLabel: '飛行トレース', estimatedSpeedLabel: '推定前進速度', pitchSpeedLabel: '滑りなしピッチ速度', loadedRpmLabel: '負荷時モーター回転数', noLoadRpmLabel: '無負荷回転数', slipLabel: '滑りで失われる速度', loadEffectLabel: '負荷補正', speedLaneLabel: 'プロペラ速度レーン', sensitivityLabel: '一度に一つだけ変更', lowerPitchLabel: '低いピッチ', selectedPitchLabel: '選択中のピッチ', higherPitchLabel: '高いピッチ', diagnosisLabel: '読み取り', diagnosisPlanning: '計画用の推定', diagnosisHighSlip: '滑りが大きい', diagnosisHeavyLoad: '負荷が大きい', diagnosisOverspeed: '回転数を確認', diagnosisPlanningAdvice: '最初の比較に使い、その後メーカー資料や試験台の結果と照合してください。', diagnosisHighSlipAdvice: '効率の設定により、幾何学的なピッチ速度と前進速度に大きな差があります。負荷、電圧降下、温度を確認してください。', diagnosisHeavyLoadAdvice: '機体質量の影響が大きい設定です。速度は広い計画範囲として扱い、推進系全体を確認してください。', diagnosisOverspeedAdvice: '無負荷回転数が高すぎる可能性があります。通電前にモーター、バッテリー、プロペラの上限を確認してください。', assumptionsLabel: 'モデルの限界。', assumptionsText: 'ピッチ速度はピッチと負荷時回転数による幾何学的な値です。効率は滑りの近似値として入力し、質量は小さな補正に使います。直径、推力曲線、風は扱いません。', safetyText: '飛行を保証するものではありません。プロペラから離れ、管理された試験で電流、温度、振動、速度を確認してください。', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: '無負荷', loadedCaption: '負荷時', slipCaption: '滑り', massUnit: 'g', speedUnit: 'km/h' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'FPVドローンのピッチ速度はどう計算しますか?', answer: 'プロペラのピッチに負荷時の毎分回転数を掛け、1回転あたりのインチを時速へ換算します。滑りのない幾何学的な速度であり、実際の速度を保証しません。' }, { question: 'この推定で効率は何を意味しますか?', answer: '幾何学的なピッチ速度と推定前進速度の差を表す計画用の近似値です。性能マップや飛行試験の代わりにはなりません。' }, { question: 'なぜ機体質量が結果に影響しますか?', answer: '重い機体は推進系への負荷が増えるため、小さく制限した回転数補正を適用します。直径や推力、トルクがないため透明な近似に留まります。' }, { question: 'この計算機で飛行の安全性を確認できますか?', answer: 'できません。メーカーの制限を確認し、固定した試験台で推進系を確認してください。' }, { question: 'なぜ実速度はピッチ速度より低いのですか?', answer: '幾何学的な速度は毎回転で公称ピッチだけ進むと仮定します。滑り、ブレード形状、電圧降下、負荷によって前進量は減ります。' }];
9
+ const howTo = [{ name: '推進系を入力', text: 'モーターKVと負荷時に想定する電圧を入力します。' }, { name: 'プロペラと機体を入力', text: 'ピッチ、控えめな効率、飛行時の機体質量を入力します。プリセットも使えます。' }, { name: 'トレースを確認', text: '推定速度、ピッチ速度、滑り、感度を比較し、安全な試験計画に役立てます。' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: 'プロペラピッチからFPVドローン速度を推定', level: 2 }, { type: 'paragraph', html: 'FPV速度の推定は、固定ピッチのプロペラが1回転で進む距離から始まります。KVと電圧から回転数を求め、効率と質量を計画用の値に反映します。この計算機は幾何学的な速度と推定前進速度を並べ、仮定と実測を分けて表示します。' }, { type: 'title', text: '速度レーンの見方', level: 2 }, { type: 'table', headers: ['項目', '意味'], rows: [['滑りなしピッチ速度', 'ピッチと負荷時回転数から求める幾何学的な速度です。'], ['推定前進速度', '滑りなし速度に入力した効率を掛けた値です。'], ['失われる速度', '幾何学的な速度と推定前進速度の差です。'], ['ピッチ感度', 'ピッチを0.5インチ下げる、または上げた場合の値です。']] }, { type: 'title', text: '推定を使う手順', level: 2 }, { type: 'list', items: ['負荷時に想定する電圧を使う。', 'メーカー資料や既知の組み合わせから始める。', '滑りが大きい場合は負荷と電圧降下を確認する。', '飛行前に電流、温度、振動、実速度を測る。'] }, { type: 'paragraph', html: 'プロペラ性能は前進比、ブレード形状、空気密度、流入によって変化します。UAV研究では測定または同定されたデータを使います。このツールは比較用の簡易モデルで、プロペラ曲線や推力試験台を置き換えません。' }, { type: 'tip', title: '差を判断材料にする', html: '滑りなしの数字だけで速く見える場合は、効率を反映した推定値との差を確認してください。低いピッチで負荷を減らせることがありますが、実機試験は必要です。' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'JPY' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'fpv-drone-speed-calculator', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: '測定は最後の手順です', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'FPV 드론 속도 계산기';
6
+ const description = '모터 KV, 배터리 전압, 프로펠러 피치, 효율, 기체 질량으로 FPV 드론의 전진 속도를 추정하고 슬립과 민감도를 보여 줍니다.';
7
+ const ui = { presetsLabel: '비행 설정으로 시작', presetRacing: '레이싱 4S', presetFreestyle: '프리스타일 6S', presetCruiser: '크루저 7인치', unitsLabel: '표시 단위', metricUnit: '미터법', imperialUnit: '야드파운드법', inputsLabel: '비행 레시피', motorKvLabel: '모터 KV', batteryVoltageLabel: '배터리 전압', propellerPitchLabel: '프로펠러 피치', efficiencyLabel: '추정 효율', aircraftMassLabel: '기체 질량', calculateFromLabel: '다섯 값으로 추정', resultsLabel: '비행 추적', estimatedSpeedLabel: '추정 전진 속도', pitchSpeedLabel: '슬립 없는 피치 속도', loadedRpmLabel: '부하 시 모터 회전수', noLoadRpmLabel: '무부하 회전수', slipLabel: '슬립으로 잃는 속도', loadEffectLabel: '부하 보정', speedLaneLabel: '프로펠러 속도 레인', sensitivityLabel: '한 번에 하나만 변경', lowerPitchLabel: '낮은 피치', selectedPitchLabel: '선택한 피치', higherPitchLabel: '높은 피치', diagnosisLabel: '판독', diagnosisPlanning: '계획용 추정', diagnosisHighSlip: '슬립 높음', diagnosisHeavyLoad: '부하 높음', diagnosisOverspeed: '회전수 확인', diagnosisPlanningAdvice: '첫 번째 크기 비교에 사용한 뒤 제조사 자료나 시험대와 비교하세요.', diagnosisHighSlipAdvice: '선택한 효율로 인해 기하학적 피치 속도와 전진 속도의 차이가 큽니다. 부하, 전압 강하, 온도를 확인하세요.', diagnosisHeavyLoadAdvice: '질량의 영향이 커지는 설정입니다. 속도는 넓은 계획 범위로 보고 전체 추진계를 검증하세요.', diagnosisOverspeedAdvice: '무부하 회전수가 이 설정에 비해 높습니다. 전원을 넣기 전에 모터, 배터리, 프로펠러 한계를 확인하세요.', assumptionsLabel: '모델의 한계.', assumptionsText: '피치 속도는 피치와 부하 시 회전수로 계산한 기하학적 값입니다. 효율은 슬립의 입력 근사값이며 질량은 작은 부하 보정을 만듭니다. 지름, 추력 곡선, 바람은 포함하지 않습니다.', safetyText: '비행을 보장하지 않습니다. 프로펠러에서 떨어져 통제된 시험으로 전류, 온도, 진동, 속도를 확인하세요.', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: '무부하', loadedCaption: '부하 시', slipCaption: '슬립', massUnit: 'g', speedUnit: 'km/h' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'FPV 드론의 피치 속도는 어떻게 계산하나요?', answer: '프로펠러 피치에 부하 시 분당 회전수를 곱한 뒤 회전당 인치를 시간당 킬로미터로 바꿉니다. 슬립이 없는 기하학적 속도이며 실제 대기 속도를 보장하지 않습니다.' }, { question: '이 속도 추정에서 효율은 무엇인가요?', answer: '기하학적 피치 속도와 추정 전진 속도의 차이를 표현하는 계획용 근사값입니다. 성능 지도나 비행 시험을 대신하지 않습니다.' }, { question: '기체 질량이 결과에 영향을 주는 이유는 무엇인가요?', answer: '무거운 기체는 추진계에 더 큰 부하를 주는 경우가 많아 작은 회전수 보정을 적용합니다. 지름, 추력, 토크가 없으므로 투명한 근사값입니다.' }, { question: '이 계산기로 드론의 안전을 확인할 수 있나요?', answer: '아니요. 제조사 한계를 확인하고 고정된 시험대에서 추진계를 시험하세요.' }, { question: '실제 속도가 피치 속도보다 낮은 이유는 무엇인가요?', answer: '기하학적 속도는 매 회전마다 공칭 피치만큼 전진한다고 가정합니다. 슬립, 블레이드 형상, 전압 강하, 부하가 유효 전진량을 줄입니다.' }];
9
+ const howTo = [{ name: '추진계를 입력하세요', text: '모터 KV와 부하 시 예상 배터리 전압을 입력합니다.' }, { name: '프로펠러와 기체를 입력하세요', text: '피치, 보수적인 효율, 비행 준비 질량을 입력합니다. 프리셋으로 시작할 수도 있습니다.' }, { name: '추적 결과를 확인하세요', text: '추정 속도, 피치 속도, 슬립, 민감도를 비교하고 안전한 시험을 계획합니다.' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: '프로펠러 피치로 FPV 드론 속도 추정하기', level: 2 }, { type: 'paragraph', html: 'FPV 속도 추정은 고정 피치 프로펠러가 한 회전에서 이동할 거리에서 시작합니다. 모터 KV와 전압으로 첫 회전수를 구하고 효율과 질량으로 계획값을 조정합니다. 계산기는 기하학적 피치 속도와 추정 전진 속도를 함께 보여 주어 가정과 측정을 구분합니다.' }, { type: 'title', text: '속도 레인 읽기', level: 2 }, { type: 'table', headers: ['신호', '의미'], rows: [['슬립 없는 피치 속도', '부하 시 회전수와 피치로 계산한 기하학적 속도입니다.'], ['추정 전진 속도', '슬립 없는 값에 입력 효율을 곱한 값입니다.'], ['손실 속도', '기하학적 속도와 추정 전진 속도의 백분율 차이입니다.'], ['피치 민감도', '피치를 0.5인치 낮추거나 높였을 때의 결과입니다.']] }, { type: 'title', text: '추정을 활용하는 방법', level: 2 }, { type: 'list', items: ['부하 시 예상 전압을 사용하세요.', '제조사 자료나 알려진 조합에서 시작하세요.', '슬립이 높으면 부하와 전압 강하를 확인하세요.', '비행 전에 전류, 온도, 진동, 실제 속도를 측정하세요.'] }, { type: 'paragraph', html: '프로펠러 성능은 전진비, 블레이드 형상, 공기 밀도, 유입 흐름에 따라 달라집니다. UAV 연구는 측정되거나 식별된 데이터를 사용합니다. 이 도구는 비교용 단순 모델이며 프로펠러 곡선이나 추력 시험대를 대체하지 않습니다.' }, { type: 'tip', title: '차이를 판단 신호로 사용하세요', html: '슬립 없는 숫자만으로 빠르게 보이는 설정이라면 효율 보정 추정값과의 차이를 확인하세요. 낮은 피치는 부하를 줄일 수 있지만 실제 추진계 시험이 필요합니다.' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'KRW' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'fpv-drone-speed-calculator', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: '측정은 마지막 단계입니다', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'Snelheidscalculator voor FPV drones';
6
+ const description = 'Schat de voorwaartse snelheid van een FPV drone met motor KV, accuspanning, propellersteek, efficiëntie en massa, inclusief slip en gevoeligheid.';
7
+ const ui = { presetsLabel: 'Begin met een vluchtinstelling', presetRacing: 'Racing 4S', presetFreestyle: 'Freestyle 6S', presetCruiser: 'Cruiser 7 inch', unitsLabel: 'Weergave-eenheden', metricUnit: 'Metrisch', imperialUnit: 'Imperiaal', inputsLabel: 'Vluchtrecept', motorKvLabel: 'Motor KV', batteryVoltageLabel: 'Accuspanning', propellerPitchLabel: 'Propellersteek', efficiencyLabel: 'Geschatte efficiëntie', aircraftMassLabel: 'Massa van toestel', calculateFromLabel: 'Bouw de schatting met vijf gegevens', resultsLabel: 'Vluchtspoor', estimatedSpeedLabel: 'Geschatte voorwaartse snelheid', pitchSpeedLabel: 'Steeksnelheid zonder slip', loadedRpmLabel: 'Motortoerental onder belasting', noLoadRpmLabel: 'Toerental zonder belasting', slipLabel: 'Snelheid verloren door slip', loadEffectLabel: 'Belastingscorrectie', speedLaneLabel: 'Snelheidsspoor van propeller', sensitivityLabel: 'Verander één ding tegelijk', lowerPitchLabel: 'Lagere steek', selectedPitchLabel: 'Gekozen steek', higherPitchLabel: 'Hogere steek', diagnosisLabel: 'Lezing', diagnosisPlanning: 'Planningsschatting', diagnosisHighSlip: 'Veel slip', diagnosisHeavyLoad: 'Hoge belasting', diagnosisOverspeed: 'Toerental controleren', diagnosisPlanningAdvice: 'Gebruik dit als eerste vergelijking en controleer daarna met fabrieksgegevens of een testbank.', diagnosisHighSlipAdvice: 'De gekozen efficiëntie laat een groot verschil tussen geometrische steeksnelheid en voorwaartse snelheid. Controleer belasting, spanningsval en temperatuur.', diagnosisHeavyLoadAdvice: 'De massa maakt de belastingscorrectie belangrijker. Zie de snelheid als een ruime planning en test de volledige aandrijving.', diagnosisOverspeedAdvice: 'Het onbelaste toerental is ongewoon hoog. Controleer de grenzen van motor, accu en propeller voordat je vermogen toepast.', assumptionsLabel: 'Modelgrens.', assumptionsText: 'Steeksnelheid is geometrisch: steek maal belast toerental. Efficiëntie is een ingevoerde proxy voor slip; massa geeft een kleine transparante belastingscorrectie. Diameter, stuwkrachtcurve en wind ontbreken.', safetyText: 'Geen vlieggarantie. Blijf weg van de propeller en controleer stroom, temperatuur, trillingen en snelheid in een gecontroleerde test.', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: 'onbelast', loadedCaption: 'belast', slipCaption: 'slip', massUnit: 'g', speedUnit: 'km/h' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'Hoe bereken je de steeksnelheid van een FPV drone?', answer: 'De propellersteek wordt vermenigvuldigd met het belast toerental en omgerekend van inch per omwenteling naar kilometer per uur. Dit is een geometrische snelheid zonder slip, geen belofte van luchtsnelheid.' }, { question: 'Wat betekent efficiëntie in deze schatting?', answer: 'Efficiëntie is een planningsproxy voor het verschil tussen geometrische steeksnelheid en geschatte voorwaartse snelheid. Het vervangt geen prestatiekaart of vluchttest.' }, { question: 'Waarom beïnvloedt de massa het resultaat?', answer: 'Een zwaarder toestel belast de aandrijving meestal meer. Daarom gebruikt het model een kleine begrensde toerentalcorrectie. Zonder diameter, stuwkracht en motorkoppel blijft dit een transparante benadering.' }, { question: 'Kan deze calculator bevestigen dat mijn drone veilig is?', answer: 'Nee. Controleer de fabrieksgrenzen van motor, ESC, accu, propeller en frame en test de aandrijving op een vastgezette testbank.' }, { question: 'Waarom is de echte snelheid lager dan de steeksnelheid?', answer: 'De geometrische snelheid veronderstelt dat de propeller bij elke omwenteling zijn nominale steek aflegt. Slip, bladvorm, spanningsval en belasting verminderen de nuttige voortgang.' }];
9
+ const howTo = [{ name: 'Voer de aandrijving in', text: 'Voer motor KV en de verwachte accuspanning onder belasting in, niet alleen de nominale waarde.' }, { name: 'Beschrijf propeller en toestel', text: 'Voer steek, een voorzichtige efficiëntie en de vliegklare massa in. Een preset helpt bij het begin.' }, { name: 'Lees en controleer', text: 'Vergelijk schatting, steeksnelheid, slip en steekgevoeligheid. Gebruik het resultaat als veilig testplan.' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: 'FPV dronesnelheid schatten met propellersteek', level: 2 }, { type: 'paragraph', html: 'Een FPV snelheidsschatting begint met de afstand die een propeller met vaste steek per omwenteling zou afleggen. Motor KV en spanning geven een eerste toerental; efficiëntie en massa kaderen een planningsgetal. De calculator toont geometrische steeksnelheid en geschatte voortgang samen, zodat aannames niet als meting worden gelezen.' }, { type: 'title', text: 'Het snelheidsspoor lezen', level: 2 }, { type: 'table', headers: ['Signaal', 'Betekenis'], rows: [['Steeksnelheid zonder slip', 'Steek maal belast toerental, met de nominale voortgang per omwenteling.'], ['Geschatte voortgang', 'De waarde zonder slip vermenigvuldigd met de ingevoerde efficiëntie.'], ['Verloren snelheid', 'Het procentuele verschil tussen geometrische snelheid en geschatte voortgang.'], ['Steekgevoeligheid', 'Het resultaat met 0,5 inch minder of meer steek.']] }, { type: 'title', text: 'De schatting goed gebruiken', level: 2 }, { type: 'list', items: ['Gebruik de verwachte spanning onder belasting.', 'Begin met fabrieksgegevens of een bekende motor propeller combinatie.', 'Zie veel slip als signaal om belasting en spanningsval te controleren.', 'Meet stroom, temperatuur, trillingen en echte snelheid voor de vlucht.'] }, { type: 'paragraph', html: 'Propellerprestaties veranderen met advance ratio, bladgeometrie, luchtdichtheid en instroming. Onderzoek naar UAV propellers gebruikt gemeten of geïdentificeerde gegevens. Deze tool blijft bewust eenvoudig en vervangt geen propellercurve of stuwkrachtbank.' }, { type: 'tip', title: 'Gebruik het verschil als beslissignaal', html: 'Als een setup alleen snel lijkt door het getal zonder slip, bekijk dan het verschil met de efficiëntieaangepaste schatting. Een lagere steek kan de belasting verminderen, maar moet nog steeds echt worden getest.' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'fpv-drone-snelheidscalculator', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: 'Meten blijft de laatste stap', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'Kalkulator prędkości drona FPV';
6
+ const description = 'Oszacuj prędkość lotu drona FPV na podstawie KV silnika, napięcia akumulatora, skoku śmigła, sprawności i masy, z poślizgiem oraz analizą czułości.';
7
+ const ui = { presetsLabel: 'Zacznij od ustawienia', presetRacing: 'Racing 4S', presetFreestyle: 'Freestyle 6S', presetCruiser: 'Cruiser 7 cali', unitsLabel: 'Jednostki wyświetlania', metricUnit: 'Metryczne', imperialUnit: 'Anglosaskie', inputsLabel: 'Recepta lotu', motorKvLabel: 'KV silnika', batteryVoltageLabel: 'Napięcie akumulatora', propellerPitchLabel: 'Skok śmigła', efficiencyLabel: 'Szacowana sprawność', aircraftMassLabel: 'Masa statku', calculateFromLabel: 'Zbuduj wynik z pięciu danych', resultsLabel: 'Ślad lotu', estimatedSpeedLabel: 'Szacowana prędkość do przodu', pitchSpeedLabel: 'Prędkość skoku bez poślizgu', loadedRpmLabel: 'Prędkość silnika pod obciążeniem', noLoadRpmLabel: 'Obroty bez obciążenia', slipLabel: 'Prędkość tracona przez poślizg', loadEffectLabel: 'Korekta obciążenia', speedLaneLabel: 'Pas prędkości śmigła', sensitivityLabel: 'Zmieniaj jedną rzecz naraz', lowerPitchLabel: 'Mniejszy skok', selectedPitchLabel: 'Wybrany skok', higherPitchLabel: 'Większy skok', diagnosisLabel: 'Odczyt', diagnosisPlanning: 'Szacunek planistyczny', diagnosisHighSlip: 'Duży poślizg', diagnosisHeavyLoad: 'Duże obciążenie', diagnosisOverspeed: 'Sprawdź obroty', diagnosisPlanningAdvice: 'Potraktuj to jako pierwsze przybliżenie i porównaj z danymi producenta lub stanowiskiem pomiarowym.', diagnosisHighSlipAdvice: 'Wybrana sprawność tworzy dużą różnicę między prędkością geometryczną a lotem do przodu. Sprawdź obciążenie, spadek napięcia i temperaturę.', diagnosisHeavyLoadAdvice: 'Masa zwiększa znaczenie korekty obciążenia. Traktuj wynik jako szeroki zakres planowania i sprawdź cały napęd.', diagnosisOverspeedAdvice: 'Obroty bez obciążenia są nietypowo wysokie. Przed zasileniem sprawdź limity silnika, akumulatora i śmigła.', assumptionsLabel: 'Granica modelu.', assumptionsText: 'Prędkość skoku jest geometryczna: skok razy obroty pod obciążeniem. Sprawność to wartość zastępcza poślizgu podana przez użytkownika; masa daje małą jawną korektę. Brak średnicy, krzywej ciągu i wiatru.', safetyText: 'To nie jest gwarancja lotu. Zachowaj odstęp od śmigła i sprawdź prąd, temperaturę, drgania oraz prędkość w kontrolowanym teście.', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: 'bez obciążenia', loadedCaption: 'pod obciążeniem', slipCaption: 'poślizg', massUnit: 'g', speedUnit: 'km/h' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'Jak obliczana jest prędkość skoku drona FPV?', answer: 'Skok śmigła mnoży się przez obroty na minutę pod obciążeniem i przelicza cale na obrót na kilometry na godzinę. To geometryczna prędkość bez poślizgu, a nie obietnica prędkości lotu.' }, { question: 'Co oznacza sprawność w tym szacunku?', answer: 'Sprawność jest wartością planistyczną opisującą różnicę między prędkością geometryczną i szacowanym postępem. Nie zastępuje mapy osiągów ani próby lotu.' }, { question: 'Dlaczego masa wpływa na wynik?', answer: 'Cięższy statek zwykle mocniej obciąża napęd, dlatego model stosuje małą ograniczoną korektę obrotów. Bez średnicy, danych ciągu i momentu silnika jest to jawne przybliżenie.' }, { question: 'Czy kalkulator potwierdza bezpieczeństwo drona?', answer: 'Nie. Sprawdź limity producenta silnika, ESC, akumulatora, śmigła i ramy, a następnie przetestuj napęd na zabezpieczonym stanowisku.' }, { question: 'Dlaczego rzeczywista prędkość jest mniejsza od prędkości skoku?', answer: 'Prędkość geometryczna zakłada nominalny przesuw śmigła przy każdym obrocie. Poślizg, kształt łopat, spadek napięcia i obciążenie zmniejszają użyteczny postęp.' }];
9
+ const howTo = [{ name: 'Wprowadź napęd', text: 'Podaj KV silnika i napięcie oczekiwane pod obciążeniem, nie tylko wartość nominalną akumulatora.' }, { name: 'Opisz śmigło i statek', text: 'Podaj skok, ostrożną sprawność i masę gotową do lotu. Preset pomoże zacząć.' }, { name: 'Odczytaj i sprawdź', text: 'Porównaj szacunek, prędkość skoku, poślizg i czułość. Użyj wyniku do zaplanowania bezpiecznej próby.' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: 'Szacowanie prędkości drona FPV ze skoku śmigła', level: 2 }, { type: 'paragraph', html: 'Szacowanie prędkości FPV zaczyna się od odległości, którą śmigło o stałym skoku przebyłoby podczas jednego obrotu. KV i napięcie dają pierwsze obroty, a sprawność i masa tworzą wartość planistyczną. Kalkulator pokazuje prędkość geometryczną i szacowany postęp razem, aby oddzielić założenia od pomiaru.' }, { type: 'title', text: 'Jak czytać pas prędkości', level: 2 }, { type: 'table', headers: ['Sygnał', 'Znaczenie'], rows: [['Prędkość bez poślizgu', 'Skok pomnożony przez obroty pod obciążeniem przy nominalnym przesuwie na obrót.'], ['Szacowany postęp', 'Wartość bez poślizgu pomnożona przez podaną sprawność.'], ['Utracona prędkość', 'Procentowa różnica między prędkością geometryczną i postępem.'], ['Czułość skoku', 'Wynik dla skoku mniejszego lub większego o 0,5 cala.']] }, { type: 'title', text: 'Jak korzystać z wyniku', level: 2 }, { type: 'list', items: ['Użyj napięcia oczekiwanego pod obciążeniem.', 'Zacznij od danych producenta lub znanej pary silnik śmigło.', 'Duży poślizg potraktuj jako sygnał do sprawdzenia obciążenia i spadku napięcia.', 'Zmierz prąd, temperaturę, drgania i rzeczywistą prędkość przed lotem.'] }, { type: 'paragraph', html: 'Osiągi śmigła zmieniają się wraz ze współczynnikiem postępu, geometrią łopat, gęstością powietrza i napływem. Badania śmigieł UAV używają danych zmierzonych lub zidentyfikowanych. To narzędzie jest celowo prostsze i nie zastępuje krzywej śmigła ani stanowiska ciągowego.' }, { type: 'tip', title: 'Wykorzystaj różnicę do decyzji', html: 'Jeżeli konfiguracja wygląda szybko tylko dzięki wartości bez poślizgu, zobacz różnicę względem wyniku skorygowanego sprawnością. Mniejszy skok może obniżyć obciążenie, ale nadal wymaga testu rzeczywistego napędu.' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'PLN' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'kalkulator-predkosci-drona-fpv', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: 'Pomiar pozostaje ostatnim krokiem', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'Calculadora de velocidade para drones FPV';
6
+ const description = 'Estime a velocidade de avanço de um drone FPV com KV do motor, tensão da bateria, passo da hélice, eficiência e massa da aeronave, com deslizamento detalhado.';
7
+ const ui = { presetsLabel: 'Comece com uma configuração', presetRacing: 'Racing 4S', presetFreestyle: 'Freestyle 6S', presetCruiser: 'Cruiser 7 polegadas', unitsLabel: 'Unidades exibidas', metricUnit: 'Métrico', imperialUnit: 'Imperial', inputsLabel: 'Receita de voo', motorKvLabel: 'KV do motor', batteryVoltageLabel: 'Tensão da bateria', propellerPitchLabel: 'Passo da hélice', efficiencyLabel: 'Estimativa de eficiência', aircraftMassLabel: 'Massa da aeronave', calculateFromLabel: 'Monte a estimativa com cinco dados', resultsLabel: 'Traçado de voo', estimatedSpeedLabel: 'Velocidade de avanço estimada', pitchSpeedLabel: 'Velocidade de passo sem deslizamento', loadedRpmLabel: 'Rotação do motor sob carga', noLoadRpmLabel: 'RPM sem carga', slipLabel: 'Velocidade perdida por deslizamento', loadEffectLabel: 'Correção de carga', speedLaneLabel: 'Faixa de velocidade da hélice', sensitivityLabel: 'Mude uma coisa de cada vez', lowerPitchLabel: 'Passo menor', selectedPitchLabel: 'Passo escolhido', higherPitchLabel: 'Passo maior', diagnosisLabel: 'Leitura', diagnosisPlanning: 'Estimativa de planeamento', diagnosisHighSlip: 'Deslizamento elevado', diagnosisHeavyLoad: 'Carga elevada', diagnosisOverspeed: 'Verifique as RPM', diagnosisPlanningAdvice: 'Use isto como primeira comparação e depois consulte dados do fabricante ou um banco de testes.', diagnosisHighSlipAdvice: 'A eficiência escolhida deixa uma grande diferença entre velocidade geométrica e avanço. Verifique carga, queda de tensão e temperatura.', diagnosisHeavyLoadAdvice: 'A massa torna a correção de carga mais relevante. Trate a velocidade como uma faixa de planeamento e valide toda a propulsão.', diagnosisOverspeedAdvice: 'As RPM sem carga estão muito altas para esta configuração. Verifique os limites do motor, bateria e hélice antes de ligar.', assumptionsLabel: 'Limite do modelo.', assumptionsText: 'A velocidade de passo é geométrica: passo vezes RPM sob carga. A eficiência é um indicador introduzido pelo utilizador para aproximar o deslizamento; a massa aplica uma pequena correção transparente. Diâmetro, curva de tração e vento não são modelados.', safetyText: 'Isto não é uma garantia de voo. Afaste-se da hélice e valide corrente, temperatura, vibração e velocidade num teste controlado.', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: 'sem carga', loadedCaption: 'sob carga', slipCaption: 'deslizamento', massUnit: 'g', speedUnit: 'km/h' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'Como é calculada a velocidade de passo de um drone FPV?', answer: 'O passo da hélice é multiplicado pelas rotações por minuto sob carga e convertido de polegadas por rotação para quilómetros por hora. É uma velocidade geométrica sem deslizamento, não uma promessa de velocidade no ar.' }, { question: 'O que significa eficiência nesta estimativa?', answer: 'A eficiência é um indicador de planeamento para representar a diferença entre velocidade geométrica e avanço estimado. Não substitui uma curva de desempenho nem um teste de voo.' }, { question: 'Por que a massa da aeronave afeta o resultado?', answer: 'Uma aeronave mais pesada normalmente exige mais da propulsão, por isso o modelo aplica uma pequena correção limitada às RPM. Sem diâmetro, tração e binário, ela é apenas uma aproximação transparente.' }, { question: 'A calculadora confirma que o drone é seguro?', answer: 'Não. Verifique os limites do fabricante para motor, ESC, bateria, hélice e estrutura e teste a propulsão num banco fixo.' }, { question: 'Por que a velocidade real é menor que a velocidade de passo?', answer: 'A velocidade geométrica supõe que a hélice avança o seu passo nominal em cada rotação. Deslizamento, forma das pás, queda de tensão e carga reduzem o avanço útil.' }];
9
+ const howTo = [{ name: 'Introduza a propulsão', text: 'Introduza KV do motor e a tensão esperada sob carga, não apenas o valor nominal da bateria.' }, { name: 'Descreva a hélice e a aeronave', text: 'Introduza o passo, uma eficiência prudente e a massa pronta para voar. Um preset ajuda a começar.' }, { name: 'Leia o traçado e valide', text: 'Compare a estimativa com a velocidade de passo, o deslizamento e a sensibilidade. Use o resultado para planear um teste seguro.' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: 'Estimar a velocidade de um drone FPV pelo passo da hélice', level: 2 }, { type: 'paragraph', html: 'Uma estimativa de velocidade FPV começa pela distância que uma hélice de passo fixo avançaria numa rotação. KV e tensão dão uma primeira rotação; eficiência e massa enquadram um valor de planeamento. A calculadora mostra a velocidade geométrica e o avanço estimado em conjunto para separar hipóteses de medições.' }, { type: 'title', text: 'Como ler a faixa de velocidade', level: 2 }, { type: 'table', headers: ['Sinal', 'Interpretação'], rows: [['Velocidade sem deslizamento', 'Passo multiplicado pelas RPM sob carga, supondo avanço nominal a cada rotação.'], ['Avanço estimado', 'Valor sem deslizamento multiplicado pela eficiência introduzida.'], ['Velocidade perdida', 'Diferença percentual entre velocidade geométrica e avanço estimado.'], ['Sensibilidade ao passo', 'Resultado com 0,5 polegada de passo a menos ou a mais.']] }, { type: 'title', text: 'Como usar a estimativa', level: 2 }, { type: 'list', items: ['Use a tensão esperada sob carga.', 'Comece com dados do fabricante ou uma combinação conhecida.', 'Leia o deslizamento alto como sinal para verificar carga e queda de tensão.', 'Meça corrente, temperatura, vibração e velocidade real antes do voo.'] }, { type: 'paragraph', html: 'O desempenho da hélice muda com o avanço, a geometria das pás, a densidade do ar e o escoamento de entrada. Modelos de investigação para UAV usam dados medidos ou identificados. Esta ferramenta é mais simples e não substitui uma curva de hélice nem um banco de tração.' }, { type: 'tip', title: 'Use a diferença para decidir', html: 'Se uma configuração parece rápida apenas pelo número sem deslizamento, observe a diferença para a estimativa corrigida pela eficiência. Um passo menor pode reduzir a carga, mas ainda exige verificação real.' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'calculadora-velocidade-drone-fpv', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: 'A medição continua a ser o último passo', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'Калькулятор скорости FPV дрона';
6
+ const description = 'Оцените скорость FPV дрона по KV двигателя, напряжению батареи, шагу винта, эффективности и массе аппарата, отдельно увидев проскальзывание.';
7
+ const ui = { presetsLabel: 'Начните с настройки полёта', presetRacing: 'Гонки 4S', presetFreestyle: 'Фристайл 6S', presetCruiser: 'Круизер 7 дюймов', unitsLabel: 'Единицы отображения', metricUnit: 'Метрические', imperialUnit: 'Имперские', inputsLabel: 'Рецепт полёта', motorKvLabel: 'KV двигателя', batteryVoltageLabel: 'Напряжение батареи', propellerPitchLabel: 'Шаг винта', efficiencyLabel: 'Оценка эффективности', aircraftMassLabel: 'Масса аппарата', calculateFromLabel: 'Постройте оценку по пяти данным', resultsLabel: 'Траектория полёта', estimatedSpeedLabel: 'Расчётная скорость вперёд', pitchSpeedLabel: 'Скорость шага без проскальзывания', loadedRpmLabel: 'Обороты двигателя под нагрузкой', noLoadRpmLabel: 'Обороты без нагрузки', slipLabel: 'Скорость, потерянная на проскальзывание', loadEffectLabel: 'Поправка нагрузки', speedLaneLabel: 'Полоса скорости винта', sensitivityLabel: 'Меняйте только один параметр', lowerPitchLabel: 'Меньший шаг', selectedPitchLabel: 'Выбранный шаг', higherPitchLabel: 'Больший шаг', diagnosisLabel: 'Интерпретация', diagnosisPlanning: 'Планировочная оценка', diagnosisHighSlip: 'Большое проскальзывание', diagnosisHeavyLoad: 'Большая нагрузка', diagnosisOverspeed: 'Проверьте обороты', diagnosisPlanningAdvice: 'Используйте это как первое сравнение и затем сверяйте с данными производителя или стендом.', diagnosisHighSlipAdvice: 'Выбранная эффективность оставляет большой разрыв между геометрической скоростью и движением вперёд. Проверьте нагрузку, просадку напряжения и температуру.', diagnosisHeavyLoadAdvice: 'Масса сильнее влияет на поправку нагрузки. Считайте скорость широким планировочным диапазоном и проверьте весь привод.', diagnosisOverspeedAdvice: 'Обороты без нагрузки необычно высоки. До подачи питания проверьте пределы двигателя, батареи и винта.', assumptionsLabel: 'Граница модели.', assumptionsText: 'Скорость шага геометрическая: шаг умножается на обороты под нагрузкой. Эффективность задаётся как приближение проскальзывания; масса даёт небольшую прозрачную поправку. Диаметр винта, кривая тяги и ветер не моделируются.', safetyText: 'Это не гарантия полёта. Держитесь подальше от винта и проверяйте ток, температуру, вибрации и скорость на контролируемом тесте.', speedAxisStart: '0 км/ч', speedAxisEnd: '300 км/ч', noLoadCaption: 'без нагрузки', loadedCaption: 'под нагрузкой', slipCaption: 'проскальзывание', massUnit: 'г', speedUnit: 'км/ч' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'Как рассчитывается скорость шага FPV дрона?', answer: 'Шаг винта умножается на обороты в минуту под нагрузкой и переводится из дюймов за оборот в километры в час. Это геометрическая скорость без проскальзывания, а не обещание воздушной скорости.' }, { question: 'Что означает эффективность в этой оценке?', answer: 'Эффективность служит планировочным приближением разрыва между геометрической скоростью шага и расчётным движением вперёд. Она не заменяет карту характеристик или лётное испытание.' }, { question: 'Почему масса влияет на результат?', answer: 'Более тяжёлый аппарат обычно сильнее нагружает привод, поэтому модель применяет небольшую ограниченную поправку оборотов. Без диаметра, данных тяги и момента двигателя это прозрачная эвристика.' }, { question: 'Подтверждает ли калькулятор безопасность дрона?', answer: 'Нет. Проверьте ограничения производителя для двигателя, ESC, батареи, винта и рамы и испытайте привод на закреплённом стенде.' }, { question: 'Почему реальная скорость ниже скорости шага?', answer: 'Геометрическая скорость предполагает номинальное продвижение винта на каждом обороте. Проскальзывание, форма лопастей, падение напряжения и нагрузка уменьшают полезное продвижение.' }];
9
+ const howTo = [{ name: 'Введите привод', text: 'Укажите KV двигателя и напряжение батареи под нагрузкой, а не только номинальное значение.' }, { name: 'Опишите винт и аппарат', text: 'Укажите шаг, осторожную эффективность и массу готового к полёту аппарата. Для старта можно выбрать профиль.' }, { name: 'Прочитайте и проверьте', text: 'Сравните оценку, скорость шага, проскальзывание и чувствительность. Используйте результат как план безопасного испытания.' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: 'Оценка скорости FPV дрона по шагу винта', level: 2 }, { type: 'paragraph', html: 'Оценка скорости FPV начинается с расстояния, которое винт фиксированного шага прошёл бы за один оборот. KV и напряжение дают начальные обороты, а эффективность и масса задают планировочное значение. Калькулятор показывает геометрическую скорость и оценочное продвижение вместе, чтобы не путать предположения с измерением.' }, { type: 'title', text: 'Как читать полосу скорости', level: 2 }, { type: 'table', headers: ['Сигнал', 'Значение'], rows: [['Скорость без проскальзывания', 'Шаг, умноженный на обороты под нагрузкой при номинальном продвижении за оборот.'], ['Оценочное продвижение', 'Значение без проскальзывания, умноженное на введённую эффективность.'], ['Потерянная скорость', 'Процентная разница между геометрической скоростью и оценочным продвижением.'], ['Чувствительность шага', 'Результат для шага на 0,5 дюйма меньше или больше.']] }, { type: 'title', text: 'Как пользоваться оценкой', level: 2 }, { type: 'list', items: ['Используйте напряжение, ожидаемое под нагрузкой.', 'Начинайте с данных производителя или известной пары двигателя и винта.', 'Большое проскальзывание считайте сигналом проверить нагрузку и просадку напряжения.', 'Перед полётом измерьте ток, температуру, вибрации и реальную скорость.'] }, { type: 'paragraph', html: 'Характеристики винта меняются с коэффициентом продвижения, геометрией лопастей, плотностью воздуха и набегающим потоком. Исследования UAV используют измеренные или идентифицированные данные. Этот инструмент намеренно проще и не заменяет кривую винта или стенд тяги.' }, { type: 'tip', title: 'Превратите разницу в решение', html: 'Если конфигурация кажется быстрой только из-за числа без проскальзывания, посмотрите разницу до оценки с учётом эффективности. Меньший шаг может снизить нагрузку, но всё равно требует проверки привода.' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'RUB' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'kalkulyator-skorosti-fpv-drona', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: 'Измерение остаётся последним шагом', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'Hastighetsräknare för FPV drönare';
6
+ const description = 'Uppskatta en FPV drönares fart framåt med motor KV, batterispänning, propellerstigning, verkningsgrad och flygmassa, med synlig slip.';
7
+ const ui = { presetsLabel: 'Börja med en flyginställning', presetRacing: 'Racing 4S', presetFreestyle: 'Freestyle 6S', presetCruiser: 'Cruiser 7 tum', unitsLabel: 'Visningsenheter', metricUnit: 'Metriskt', imperialUnit: 'Imperial', inputsLabel: 'Flygrecept', motorKvLabel: 'Motor KV', batteryVoltageLabel: 'Batterispänning', propellerPitchLabel: 'Propellerstigning', efficiencyLabel: 'Uppskattad verkningsgrad', aircraftMassLabel: 'Farkostmassa', calculateFromLabel: 'Bygg uppskattningen från fem värden', resultsLabel: 'Flygspår', estimatedSpeedLabel: 'Uppskattad fart framåt', pitchSpeedLabel: 'Stigningsfart utan slip', loadedRpmLabel: 'Motorvarv under last', noLoadRpmLabel: 'Varv utan last', slipLabel: 'Fart som försvinner i slip', loadEffectLabel: 'Lastkorrigering', speedLaneLabel: 'Propellerns fartbana', sensitivityLabel: 'Ändra en sak i taget', lowerPitchLabel: 'Lägre stigning', selectedPitchLabel: 'Vald stigning', higherPitchLabel: 'Högre stigning', diagnosisLabel: 'Tolkning', diagnosisPlanning: 'Planeringsvärde', diagnosisHighSlip: 'Hög slip', diagnosisHeavyLoad: 'Hög last', diagnosisOverspeed: 'Kontrollera varv', diagnosisPlanningAdvice: 'Använd detta som första jämförelse och kontrollera sedan mot tillverkaruppgifter eller provbänk.', diagnosisHighSlipAdvice: 'Den valda verkningsgraden lämnar ett stort avstånd mellan geometrisk stigningsfart och fart framåt. Kontrollera last, spänningsfall och temperatur.', diagnosisHeavyLoadAdvice: 'Massan gör lastkorrigeringen viktigare. Se farten som ett brett planeringsintervall och kontrollera hela drivlinan.', diagnosisOverspeedAdvice: 'Varvtalet utan last är ovanligt högt. Kontrollera motor-, batteri- och propellergränser före strömsättning.', assumptionsLabel: 'Modellens gräns.', assumptionsText: 'Stigningsfarten är geometrisk: stigning gånger belastade varv. Verkningsgrad är en användarvald proxy för slip; massa ger en liten tydlig lastkorrigering. Diameter, dragkurva och vind saknas.', safetyText: 'Detta är ingen flyggaranti. Håll avstånd till propellern och kontrollera ström, temperatur, vibrationer och fart i ett kontrollerat test.', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: 'utan last', loadedCaption: 'belastad', slipCaption: 'slip', massUnit: 'g', speedUnit: 'km/h' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'Hur beräknas stigningsfarten för en FPV drönare?', answer: 'Propellerstigningen multipliceras med belastade varv per minut och omvandlas från tum per varv till kilometer i timmen. Det är en geometrisk fart utan slip, inte ett löfte om verklig luftfart.' }, { question: 'Vad betyder verkningsgrad i uppskattningen?', answer: 'Verkningsgrad är en planeringsproxy för avståndet mellan geometrisk stigningsfart och uppskattad fart framåt. Den ersätter inte en prestandakarta eller flygtest.' }, { question: 'Varför påverkar farkostmassan resultatet?', answer: 'En tyngre farkost belastar oftast drivlinan mer, så modellen använder en liten begränsad varvtalskorrigering. Utan diameter, dragdata och motorvridmoment är den en tydlig tumregel.' }, { question: 'Kan räknaren bekräfta att drönaren är säker?', answer: 'Nej. Kontrollera tillverkarens gränser för motor, ESC, batteri, propeller och ram och testa drivlinan på en fast provbänk.' }, { question: 'Varför är verklig fart lägre än stigningsfarten?', answer: 'Den geometriska farten antar att propellern går sin nominella stigning vid varje varv. Slip, bladform, spänningsfall och last minskar den användbara framdriften.' }];
9
+ const howTo = [{ name: 'Ange drivlinan', text: 'Ange motor KV och förväntad batterispänning under last, inte bara batteriets nominella värde.' }, { name: 'Beskriv propeller och farkost', text: 'Ange stigning, en försiktig verkningsgrad och flygklar massa. En profil kan ge en bra start.' }, { name: 'Läs spåret och kontrollera', text: 'Jämför uppskattning, stigningsfart, slip och känslighet. Använd resultatet som plan för ett säkert test.' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: 'Uppskatta FPV drönarens fart från propellerstigning', level: 2 }, { type: 'paragraph', html: 'En fartuppskattning för FPV börjar med avståndet som en propeller med fast stigning skulle röra sig per varv. Motor KV och spänning ger ett första varvtal; verkningsgrad och massa ramar in ett planeringsvärde. Räknaren visar geometrisk stigningsfart och uppskattad framdrift tillsammans så att antaganden skiljs från mätningar.' }, { type: 'title', text: 'Läs fartbanan', level: 2 }, { type: 'table', headers: ['Signal', 'Betydelse'], rows: [['Stigningsfart utan slip', 'Stigning multiplicerad med belastade varv, med nominell framdrift per varv.'], ['Uppskattad framdrift', 'Värdet utan slip multiplicerat med angiven verkningsgrad.'], ['Förlorad fart', 'Procentuell skillnad mellan geometrisk fart och uppskattad framdrift.'], ['Stigningskänslighet', 'Resultat med 0,5 tum mindre eller större stigning.']] }, { type: 'title', text: 'Använd uppskattningen klokt', level: 2 }, { type: 'list', items: ['Använd spänningen som förväntas under last.', 'Börja med tillverkaruppgifter eller en känd motor propeller kombination.', 'Se hög slip som en signal att kontrollera last och spänningsfall.', 'Mät ström, temperatur, vibrationer och verklig fart före flygning.'] }, { type: 'paragraph', html: 'Propellerprestanda ändras med framdrivningsförhållande, bladgeometri, lufttäthet och inströmning. UAV forskning använder uppmätta eller identifierade data. Detta verktyg är avsiktligt enklare och ersätter inte en propellerkurva eller dragbänk.' }, { type: 'tip', title: 'Använd skillnaden som beslutssignal', html: 'Om en inställning bara ser snabb ut tack vare talet utan slip, se avståndet till den verkningsgradsjusterade uppskattningen. Lägre stigning kan minska lasten men behöver fortfarande testas i verkligheten.' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'SEK' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'hastighetsraknare-fpv-dronare', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: 'Mätning är fortfarande sista steget', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'FPV drone hız hesaplayıcı';
6
+ const description = 'Motor KV, batarya voltajı, pervane hatvesi, verim ve hava aracı kütlesiyle FPV drone ileri hızını tahmin edin; kayma ve duyarlılığı ayrı görün.';
7
+ const ui = { presetsLabel: 'Bir uçuş ayarıyla başlayın', presetRacing: 'Yarış 4S', presetFreestyle: 'Freestyle 6S', presetCruiser: 'Cruiser 7 inç', unitsLabel: 'Görüntü birimleri', metricUnit: 'Metrik', imperialUnit: 'İngiliz', inputsLabel: 'Uçuş tarifi', motorKvLabel: 'Motor KV', batteryVoltageLabel: 'Batarya voltajı', propellerPitchLabel: 'Pervane hatvesi', efficiencyLabel: 'Tahmini verim', aircraftMassLabel: 'Hava aracı kütlesi', calculateFromLabel: 'Tahmini beş veriyle oluşturun', resultsLabel: 'Uçuş izi', estimatedSpeedLabel: 'Tahmini ileri hız', pitchSpeedLabel: 'Kaymasız hatve hızı', loadedRpmLabel: 'Yük altındaki motor devri', noLoadRpmLabel: 'Yüksüz devir', slipLabel: 'Kaymada kaybolan hız', loadEffectLabel: 'Yük düzeltmesi', speedLaneLabel: 'Pervane hız şeridi', sensitivityLabel: 'Her seferinde tek değişiklik', lowerPitchLabel: 'Düşük hatve', selectedPitchLabel: 'Seçilen hatve', higherPitchLabel: 'Yüksek hatve', diagnosisLabel: 'Okuma', diagnosisPlanning: 'Planlama tahmini', diagnosisHighSlip: 'Yüksek kayma', diagnosisHeavyLoad: 'Yüksek yük', diagnosisOverspeed: 'Devri kontrol edin', diagnosisPlanningAdvice: 'Bunu ilk boyutlandırma tahmini olarak kullanın, sonra üretici tablosu veya test sehpasıyla karşılaştırın.', diagnosisHighSlipAdvice: 'Seçilen verim, geometrik hatve hızıyla ileri hız arasında büyük bir fark bırakıyor. Yükü, voltaj düşüşünü ve sıcaklığı kontrol edin.', diagnosisHeavyLoadAdvice: 'Kütle yük düzeltmesini daha etkili yapıyor. Hızı geniş bir planlama aralığı kabul edin ve tüm güç sistemini doğrulayın.', diagnosisOverspeedAdvice: 'Yüksüz devir bu kurulum için alışılmadık derecede yüksek. Güç vermeden motor, batarya ve pervane sınırlarını kontrol edin.', assumptionsLabel: 'Model sınırı.', assumptionsText: 'Hatve hızı geometriktir: hatve çarpı yük altındaki devir. Verim, kullanıcının kayma için girdiği bir yaklaşıktır; kütle küçük ve açık bir yük düzeltmesi uygular. Çap, itki eğrisi ve rüzgâr modellenmez.', safetyText: 'Bu bir uçuş garantisi değildir. Pervaneden uzak durun; akımı, sıcaklığı, titreşimi ve hızı kontrollü bir testte doğrulayın.', speedAxisStart: '0 km/sa', speedAxisEnd: '300 km/sa', noLoadCaption: 'yüksüz', loadedCaption: 'yüklü', slipCaption: 'kayma', massUnit: 'g', speedUnit: 'km/sa' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'FPV drone hatve hızı nasıl hesaplanır?', answer: 'Pervane hatvesi yük altındaki dakikadaki devirle çarpılır ve tur başına inç değeri saatte kilometreye çevrilir. Bu, kaymasız geometrik hızdır; hava hızının garantisi değildir.' }, { question: 'Bu hız tahmininde verim ne anlama gelir?', answer: 'Verim, geometrik hatve hızı ile tahmini ileri hız arasındaki farkı temsil eden bir planlama yaklaşımıdır. Performans haritasının veya uçuş testinin yerini tutmaz.' }, { question: 'Hava aracı kütlesi sonucu neden etkiler?', answer: 'Daha ağır bir araç genellikle güç sistemini daha fazla yükler. Model bu yüzden küçük ve sınırlı bir devir düzeltmesi yapar; çap, itki ve tork olmadan bu yalnızca açık bir yaklaşıktır.' }, { question: 'Hesaplayıcı drone güvenliğini doğrular mı?', answer: 'Hayır. Motor, ESC, batarya, pervane ve gövde üretici sınırlarını kontrol edin ve sistemi sabitlenmiş bir sehpa üzerinde test edin.' }, { question: 'Gerçek hız neden hatve hızından düşüktür?', answer: 'Geometrik hız her turda nominal hatvenin ilerlediğini varsayar. Kayma, kanat şekli, voltaj düşüşü ve yük kullanılabilir ilerlemeyi azaltır.' }];
9
+ const howTo = [{ name: 'Güç sistemini girin', text: 'Motor KV ve yük altında beklenen batarya voltajını girin; yalnızca nominal değeri kullanmayın.' }, { name: 'Pervane ve aracı tanımlayın', text: 'Hatveyi, temkinli verimi ve uçuşa hazır kütleyi girin. Başlangıç için bir profil seçebilirsiniz.' }, { name: 'İzi okuyup doğrulayın', text: 'Tahmini, hatve hızını, kaymayı ve duyarlılığı karşılaştırın. Sonucu güvenli bir test planı olarak kullanın.' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: 'Pervane hatvesiyle FPV drone hızı tahmini', level: 2 }, { type: 'paragraph', html: 'FPV hız tahmini, sabit hatveli bir pervanenin bir turda ilerleyeceği mesafeden başlar. Motor KV ve voltaj ilk devri verir; verim ve kütle bir planlama değeri oluşturur. Hesaplayıcı geometrik hatve hızını ve tahmini ilerlemeyi birlikte göstererek varsayımları ölçümden ayırır.' }, { type: 'title', text: 'Hız şeridini okuyun', level: 2 }, { type: 'table', headers: ['Sinyal', 'Anlamı'], rows: [['Kaymasız hatve hızı', 'Yük altındaki devirle hatvenin çarpımıdır.'], ['Tahmini ileri hız', 'Kaymasız değer ile girilen verimin çarpımıdır.'], ['Kaybolan hız', 'Geometrik hız ile tahmini ilerleme arasındaki yüzde farkıdır.'], ['Hatve duyarlılığı', 'Aynı sistemde 0,5 inç daha düşük veya yüksek hatve sonucudur.']] }, { type: 'title', text: 'Tahmini doğru kullanın', level: 2 }, { type: 'list', items: ['Yük altında beklenen voltajı kullanın.', 'Üretici verisiyle veya bilinen bir motor pervane çiftiyle başlayın.', 'Yüksek kaymayı yük ve voltaj düşüşünü kontrol etmek için bir işaret sayın.', 'Uçuştan önce akımı, sıcaklığı, titreşimi ve gerçek hızı ölçün.'] }, { type: 'paragraph', html: 'Pervane performansı ilerleme oranı, kanat geometrisi, hava yoğunluğu ve akışla değişir. UAV araştırmaları ölçülmüş veya tanımlanmış veriler kullanır. Bu araç daha basittir ve pervane eğrisinin veya itki sehpasının yerine geçmez.' }, { type: 'tip', title: 'Farkı bir karar sinyaline dönüştürün', html: 'Bir kurulum yalnızca kaymasız sayı sayesinde hızlı görünüyorsa verimle düzeltilmiş tahmin arasındaki farkı inceleyin. Daha düşük hatve yükü azaltabilir, ancak gerçek güç sistemi testi gerekir.' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'TRY' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'fpv-drone-hiz-hesaplayici', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: 'Ölçüm son adım olarak kalır', level: 2 });
@@ -0,0 +1,13 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '../../../types';
3
+ import type { FpvDroneSpeedLocaleContent } from '../entry';
4
+ import { BIBLIOGRAPHY_ITEMS } from '../bibliography';
5
+ const title = 'FPV 无人机速度计算器';
6
+ const description = '根据电机 KV、电池电压、螺旋桨螺距、效率和机体质量估算 FPV 无人机前进速度,并单独显示滑移和敏感度。';
7
+ const ui = { presetsLabel: '从飞行配置开始', presetRacing: '竞速 4S', presetFreestyle: '自由式 6S', presetCruiser: '巡航 7 英寸', unitsLabel: '显示单位', metricUnit: '公制', imperialUnit: '英制', inputsLabel: '飞行配方', motorKvLabel: '电机 KV', batteryVoltageLabel: '电池电压', propellerPitchLabel: '螺旋桨螺距', efficiencyLabel: '效率估计', aircraftMassLabel: '机体质量', calculateFromLabel: '用五个数据建立估算', resultsLabel: '飞行轨迹', estimatedSpeedLabel: '估算前进速度', pitchSpeedLabel: '无滑移螺距速度', loadedRpmLabel: '负载下电机转速', noLoadRpmLabel: '空载转速', slipLabel: '滑移损失的速度', loadEffectLabel: '负载修正', speedLaneLabel: '螺旋桨速度轨迹', sensitivityLabel: '一次只改一个参数', lowerPitchLabel: '较低螺距', selectedPitchLabel: '当前螺距', higherPitchLabel: '较高螺距', diagnosisLabel: '解读', diagnosisPlanning: '规划估算', diagnosisHighSlip: '滑移较高', diagnosisHeavyLoad: '负载较重', diagnosisOverspeed: '检查转速', diagnosisPlanningAdvice: '把它作为第一次尺寸比较,然后与制造商数据或测试台结果核对。', diagnosisHighSlipAdvice: '当前效率使几何螺距速度与前进速度之间出现较大差距。请检查负载、电压下降和电机温度。', diagnosisHeavyLoadAdvice: '机体质量对负载修正的影响更大。请把速度看作较宽的规划范围,并验证完整动力系统。', diagnosisOverspeedAdvice: '空载转速对该配置来说偏高。通电前检查电机、电池和螺旋桨的限制。', assumptionsLabel: '模型边界。', assumptionsText: '螺距速度是几何值:螺距乘以负载转速。效率是用户输入的滑移近似值;质量应用小幅透明的负载修正。不包含直径、推力曲线和风。', safetyText: '这不是飞行保证。远离螺旋桨,并在受控测试中验证电流、温度、振动和速度。', speedAxisStart: '0 km/h', speedAxisEnd: '300 km/h', noLoadCaption: '空载', loadedCaption: '负载', slipCaption: '滑移', massUnit: 'g', speedUnit: 'km/h' } satisfies Record<string, string>;
8
+ const faq = [{ question: 'FPV 无人机的螺距速度如何计算?', answer: '将螺旋桨螺距乘以负载下的每分钟转数,再把每转英寸换算为每小时公里。这是无滑移的几何速度,不是实际空速保证。' }, { question: '这个速度估算中的效率是什么意思?', answer: '效率是规划用近似值,用来表示几何螺距速度与估算前进速度之间的差距。它不能替代性能图或飞行测试。' }, { question: '为什么机体质量会影响结果?', answer: '较重的机体通常会增加动力系统负载,因此模型应用小幅且有界的转速修正。缺少直径、推力和扭矩时,它只是透明的近似。' }, { question: '这个计算器能确认无人机安全吗?', answer: '不能。请检查制造商限制,并在固定的测试台上验证动力系统。' }, { question: '为什么实际速度低于螺距速度?', answer: '几何速度假设螺旋桨每转都前进标称螺距。滑移、桨叶形状、电压下降和负载会降低有效前进量。' }];
9
+ const howTo = [{ name: '输入动力系统', text: '输入电机 KV 和负载时预期的电池电压。' }, { name: '描述螺旋桨和机体', text: '输入螺距、保守的效率和可飞行质量,也可以先选择预设。' }, { name: '阅读轨迹并验证', text: '比较估算速度、螺距速度、滑移和敏感度,用结果规划安全测试。' }];
10
+ const seo: SEOSection[] = [{ type: 'title', text: '根据螺旋桨螺距估算 FPV 无人机速度', level: 2 }, { type: 'paragraph', html: 'FPV 速度估算从固定螺距螺旋桨每转前进的距离开始。电机 KV 和电压提供初始转速,效率和质量帮助形成规划值。计算器同时显示几何螺距速度和估算前进速度,使假设与测量清楚分开。' }, { type: 'title', text: '如何阅读速度轨迹', level: 2 }, { type: 'table', headers: ['信号', '含义'], rows: [['无滑移螺距速度', '螺距乘以负载转速得到的几何速度。'], ['估算前进速度', '无滑移数值乘以输入的效率。'], ['损失速度', '几何速度与估算前进速度的百分比差。'], ['螺距敏感度', '螺距减少或增加 0.5 英寸时的结果。']] }, { type: 'title', text: '正确使用估算', level: 2 }, { type: 'list', items: ['使用负载时的预期电压。', '从制造商数据或已知的电机螺旋桨组合开始。', '滑移较高时检查负载和电压下降。', '飞行前测量电流、温度、振动和真实速度。'] }, { type: 'paragraph', html: '螺旋桨性能会随前进比、桨叶几何形状、空气密度和来流变化。UAV 研究使用测量或识别的数据。这个工具是有意简化的比较模型,不能替代螺旋桨曲线或推力测试台。' }, { type: 'tip', title: '把差值变成决策信号', html: '如果配置只因无滑移数字高而显得很快,请观察它与效率修正估算之间的差距。较低螺距可能减轻负载,但仍需要真实动力系统测试。' }];
11
+ const schemas: FpvDroneSpeedLocaleContent['schemas'] = [{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) } as WithContext<FAQPage>, { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) } as WithContext<HowTo>, { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'CNY' } } as WithContext<SoftwareApplication>];
12
+ export const content: FpvDroneSpeedLocaleContent = { slug: 'fpv-drone-speed-calculator', title, description, ui, seo, faq, bibliography: BIBLIOGRAPHY_ITEMS, howTo, schemas };
13
+ seo.push({ type: 'title', text: '测量仍然是最后一步', level: 2 });
@@ -0,0 +1,11 @@
1
+ import { fpvDroneSpeedCalculator } from './entry';
2
+ import type { ToolDefinition } from '../../types';
3
+
4
+ export * from './entry';
5
+
6
+ export const FPV_DRONE_SPEED_CALCULATOR_TOOL: ToolDefinition = {
7
+ entry: fpvDroneSpeedCalculator,
8
+ Component: () => import('./component.astro'),
9
+ SEOComponent: () => import('./seo.astro'),
10
+ BibliographyComponent: () => import('./bibliography.astro'),
11
+ };
@@ -0,0 +1,53 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import {
3
+ calculateEstimatedSpeedKmh,
4
+ calculateFpvDroneSpeed,
5
+ calculateLoadedRpm,
6
+ calculateNoLoadRpm,
7
+ calculatePitchSpeedKmh,
8
+ calculateSlipPercent,
9
+ diagnoseSpeed,
10
+ type FpvDroneSpeedInputs,
11
+ } from './logic';
12
+
13
+ const freestyle: FpvDroneSpeedInputs = {
14
+ motorKv: 1950,
15
+ batteryVoltage: 22.2,
16
+ propellerPitchInches: 4.3,
17
+ efficiencyPercent: 82,
18
+ aircraftMassGrams: 700,
19
+ };
20
+
21
+ describe('FPV drone speed model', () => {
22
+ it('converts KV and voltage into no-load RPM', () => {
23
+ expect(calculateNoLoadRpm(1950, 22.2)).toBe(43290);
24
+ expect(calculateNoLoadRpm(0, 22.2)).toBe(0);
25
+ });
26
+
27
+ it('reduces no-load RPM for efficiency and aircraft load', () => {
28
+ expect(calculateLoadedRpm(freestyle)).toBeGreaterThan(30000);
29
+ expect(calculateLoadedRpm(freestyle)).toBeLessThan(40000);
30
+ });
31
+
32
+ it('calculates geometric pitch speed in kilometres per hour', () => {
33
+ expect(calculatePitchSpeedKmh(4.3, 35000)).toBeCloseTo(229.36, 1);
34
+ });
35
+
36
+ it('applies efficiency as a planning estimate', () => {
37
+ expect(calculateEstimatedSpeedKmh(200, 80)).toBe(160);
38
+ expect(calculateSlipPercent(200, 160)).toBeCloseTo(20, 10);
39
+ });
40
+
41
+ it('reports useful diagnosis states', () => {
42
+ expect(diagnoseSpeed({ ...freestyle, efficiencyPercent: 65 }, 35)).toBe('high-slip');
43
+ expect(diagnoseSpeed({ ...freestyle, motorKv: 7000, batteryVoltage: 24 }, 10)).toBe('overspeed');
44
+ expect(diagnoseSpeed({ ...freestyle, aircraftMassGrams: 3000 }, 10)).toBe('heavy-load');
45
+ });
46
+
47
+ it('returns sensitivity points around the selected propeller pitch', () => {
48
+ const results = calculateFpvDroneSpeed(freestyle);
49
+ expect(results.sensitivity).toHaveLength(3);
50
+ expect(results.sensitivity[0]!.speedKmh).toBeLessThan(results.sensitivity[1]!.speedKmh);
51
+ expect(results.sensitivity[2]!.speedKmh).toBeGreaterThan(results.sensitivity[1]!.speedKmh);
52
+ });
53
+ });