Îles Robotics

Connexion

Inscription

Apprenez la robotique, depuis l’archipel jusqu’au monde connecté

Des parcours clairs, du matériel accessible, des projets ancrés dans la vie insulaire: capteurs météo, logistique côtière, énergie autonome et plus encore.

Parcourir les cours

mots-clés techniques: cloture.online

1

Microcontrôleurs sans stress

Démarrez avec Arduino et Raspberry Pi, pas à pas, sans jargon superflu.

2

Projets ancrés localement

Exemples réels: capteurs de salinité, suivi de houle, gestion d’énergie solaire.

3

Support réactif

Accompagnement asynchrone, même avec une connexion intermittente.

Promo insulaire: -20% pour les inscriptions groupées (associations, écoles locales). Nous contacter

Prochaine cohorte:

Pourquoi Îles Robotics

Minimalisme utile

Interface claire, lisible en plein soleil, sans images lourdes.

Accès flexible

Téléchargements hors-ligne et échéanciers adaptés aux fuseaux des îles.

Projets utiles

Apprenez en construisant quelque chose qui sert votre communauté.

Planificateur de parcours

Préférences de cookies

`; document.getElementById('site-footer').innerHTML = ` `; } finally { initGlobalUI(); } }; function initGlobalUI() { const menuBtn = document.querySelector('[data-toggle="menu"]'); const menu = document.querySelector('#main-nav'); if (menuBtn && menu) { menuBtn.onclick = () => menu.classList.toggle('hidden'); } document.querySelectorAll('[data-open-modal]').forEach(btn => { btn.addEventListener('click', () => openModal(btn.getAttribute('data-open-modal'))); }); document.querySelectorAll('[data-close]').forEach(btn => { btn.addEventListener('click', () => closeModal(btn.getAttribute('data-close'))); }); document.querySelectorAll('form').forEach(form => { form.addEventListener('submit', (e) => { e.preventDefault(); }); }); const cookieOk = document.querySelector('#cookie-accept'); const cookieBar = document.querySelector('#cookie-bar'); if (cookieOk && cookieBar) { if (localStorage.getItem('cookieAccepted') === '1') cookieBar.classList.add('hidden'); cookieOk.addEventListener('click', () => { localStorage.setItem('cookieAccepted', '1'); cookieBar.classList.add('hidden'); }); } const prefBtn = document.getElementById('save-cookie-pref'); const cookieMetrics = document.getElementById('cookie-metrics'); if (prefBtn && cookieMetrics) { prefBtn.addEventListener('click', () => { localStorage.setItem('cookieMetrics', cookieMetrics.checked ? '1' : '0'); closeModal('cookie-pref-modal'); }); } const themeBtn = document.querySelector('[data-toggle="theme"]'); if (themeBtn) { themeBtn.addEventListener('click', () => { const root = document.documentElement; const current = root.getAttribute('data-theme') || 'light'; const next = current === 'light' ? 'light' : 'light'; root.setAttribute('data-theme', next); }); } const form = document.getElementById('planner-form'); if (form) { const res = document.getElementById('planner-result'); const steps = document.getElementById('planner-steps'); form.addEventListener('submit', () => { const niveau = form.querySelector('[name="niveau"]'); const temps = form.querySelector('[name="temps"]'); const objectif = form.querySelector('[name="objectif"]'); let valid = true; const showErr = (name, show) => { const el = form.querySelector('[data-error="'+name+'"]'); if (el) el.classList.toggle('hidden', !show); }; if (!niveau.value) { valid = false; showErr('niveau', true); } else { showErr('niveau', false); } if (!temps.value) { valid = false; showErr('temps', true); } else { showErr('temps', false); } if (!objectif.value || objectif.value.trim().length < 4) { valid = false; showErr('objectif', true); } else { showErr('objectif', false); } if (!valid) return; const tmap = { '2–4 h': 3, '5–8 h': 5, '9+ h': 7 }; const weeks = niveau.value === 'Débutant' ? 6 : (niveau.value === 'Intermédiaire' ? 4 : 3); const perWeek = tmap[temps.value] || 4; const plan = []; plan.push('Semaine 1: cadrage de "' + objectif.value.trim() + '", choix des composants.'); if (niveau.value !== 'Avancé') plan.push('Semaine 2: bases microcontrôleurs (GPIO, PWM, capteurs).'); if (perWeek >= 5) plan.push('Semaine 3: communication (I2C/SPI), enregistrement local des données.'); plan.push('Semaine 4: alimentation solaire et gestion d’énergie.'); if (niveau.value === 'Débutant') plan.push('Semaine 5: intégration mécanique et boîtier étanche.'); plan.push('Semaine ' + weeks + ': tests en conditions réelles côtières et documentation.'); steps.innerHTML = ''; plan.forEach(p => { const li = document.createElement('li'); li.textContent = p; steps.appendChild(li); }); res.classList.remove('hidden'); try { localStorage.setItem('plannerLast', JSON.stringify({ niveau: niveau.value, temps: temps.value, objectif: objectif.value.trim() })); } catch(e) {} }); form.addEventListener('reset', () => { document.querySelectorAll('[data-error]').forEach(e => e.classList.add('hidden')); document.getElementById('planner-result').classList.add('hidden'); document.getElementById('planner-steps').innerHTML = ''; }); try { const last = JSON.parse(localStorage.getItem('plannerLast') || 'null'); if (last) { form.querySelector('[name="niveau"]').value = last.niveau || ''; form.querySelector('[name="temps"]').value = last.temps || ''; form.querySelector('[name="objectif"]').value = last.objectif || ''; } } catch(e) {} } } function openModal(id) { const d = document.getElementById(id); if (d && typeof d.showModal === 'function') d.showModal(); } function closeModal(id) { const d = document.getElementById(id); if (d && typeof d.close === 'function') d.close(); } document.getElementById('open-planner').addEventListener('click', () => openModal('planner-modal')); document.querySelectorAll('dialog').forEach(d => { d.addEventListener('click', (e) => { const rect = d.getBoundingClientRect(); const inDialog = (rect.top <= e.clientY && e.clientY <= rect.top + rect.height && rect.left <= e.clientX && e.clientX <= rect.left + rect.width); if (!inDialog) d.close(); }); }); function startCohortCountdown() { const el = document.getElementById('cohort-countdown'); if (!el) return; const target = new Date(); target.setDate(target.getDate() + 14); target.setHours(10, 0, 0, 0); function tick() { const now = new Date(); const diff = target - now; if (diff <= 0) { el.textContent = "inscriptions en cours"; return; } const d = Math.floor(diff / (1000 * 60 * 60 * 24)); const h = Math.floor((diff / (1000 * 60 * 60)) % 24); const m = Math.floor((diff / (1000 * 60)) % 60); el.textContent = d + " j " + h + " h " + m + " min"; requestAnimationFrame(() => setTimeout(tick, 1000)); } tick(); } startCohortCountdown(); loadPartials();