Merge pull request #2 from HashEdits/main

French localization for the docs
This commit is contained in:
Prohurtz 2023-02-22 19:44:08 -06:00 committed by GitHub
commit c57232089f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
63 changed files with 3174 additions and 0 deletions

View File

@ -0,0 +1,95 @@
//https://vitepress.vuejs.org/config/theme-configs
//https://vitepress.vuejs.org/guide/theme-nav#navigation-links
//import MyLayout from '../../vue/MyLayout.vue'
const theme = {
logo: {
light: '/logo_light.png', dark: '/logo.svg', alt: 'EyeTrackVR Logo'
},
siteTitle: 'Docs EyeTrackVR',
/* Note the footer will not show when sidebar is active */
footer: {
message: "Sorti sous une licence MIT.",
copyright: "Copyright © 2022-present ETVR",
},
nav: [
{
text: 'À propos',
items: [
{ text: 'À propos de nous', link: '/about' },
{ text: 'Development Road Map', link: '/dev_roadmap' },
]
},
{ text: "Contact", link: "/contact" },
],
sidebar: [
{
text: "Se lancer",
collapsible: true,
items: [
{ text: "Introduction", link: "/getting_started/intro" },
{ text: "Choses à savoir avant de commencer", link: "/getting_started/things_to_know" },
],
},
{
text: "Comment construire",
collapsible: true,
items: [
{ text: "Guide d'assembleage complet", link: "/how_to_build/full_build" },
{ text: "liste des pièces", link: "/how_to_build/parts_list" },
{ text: "Comment créer vos propres montures et attachements", link: "/how_to_build/creating_your_own_mount" },
],
},
{
text: "Guide Firmware",
collapsible: true,
items: [
{ text: "Introduction", link: "/firmware_guide/firmware" },
{ text: "Mettre en place l'environement Visual Studio Code", link: "/firmware_guide/setup_vscode" },
{ text: "Configurer le Firmware", link: "/firmware_guide/configure_firmware" },
{ text: "téléverser le Firmare", link: "/firmware_guide/upload_firmware" },
{ text: "MDNS", link: "/firmware_guide/mdns" },
{ text: "API de REST", link: "/firmware_guide/rest_api" },
],
},
{
text: "Guide Logiciel",
collapsible: true,
items: [
{ text: "Installer et mettre en place l'app ETVR", link: "/software_guide/eyetrackvr_app_guide" },
{ text: "Construire l'app depuis la source", link: "/software_guide/build_software" },
],
},
{
text: "Divers",
collapsible: true,
items: [
{ text: "Mise en place de votre avatar VRChat", link: "/misc/vrc_avatar_setup" },
{ text: "FAQ", link: "/misc/faq" },
],
},
{
text: "Développement",
collapsible: true,
items: [
{ text: "Docs", link: "/development/docs/dev_docs" },
],
},
{
text: "Archive",
collapsible: true,
items: [
{ text: "Préparer la soudure des PCB infrarouge V2P", link: "/archive/fox_ir_v2_build_instructions" },
],
},
],
socialLinks: [
{ icon: 'github', link: 'https://github.com/RedHawk989/EyeTrackVR' },
{ icon: 'discord', link: 'https://discord.gg/kkXYbVykZX' }
]
}
const ThemeSettings = {}
export { theme, ThemeSettings }

View File

@ -0,0 +1,53 @@
---
layout: page
---
<script setup>
import {
VPTeamPage,
VPTeamPageTitle,
VPTeamMembers,
VPTeamPageSection
} from 'vitepress/theme'
import { members, contributors } from '../static/members'
</script>
<VPTeamPage>
<VPTeamPageTitle>
<template #title>
<div class="text-[#ab5ac7]">
Our Team
</div>
</template>
<template #lead>
L'équipe de dévelopement de EyeTrackVR est gèré par une équipe internationale,
quelque d'entre eux ont été choisis d'être mis en avant ci-dessous.<br>
<br>
Les développeurs de EyetrackVR sont un groupe de personnes qui sont passionés par les domaines de la réalité virtuelle et augmanté.
</template>
</VPTeamPageTitle>
<VPTeamMembers
size="medium"
:members="members"
/>
<VPTeamPageSection>
<template #title>Contributeurs</template>
<template #lead>Ceux qui ont activement contribué au developpement.<br> Support communautaire</template>
<template #members>
<VPTeamMembers size="small" :members="contributors" />
</template>
</VPTeamPageSection>
<VPTeamPageSection>
<template #title>Philosophie</template>
<template #lead>
Les <a class="custom-links" href="/intro" target="_blank">guides</a> sur ce site contient des notes de notre propre équipe
(pas toutes aussi soignés que les autres) que l'on donnes pour que d'autres personnes puisses les utiliser<br>
<br>
On espère que tu trouvera quleque chose d'utile ici aussi<br>
<br>
On est militant du modèle<a class="custom-links" href="https://fr.wikipedia.org/wiki/Open_source" target="_blank">open source</a>.<br>
<br>
C'est donc pour ça que nous nous éfforçons à faire en sorte que notre travail soit ouvert aux autres pour être regardé, reproduit et/ou réutilisé.
</template>
</VPTeamPageSection>
</VPTeamPage>

View File

@ -0,0 +1,84 @@
<script setup>
import ImageCard from '../../vue/images/ImageComponent.vue'
import { image_settings } from '../../static/image_settings'
</script>
# Fox IR V2 Buil dInstructions {.text-[#ab5ac7]}
## Step 15: Prepare to solder IR LED PCB V2s
Get your magnifying glass out, it's time to solder very smol things.
Gather 4 PCBs, 4 IR LEDs, and 2 ~700ohm resistors.
<ImageCard :options="image_settings.fox_ir_build_instructions_one"/>
Here are the PCB pin-out labels:
<ImageCard :options="image_settings.fox_ir_build_instructions_two"/>
LED labels:
<ImageCard :options="image_settings.fox_ir_build_instructions_three"/>
If you have different LEDs, please consult their datasheet.
Some terminology related to them:
`5V`: 5-volt power in.
`GND`: Ground or power out.
`AR`: After-Resistor this is to be used as the power in on the 2nd PCB in series as resistors are not needed on the 2nd PCB since they are on the 1st one.
`SNG`: Single resistor, use this as 5V in if you are using ***only 1*** `~700ohm` resistor on V3 boards ***(not recommended)***.
`Negative`: This marks the negative side of the LED.
`Positive`: This marks the positive side of the LED.
## Step 17: Solder resistors on PCB V2
You only need 1 PCB to have a resistor per eye.
<ImageCard :options="image_settings.fox_ir_build_instructions_four"/>
Tin the resistor pads.
<ImageCard :options="image_settings.fox_ir_build_instructions_five"/>
Hold the resistor in place.
<ImageCard :options="image_settings.fox_ir_build_instructions_six"/>
Solder one end.
<ImageCard :options="image_settings.fox_ir_build_instructions_seven"/>
Flip to the other side of the resistor and solder it.
<ImageCard :options="image_settings.fox_ir_build_instructions_eight"/>
## Solder LEDs on PCB V2
<ImageCard :options="image_settings.fox_ir_build_instructions_nine"/>
Tin the pads
<ImageCard :options="image_settings.fox_ir_build_instructions_ten"/>
Place the resistor on the pads in the correct orientation.
<ImageCard :options="image_settings.fox_ir_build_instructions_eleven"/>
Solder each side of the resistor. Be careful not to solder at too high of a temp, recommended soldering temp is `230C with a max of 245C`.
<ImageCard :options="image_settings.fox_ir_build_instructions_twelve"/>
## Wire up the PCBs V2
Basic full wiring diagram of IR PCBs V2.
<ImageCard :options="image_settings.fox_ir_build_instructions_thirteen"/>
The PCB that receives the 5V power is the one with the resistor. The second one, which gets its power from the ground pin of the first, does not have a resistor on it and its power input pin is the AR pin (After-Resistor). The 2nd PCBs ground pin goes to the ground of the system, in the diagram it is the ESPs ground pin.

View File

@ -0,0 +1,10 @@
<div align="center" class="rounded-md">
<h1 class="text-[#ab5ac7]">Contactes nous</h1>
<br>
Rejoins notre discord pour plus d'info et pour poser tes questions.
<br>
<br>
<iframe class="rounded-md" id="discord-widget" src="https://discord.com/widget?id=946212245187199026&theme=dark" width="350" height="500" allowtransparency="true" frameborder="0" sandbox="allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts" target="_blank"></iframe>
</div>
<!-- [![Discord](https://discord.com/api/guilds/946212245187199026/widget.png?style=banner3)](https://discord.gg/kkXYbVykZX){:target="_blank" :alt="Discord"} -->

View File

@ -0,0 +1,26 @@
<script setup>
import CheckBoxList from '../vue/CheckBoxList.vue'
import { InProgress, Completed, Planned } from '../static/dev_roadmap'
</script>
# Programme de développement de EyeTrackVR {.text-[#ab5ac7]}
Cette page contiendra la liste des fonctionalitées qui sont en cours de développment, finis, et prévu.
## Completed
<CheckBoxList
:options="{...finis}"
/>
## In Progress
<CheckBoxList
:options="{...en cours}"
/>
## Planned
<CheckBoxList
:options="{...prévu}"
/>

View File

@ -0,0 +1,61 @@
# Development Documentation for the EyeTrackVR Docs Site
This is the documentation for the EyeTrackVR Docs site. It is built using [VitePress](https://vitepress.vuejs.org/).
## Getting Started
### Prerequisites
- [Node.js](https://nodejs.org/en/) (v14.15.4 or higher)
- [Yarn](https://yarnpkg.com/) (v1.22.10 or higher)
- [Git](https://git-scm.com/) (v2.30.1 or higher)
- [VSCode](https://code.visualstudio.com/) (v1.56.2 or higher)
### Installation
1. Clone the repo
```sh
git clone https://github.com/RedHawk989/EyeTrackVR-Docs.git
```
2. Navigate to the `vitepress` folder
```sh
cd vitepress
```
3. Install Yarn packages
```sh
yarn
```
4. Start the dev server
```sh
yarn dev
```
5. Open the site in your browser
## Contributing
### Project Structure
1. Familiarize yourself with the [VitePress documentation](https://vitepress.vuejs.org/).
2. Then, move on to our project specific documentation below.
#### Standards
- All documentation should be written in Markdown or Vue components.
- All file names are snake case *and* lowercase letters.
- Do not make naming changes to the `vitepress` folder.
- Do not make major changes to the `vitepress` folder structure without proir consultation of team members.
- For Vue componentes, follow the [Vue3 docs](https://vuejs.org/guide/introduction.html).
### Project Specific Documentation
::: tip
COMING SOON
:::

View File

@ -0,0 +1,30 @@
<script setup>
import Alerts from '../../vue/alerts/Alerts.vue'
import ImageCard from '../../vue/images/ImageComponent.vue'
import { image_settings } from '../../static/image_settings'
import { alerts } from '../../static/alerts'
</script>
# Configurer le firmware {.text-[#ab5ac7]}
## Une fois que vous avez ouvert le projet, vous devrez voir quelque chose dans le menu de gauche qui resembles à ça
<ImageCard :options="image_settings.configure_firmware_one"/>
## Ouvrez le fichier `platformio.ini`
<ImageCard :options="image_settings.configure_firmware_two"/>
Sur les lignes 17 et 18, remplacez le texte bidon avec votre SSID (WiFi access point name) et mot de passe correctement saisi.
<Alerts :options="alerts.parts_list_one">
<template v-slot:content>
<p>
Faites attention que votre routeur WiFi ait bien une bande 2.4Ghz. Bien que la plupart en ont, ce n'est pas ytoujours le cas. Séparer vos bandes 5Ghz et 2.4Ghz est vivement recomandé, bien que pas obligatoire.
</p>
</template>
</Alerts>
Re-verifiez que vous avez bien renté vos identifiants WiFi et que ce réseau WiFi ait bien une bande 2.4Ghz.
## [Maintenant vous pouvez aller téléverser le firmware](/firmware_guide/upload_firmware.html)

View File

@ -0,0 +1,11 @@
# C'est quoi ce truc? {.text-[#ab5ac7]}
Le firmware est la deuxième parite de l'équation pour que le suivi fonctionnes. Il vis sur les puces ESP32, et est résponsable de streamer le flux vidéo de votre tracker à votre ordinateur.
## Qu'est-ce que je dois télécharger et où?
Les tests récents sont fait avec notre propre solution s'appelant OpenIris, [ce trouvant ici](https://github.com/lorow/OpenIris). Afin de regarder l'état du projet, vous pouvez regarder notre [programme de développement ici](/dev_roadmap)
## Comment est-ce que je le télécharges?
[Suivez les étapes indiquées ici](/firmware_guide/setup_vscode)

View File

@ -0,0 +1,45 @@
# MDNS {.text-[#ab5ac7]}
## Qu'est-ce que c'est?
`mDNS` est un protocole qui vous permet de vous connecter à un appareil avec un nom plutôt qu'avec une adresse IP. Ceci est très utile quand on ne connais pas l'adresse IP d'un appareil, ou que l'on ne veut pas avoir à faire attention à l'adresse IP de l'appareil. C'est également super utile lorcequ'on utilise un adressage d'IP dynamique.
Dans le protocole `mDNS` l'adresse IP de l'appareil peut changer, mais le nom de l'appareil sera toujours le même. Ça veut dire que vous pouvez vous connecter à un appareil en utilisant son nom, même si l'adresse IP de l'appareil change.
## Comment l'utiliser
### Activer mDNS
`mDNS` est activé par défault dans le nouveau firmware, et peut être désactivé.
Pour l'utiliser, vous n'avez qu'a donner un nom à votre appareil dans le fichier de configuration du firmware.
Cette option peut être trouvé dans la section `[wifi]` du fichier `ini/user_config.ini`.
```ini
mdnsname = "openiristracker" # do not add .local
```
Par défaut, le nom de l'appareil est `openiristracker`, cependant vous pouvez le changer par ce que vous voulez.
::: warning Chnager le nom
Vu que vous avez deux ESP32, vous devez faire attention que le nom des deux ESP soit uniques et différent de l'autre. Si vous ne changez pas le nom des appareils vous ne pourrez pas vous connecter aux deux appareils en même temps.
:::
### Se conecter à l'appareil
Pour vous connecter à votre appareil, vous devez utiliser le nom de lappareil suivi de `.local`. Par exemple, si le nom de votre appareil est `esp32`, vous pourrez vous y connecter en utilisant `http://esp32.local`.
## Prérequis `Bonjour`
`Bonjour` est requis pour utiliser le protocole `mDNS` _sur windows et mac uniquement_. Si vous êtes sur Windows, vous pouvez télécharger Bonjour [ici](https://support.apple.com/kb/DL999?locale=en_US). Si vous utilisez macOS, Bonjour est déjà installé.
Vous pouvez également récupèrer un package totalement testé [ici](https://github.com/RedHawk989/EyeTrackVR/tree/GUI/GUI/assets/3rdParty) (pour Windows uniquement).
## Dépanage
### Vous ne pouvez pas vous connecter à votre appareil
Si vous ne pouvez pas vous connecter à votre appareil, veuillez vérifier que le nom de l'appareil est correct. Si le nom est correct, vérifiez qu'il est connecté sur le même réseau que votre ordinateur.
Si votre appareil est connecté sur le même réseau, essayez de redémarer l'appareil. Si l'appareil n'est toujours pas connecté, essayez de redémarer votre routeur.

View File

@ -0,0 +1,155 @@
# API de REST {.text-[#ab5ac7]}
## Qu'est-ce que c'est?
Un API de RESET est un moyen de communiquer avec vos appareils ESP en utilisant des requêtes HTTP. Ceci est utile si vous voulez contrôler votre appareil depuis un ordinateir ou un appareil mobile.
Nous avons développer un API de RESET pour ce projet afin de pouvoir contrôler les appareils plus facilement depuis notre nouvelle app.
## Comment l'utiliser
### Client de l'API de REST
N'importe quel client de API de RESET peut être utiliser pour communiquer avec vos appareils ESP. On recommande d'utiliser le [Thunder Client](https://www.thunderclient.com/) pour tester l'API de RESET, c'est une extension de vscode et il est totalement gratuit.
Pour les requêtes basiques de type `GET`, vous pouvez utiliser n'importe quel navigateur de votre choix.
### Standard
L'API de RESET suis le standard suivant:
```
http://{device_name}.local:81/control/command/{endpoint}?{param}={value}&{param}={value}
```
> Par exemple, si le nom de votre appareil est `esp32`, vous pouvez vous y connecter en utilisant `http://esp32.local:81/control/command/<endpoint>`.
### Endpoints
::: info Note
N'importe quel endpoint marqué avec `**` n'est pas encore implémenté, et sera implémenté à l'avenir.
Si vous voulez nous aider à implémenter ces endpoints, merci de nous contacter.
Nous sommes également ouvert aux suggestions afin d'implémenter de nouveaux endpoints.
> **Note**: n'importe quel endpoint qui changes des choses dans le fichier de configuration aura besoin d'appeler `/save` pour écrire les changements dans la mémoire flash.
> Cela préviendra le fait d'écrire dans la mémoire flash trop souvent, ce qui peut endomager la mémoire plus rapidement.
> Cet appareil aura à écrire les changements dans la mémoire flash et se redémarer après un appel `/save`.
:::
L'API de REST utilise les endpoints suivant:
| Endpoint | Method | Description |
| :------: | :----: | :---------: |
| /ping | GET | Returnes le statut de l'appareil. |
| /save | GET | Écrit n'importe quel changements effectué dans la mémoire flash. |
| /restartDevice | GET | Redémares l'ESP d'elle même. |
| /restartCamera | GET | Redémares la camera. |
| /resetConfig | GET | Vides la config actuelle de la mémoire et RAM |
| /getStoredConfig | GET | Retournes un objet _JSON_ de la config actuelle de l'appareil. |
| /setTxPower | POST | Affectes la puissance de la transmission émise de l'ESP |
| /setDevice | POST | Affectes les paramètres `OTA` et `mDNS` |
| /setCamera | POST | Changes tout les paramètres wifi |
| /wifi | POST | ajoutes un nouveau réseau wifi, ou remplaces le réseau déjà existant |
| /wifi | DELETE | Supprimes un réseau wifi |
| /wifi | GET | Retournes un objet _JSON_ avec tout les identifiants wifi |
### Params
L'API de REST utilise les paramètres suivant:
::: danger Fonctionalité pas un bug
Tout les paramètres pour un URL donné sont requis, même si vous ne changez pas la valeur des paramètres.
Si vous ne donnez pas un paramètre, ce paramètre sera remis à sa valeur par défaut.
:::
les paramètres URL sont passé comme string en utilisant le format suivant:
`http://<device_name>.local:81/control/builtin/command/<endpoint>?<param>=<value>&<param>=<value>`
#### /wifi
::: info Note
Nous vous permettons de stocker j'usqu'a 3 réseaux wifi dans la mémoire. Si vous essayer d'en ajouter plus de 3, le réseau le plus ancien sera écrasé.
:::
| Param | Description |
| :---: | :---------: |
| `ssid` | Le ssid du réseau. |
| `password` | Le mot de passe du réseau. |
| `networkName` | Un nom unique (que vous lui donner) afin d'identifier un réseau dans la mémoire. |
| `channel` | Le canal du réseau wifi <br /> uniquement les caneaux de `1 - 14` sont autorisés. |
| `power` | La puissance de la transmission de votre ESP pour ce réseau. |
| `adhoc` | Si vous voulez activer le mode AP ou non. |
::: info Note - puissance de la transmission
Vous devez suivre le format suivant pour le paramètre `power`:
En utilisant l'énumération suivant, vosu passez le _nombre_ à droite du signe `=` qui correspond à la puissance en `dBm` que vous voulez utiliser.
```cpp
typedef enum {
WIFI_POWER_19_5dBm = 78,// 19.5dBm
WIFI_POWER_19dBm = 76,// 19dBm
WIFI_POWER_18_5dBm = 74,// 18.5dBm
WIFI_POWER_17dBm = 68,// 17dBm
WIFI_POWER_15dBm = 60,// 15dBm
WIFI_POWER_13dBm = 52,// 13dBm
WIFI_POWER_11dBm = 44,// 11dBm
WIFI_POWER_8_5dBm = 34,// 8.5dBm
WIFI_POWER_7dBm = 28,// 7dBm
WIFI_POWER_5dBm = 20,// 5dBm
WIFI_POWER_2dBm = 8,// 2dBm
WIFI_POWER_MINUS_1dBm = -4// -1dBm
} wifi_power_t;
```
:::
#### /setDevice
| Param | Description |
| :---: | :---------: |
| `hostname` | Le nom d'hôte pour votre ESP <br /> utilisé par `OTA` et `mDNS`. |
| `service` | Le service que l'on doit chercher quand on scannes les appareils `mDNS` sur un réseau <br /> ceci devrait être mis sur `openiristracker` afin de trouver les appareils `EyeTrackVR` |
| `ota_password` | le mot de passe pour le service `OTA`. |
| `ota_port` | Le port pour le service `OTA`. |
| `firmware_name` | le nom du fichier binnaire `OTA` <br /> depricated and will be removed |
#### /setTxPower
::: info Note
Vous devez suivre le format suivant pour le paramètre `txPower`:
En utilisant l'énumération suivant, vosu passez le _nombre_ à droite du signe `=`:
```cpp
typedef enum {
WIFI_POWER_19_5dBm = 78,// 19.5dBm
WIFI_POWER_19dBm = 76,// 19dBm
WIFI_POWER_18_5dBm = 74,// 18.5dBm
WIFI_POWER_17dBm = 68,// 17dBm
WIFI_POWER_15dBm = 60,// 15dBm
WIFI_POWER_13dBm = 52,// 13dBm
WIFI_POWER_11dBm = 44,// 11dBm
WIFI_POWER_8_5dBm = 34,// 8.5dBm
WIFI_POWER_7dBm = 28,// 7dBm
WIFI_POWER_5dBm = 20,// 5dBm
WIFI_POWER_2dBm = 8,// 2dBm
WIFI_POWER_MINUS_1dBm = -4// -1dBm
} wifi_power_t;
```
:::
| Param | Description |
| :---: | :---------: |
| `txPower` | La puissance à mettre. |
### Params Camera
::: tip Coming Soon
Nous sommes en train de travailler sur cette section de la doccumentation.
:::

View File

@ -0,0 +1,56 @@
<script setup>
import ImageCard from '../../vue/images/ImageComponent.vue'
import { image_settings } from '../../static/image_settings'
</script>
# Mettre en place l'environement de développement {.text-[#ab5ac7]}
Cette procédure va vous montrer comment préparer votre système pour téléverser le firmware dans votre tracker.
## 1. Installez Visual Studio Code
Téléchargez la [dernière version de Visual Studio Code](https://code.visualstudio.com/download) et installez la.
### téléchargement
<br>
<ImageCard :options="image_settings.setup_vscode_image_one"/>
### Installez
<br>
<ImageCard :options="image_settings.setup_vscode_image_two"/>
## 2. Installez l'EDI PlatformIO
Une fois que Visual Studio Code est installé, ouvrez et installez [PlatformIO IDE pour VSCode](https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide), une extension qui va vous permettre de vous connetcer à votre tracker, construire et téléverser le firmware.
<ImageCard :options="image_settings.setup_vscode_image_three"/>
## 3. Clonez le projet du firmware
Faites en sorte de fermer tout projet ou fenetre que vous avez déjà ouvert avant d'aller plus loin.
1. Allez à [https://github.com/lorow/OpenIris](https://github.com/lorow/OpenIris) et `clonez` la dernière version de la branche `main`.
1. Si vous n'avez pas encore`git` installé merci de l'installer via [ce lien](https://git-scm.com/download/win).
2. Ouvrez Git Bash.
<ImageCard :options="image_settings.setup_vscode_image_four"/>
1. changer votre répertoire courant avec celui où vous aimeriez cloner le firmware. Ex: `cd C:\`
<ImageCard :options="image_settings.setup_vscode_image_five"/>
1. Clonez le the dépôt en entrant la commande: `git clone https://github.com/lorow/OpenIris.git`
<ImageCard :options="image_settings.setup_vscode_image_six"/>
Pour avoir plus d'infos le clonage, merci de vous réfèrer à [cette documentation](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)
_**Ne téléchargez pas en temp que ZIP**_ - clonez le projet correctement s'il vous plait, faites attention à où vous l'avez télécharger. Vous alez avoir besoin de ce répertoire plus tard quand vous alez ouvrir PlatformIO.
1. Ouvrez le firmware dans VSCode en allant dans PlatformIO, puis selectionnez open, puis aller dans le dossier `OpenIris/ESP` et ouvrez le.
<ImageCard :options="image_settings.setup_vscode_image_seven"/>
_Ceci est inspiré de la [doccumentation de SlimeVR](https://docs.slimevr.dev/firmware/setup-and-install.html). Un bout du mérite revint donc à l'équipe de SlimeVR._

View File

@ -0,0 +1,98 @@
<script setup>
import Alerts from '../../vue/alerts/Alerts.vue'
import ImageCard from '../../vue/images/ImageComponent.vue'
import { image_settings } from '../../static/image_settings'
import { alerts } from '../../static/alerts'
</script>
# Construire et téléverser le firmware manuellement {.text-[#ab5ac7]}
Téléverser votre firmware à besoin d'être fait initialmenet en utilisant un câble. Une fois que vous avez votre tracker connecté à votre WiFi, vous pourrez utiliser OTA pour mettre votre tracker à jour.
## 1. Connectez votre tracker avec le programmeur à votre PC
Pour commencer connectez votre ESP32-CAM à votre programmeur. dans le cas des programmeurs ESP32-CAM-MB la manipulation sera aussi simple que de faire glisser votre ESP32-CAM dans le socket et connecter le tout à votre PC avec un câble micro-USB. Dans certains cas ils y aura un bouton s'appelant IO0 sur le programmeur. Si c'est le cas du votre il faudrait que vous le mainteniez appuyé lorsque vous le connectez à votre PC. Une fois connecté vous pouvez relacher le bouton.
Dans le cas ou vous auriez un programmeur FTDI, ça sera un peu plus compliqué pour vous malhereusement, donc armez vous de patience et aller jeter un coup d'œil à [ce guide](https://randomnerdtutorials.com/program-upload-code-esp32-cam/) pour voir comment tout mettre en place.
## 2. Construire le firmware
1. Clickez sur le bonton Build tout en bas de la fenêtre de Visual Studio Code.
Ce bouton lance la construction du firmware, masi ne l'envoie pas encore à votre ESP.
![img](https://i.imgur.com/EmSkhFp.png)
## 3. Téléverser votre firmware
- Si vous utilisez l'OTA, verifiez que le tracker que vous voulez flasher est allumé.
- Une fois que le firmware à été construit, appuyez sur le bouton uppload pour téléverser le firmware.
Ce bouton envoie le firmware dans votre ESP
![img](https://i.imgur.com/lI3PFVC.png)
<Alerts :options="alerts.upload_firmware_one">
<template v-slot:content>
<p>
Le programmeur MB ne vous restrain pas. Si vous utilisez un programmeur FTDI suivez le guide lié plus haut (celui de randomnerdtutorials)
</p>
</template>
</Alerts>
- Si le téléversement c'est bien passé vous devriez avour une console qui resembles à quelque chose comme ça:
![img](https://i.imgur.com/SDQcCr1.png)
Bravo! vous avez maintenant téléverser le firmware avec succes dans votre Tracker EyeTrackVR!
Si vous galerez à téléverser votre firmware en utilisant un câble, vous pouvez suivre les étapes suivantes:
1. Verifiez que votre câble USB est bien enfoncé et branché à votre PC.
2. Verifiez que votre câble USB permet bien de transmettre des données (il est suggèré d'essayer d'autres appareils ou d'autres câbles).
3. Verifiez que vos drivers sont à jour.
4. Essayez d'autres ports USB, certains pourait ne pas être fonctionnels.
De plus, vos problèmes peuvent être causé par un logiciel tier qui bloques vos ports série COM (**VSCode ou Cura peuvent être une cause de ces problèmes**).
## Téléverser via OTA
Une fois que vous avez réussi à connecté vos trackers au WiFi, vous pouvez utiliser OTA pour gèrer les mises à jour logiciels.
1. Récupèrez l'IP de votra tracker que vous voulez flasher. Cette IP peut être trouvé via une application d'analyse du trafic ou en regardant le moniteur série du programmeur auquel votre tracker est connetcé.
2. Dans le fichier `platformio.ini` décommentez les lignes suivantes dans visual studio en retirant les `;`:
```ini
;upload_protocol = espota
;upload_port = 192.168.1.49
```
1. Changez la valeur la valeur de upload_port avec l'adresse IP récupèré plus tôt.
2. Eteignez et ré-allumez votre tracker que vous voulez flasher.
3. Attendez environ 5 secondes.
4. Appuilez sur le bouton upload pour téléverser le firmware.<br>
![img](https://i.imgur.com/lI3PFVC.png)
5. Répètez les étapes ci-dessus autant de fois que vous avez de trackers.
## Trouver l'adresse IP de votre tracker
Connectez votre tracker à votre PC et ouvrez le moniteur série dans VSCode en appuilant sur l'icone en forme de `prise`.
<ImageCard :options="image_settings.upload_firmware_image_one" />
Maintenant, appuilez sur le bouton redémarer de l'ESP.
trouver quleque chose resemblant à ça dans la sortie du moniteur série:
<ImageCard :options="image_settings.upload_firmware_image_two" />
Le texte surligné est uniquement là dans cette doccumentation pour vous indiquer où ce trouve l'adresse de la caméra. Merci de la noter quelque part afin de la rentrer dans le logiciel.
Rappelez bous bien qu'un ESP ne peut avoir qu'un client, pour puvoir utiliser l'application faites bien attention de fermer votre page de navigateur préalablement ouvtere pour tester que tout fonctionnes bien.
## Dépannage
Si vous rencontrez un problème en suivant les étapes ci-dessus, vous pouvez regarder la [FAQ.](/misc/faq.html) ici.
Si vous ne trouvez pas de réponse à votre question, vous pouvez venir la poser en anglais dans le channel **#questions** dans [notre discord](https://discord.gg/kkXYbVykZX), on serait content de vous aider.
*Adapté de la [doccumentation de SlimeVR](https://docs.slimevr.dev/firmware/setup-and-install.html), Un bout du mérite revint donc à l'équipe de SlimeVR*

View File

@ -0,0 +1,74 @@
<script setup>
import Alerts from '../../vue/alerts/Alerts.vue'
import ImageCard from '../../vue/images/ImageComponent.vue'
import { alerts } from '../../static/alerts'
import { image_settings } from '../../static/image_settings'
</script>
# EyeTrackVR {.text-3xl .font-bold .underline .text-[#ab5ac7]}
Une plateforme de suivi des yeux open source et *abordable* pour les jeux sociaux VR via le protocole `OSC` et `UDP`.
<Alerts :options="alerts.user_warning">
<template v-slot:content>
<p>
Ce projet est en cours de développement actif.
Cependant, il marche pour la plupart des utilisateurs.
</p>
</template>
</Alerts>
## Matériel
Merci de regarder notre [Liste de pièces](../how_to_build/parts_list/) et notre [guide d'assemblage](../how_to_build/full_build/) ainci que notre [référentiel matériel.](https://github.com/RedHawk989/EyeTrackVR-Hardware)
## par rapport à la sécurité des émeteurs infrarouges
Merci de faire *extrêmement attention* quand vous avez a faire à des émeteurs infrarouges.
une fois que les test de sécurité auront été finis les liens et fichiers seront donnés concernant les émeteurs {.italic .underline}
Merci de ne pas essayer de faire ou utiliser n'importe quel émeteur si vous ne savez pas exactement ce que vous faires, car cela pourait être très dangereux pour vos yeux si le boulot n'est pas fait correctement.
::: danger
Quand les fichiers et resources seront disponibles <ins>**NE PAS CONTOURNER N'IMPORTE QUEL MESURE DE SURETÉ MISE EN PLACE**</ins>. Cela peut provoquer des dégats iréversible sur votre corps.
:::
Ces mesures de sécurité ont été mises en places pour RÉDUIRE les risques potentiels de défaillance. Toutes les résponsabilitées qui suivent sont à prendre par l'utilisateur. Cela inclut regarder avec une caméra infrarouge que la luminosité est corecte et que vous ne resentez pas de chaleurs ou d'effets à court terme après être exposé aux lumières infrarouges.(des symtomes tels que voir des taches noirs ou une sensation seche/chaude au niveau des yeux lors de l'utilisation).Bien que nous fesons tout notre possible pour rendre EyeTrackVR le plus sûr possible, nous ne nous tenons pas responsable pour aucun des degâts fait.
<Alerts :options="alerts.led_power_warning">
<template v-slot:content>
<p>
Soyez sûr d'utiliser des émeteurs <ins class="text-red-400 dark:text-red-500">non focalisé</ins> à près de <ins class="font-bold">5ma</ins> de puissance totale.
</p>
</template>
</Alerts>
::: Vous voulez voir nos resources lié à la sureté?
[Effect of infrared radiation on the lens](../saftey/effect_of_ir_on_the_lens.pdf)
[AN002_Details on photobiological safety of LED light sources](../saftey/AN002_Details_on_photobiological_safety_of_LED_light_sources.pdf)
[Training-library Nir Stds](../saftey/training-library_nir_stds_20021011.pdf)
:::
## Firmware
notre firmware s'appelant OpenIris est fait par `lorow` et peut être trouvé [ici](https://github.com/lorow/OpenIris).
## Support des casques
Merci de jeuter un coup d'Œil à notre liste de [montures/fixations imprimable en 3D](../how_to_build/parts_list#other-parts) et regardez si votre casque est sur la liste. Si il n'est pas listé, il est recomandé d'essayer de faire une monture/fixation par vous même, ou attendre q'un membre talentueux de la communauté en fasses un.
#### Contact
Merci de rejoindre notre discord pour plus d'info et pour poser tes questions.
<ImageCard :options="image_settings.discord_content"/>
# Licences
[![GitHub license](https://img.shields.io/github/license/RedHawk989/EyeTrackVR?style=plastic)](https://github.com/RedHawk989/EyeTrackVR/blob/main/LICENSE)
***Tout logiciel est sous une [Licence MIT](http://opensource.org/licenses/MIT).
toute les doccumentations, y compris le [Wiki](https://github.com/RedHawk989/EyeTrackVR/wiki), est sous une licence Creative Commons CC-BY-SA-4.0***.

View File

@ -0,0 +1,26 @@
# Choses à savoir avant de commencer {.text-[#ab5ac7]}
## Cette page vous permetra d'avoir une vue d'ensemble des choses à savoir et comprendre avant de commencer ce projet
### Le logiciel n'est pas final
Des bugs qui pourrait gèner l'utilisation ou l'utilisabilité peuvent arriver
N'attendez pas qu'il soit 100% fiable ou fonctionalitées perfetement. Toutes les fonctionalitées ne sont pas encore totalement développé.
### Le firmware peut être dificile à utiliser
notre firmware n'a pas encore été testé à grande échelle, des problèmes peuvent donc se montrer.
### Les émeteurs infrarouges sont dangereux
si les précautions sont ignorées ou que le matériel est mal manipulé vous pouvez et allez vous faire des dégats aux yeux. Merci d'acheter uniquement les emeteurs que nous vous lions dans la doccumentation ou ceux qui ont des spécifications qui sont exactement identiques.
### La doccumentation peut être incomplète
Des étapes importantes peuvent ne pas être présentes
### Vous aurez besoin de modifier votre avatar pour utiliser tout ça
Cela requière des connaisances basiques de Unity et d'avoir votre propre avatar.
### Une fois que tu à reconnus les points ci-dessus, tu peux suivre le [Guide d'assemblage complet](../how_to_build/full_build)

View File

@ -0,0 +1,36 @@
# Créer votre propre support {.text-[#ab5ac7]}
## Cette page vous donnera les différentes étapes à suivre afin de créer votre monture afin d'acrocher les caméras dans un casque qui n'aurait pas encore utilisé par un membre de la communauté.
Donc, vous avez un casque pour lequel il n'existe pas encore de montures existante ou adaptés à vos besoins.Je vais vous expliquer les différentes étapes permeetant de créer une monture fonctionelle.
## Étape 1: Trouver un moyen d'attacher la monture aux lentilles votre casque
La façon la plus simple de commencer est de trouver une lentille de protection pour votre casque. Vous pouvez aller sur un site comme [Thingiverse](https://www.thingiverse.com/) ou juste recherher "3d printed lens protector for {votre casque ici}"
Exemple: Voici une lentille de protection pour le Quest 1/2 et le Rift S [https://www.thingiverse.com/thing:3653631](https://www.thingiverse.com/thing:3653631)
## Étape 2: Trouver Une support de caméra
Maintenant que vous avez votre monture de lentille, il vous faut trouver un moyen d'attacher les caméras. Nous avons un design basique que qdot a créer (extrait de sa monture) sur le GitHub Matériel [ici](https://github.com/RedHawk989/EyeTrackVR-Hardware/blob/main/3d_Printed_Mounts/Basic_Mount_Components/basic_ETVR_camera_mount.stl)
Sinon, Si vous êtes assez experimenté vous pouvez créer votre propre support de caméra.
## Étape 3: Placer le support de caméra à un endroit propice à bien voir vore œil
Le placement "idéal" est un endroit où la la caméra auroit uen bonne vue de votre pupille quand vous êtes dans regardez à des angles extrêmes. Les coins inférieurs sont généralement assez propice à obtenir de tels résultats.
Il est recomandé d'avoir les caméras au plus proche de la lentille de votre casque afin que votre œil prennes le plus de place dans le champ de vision de la caméra. Je vous insite à regarder les autres montures pour vous en [inspiréer.](https://github.com/RedHawk989/EyeTrackVR-Hardware/tree/main/3d_Printed_Mounts)
## Étape 4: Support pour vos LEDs
Vous pouvez ajouter dex extrusions à votre monture pour tenir les LEDs en place, ou juste les coller. C'est à vosu de décider ce qui marches ou pas, n'hesitez pas à experimenter!
## Étape 5: Testez tout
Il est fortement imprbable d'obtenir une monture parfaite du premier coup. Imprimez re-testez, ajustez et répètez j'usqu'à ce que vous ayez une monture satisfesante.
Bonne chance!
## Étape 6: venez faire lister vos montures
Envoyez moi vos montures pour qu'elles soit ajoutées dans la doccumentation! vous pouvez les mettre en ligne sur Thingyverse ou un service similaire, ou envoyez moi juste les fichiers .STL en m'ajoutant sur discord `(Prohurtz#0001)`

View File

@ -0,0 +1,307 @@
<script setup>
import Alerts from '../../vue/alerts/Alerts.vue'
import CheckBoxList from '../../vue/CheckBoxList.vue'
import ImageCard from '../../vue/images/ImageComponent.vue'
import { RequiredHardware } from '../../static/req_hardware'
import { image_settings } from '../../static/image_settings'
import { alerts } from '../../static/alerts'
</script>
# Guide d'assemblage {.text-[#ab5ac7]}
## Cette page est un guide d'assemblage étape par étape
## Étape 1: Soyez bien sûr d'avoir lu les [choses à savoir avant de commencer](../getting_started/things_to_know)
Cette page vous donnera une vue d'ensemble sur l'état d'avencement du projet et quoi en attendre.
## Étape 2: commendez les pièces listés dans la [Liste des composants](../how_to_build/parts_list)
Merci de bien vouloir relever que le matériel utilisé dans ce projet peut être sujet à changements, même si après un peu de développement on dirait bien que nous allons rester avec le même matériel
## Étape 3: Attendre que tout arrives
Les longs délais d'envoi depuis la chine sont super *m a r r a n t*!
attendez vous à des temps d'attente allant de 2 semaines à 2 mois pour que toutes les choses arrives.
## Étape 4: Regroupez tout votre matos
Soyez sûr d'avoir au moins les composants suivant:
<CheckBoxList :options="{...RequiredHardware}" />
<ImageCard :options="image_settings.image_one" />
## Étape 5: Installer des antennes externes ou un bouclier pour l'antenne des ESPs
certaines cartes ESP-CAM ont des soucis quand il en viens de l'intégrité du signal, il y à deux choses qui peuves être faites afin d'aider à résoudre ou regler ces problèmes.
La première option des d'installer des antennes externes.
C'est la meuilleure solution pour avoir un résultat final impécable. si vous avez des trackers Vive ou Tundra, ceci est une étape **REQUISE**. Les interférences venant des trackers vont rendre le flux vidéo de votre ESP inutilisable. Un sac anti-statique n'aidera pas dans ce cas.Malhereusement, retirer les antènes n'est pas si simple, vous aurez à soit, retirer ou bouger une résistance qui fait la jonction entre 2 pads de soudure. l'image ci-dessous vous montres l'orientation de ces pads qui permettent de décider des 2 modes d'opération. Si vous ne reliez pas toutes les connections et avez les 2 modes activés en même temps. la résistence de 0Ohm n'a pas besoin d'être sur votre carte, vous pouvez simplement relier les 2pads.
<ImageCard :options="image_settings.external_antenna" />
vous trouverez ci-dessous un exemple de connection des 2pads et une antène attaché.
<ImageCard :options="image_settings.external_antenna_resistors" />
<div align="center">
<iframe width="500" height="300" src="https://www.youtube.com/embed/r4PsuWTFRBg" title="How to add an external antenna to ESP32-CAM board" frameborder="1" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
Cette seconde option est de recouvrir l'antenne de l'ESP avec un sachet antistatique. cela peut remédier à des problèmes, ou même les règler dans certains cas. Mais surtout, c'est totalement gratuit! Cependant, il est important de tenir compte que cette methode fonctionnes moins bien que d'avoir une antenne externe, et dans certains cas ne règleront pas vos problèmes, par exmeple si vous avez des Vive trackers.
<div align="center">
<iframe width="500" height="300" src="https://www.youtube.com/embed/wS4PS3Mw250" title="Covering an ESP32-CAM's antenna with anti-static bag" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
## Étape 6: Attacher les caméras aux ESPS
Regardez votre ESP et localisez le connecteur à cable plat entouré ci-dessous.
<ImageCard :options="image_settings.camera_socket" />
Relevez la pièce grise qui va vous permetre de connecter la caméra. Ne pas forcer sur la pièce ni inserrer un objet pointu, vos ongles devrait suffir.
<ImageCard :options="image_settings.camera_socket_clip" />
Maintenant inserez le cable de la caméra, veuillez faire attention que les pins font face à votre ESP, vous devriez uniquement voir la partie noire du cable.
<ImageCard :options="image_settings.camera_cable" />
Une fois que le cable est inserré, appuyez sur la pièce grise afin de l'abaisser.
Il y à peu de forces à mettre mais soyez précotioneux. Verifiez que le connecteur noir ne sortes pas du connecteur.
<ImageCard :options="image_settings.camera_clip_close" />
## Étape 7: branchez votre ESP au programeur afin de la flasher
Pourquoi téléverser le programme avant d'avoir finis d'asembler? C'est simple, pour savoir si tout fonctionnes avant de passer du temps à tout souder.
Glissez votre ESP dans le programmeur, notez que le port micro USB est à l'opposé de votre caméra.
<ImageCard :options="image_settings._7_12_one"/>
## Étape 8: Configurez Visual Studio Code et préparez vous à téléverser le firmware
Regardez le guide sur comment [installer Visual Studio Code](https://redhawk989.github.io/EyeTrackVR/setting-up-firmware-enviroment/)
une fois que VS Code est installé et configuré, allez à l'étape suivante.
## Étape 9: Brancher votre ESP et téléversez votre firmware
Notre guide, [construire et téléverser le firmware manuellement](https://redhawk989.github.io/EyeTrackVR/building-and-flashing-firmware-manually/) contient les étapes requises afin de réaliser cette étape.
Une fois flashé, verifiez que vous optenez un flux vidéo à l'aide de votre navigateur, en suite débranchez et flashez votre autre ESP.
## Étape 10: Attacher les fils d'alimentation sur un connecteur USB-A
::: attention
alimenter votre ESP depuis le programeur ne **va pas marcher correctement**. Cela délivres une tenssion plus faible qui réduirat la luminosité des LEDs et créera des atréfacts vidéo. Cela à de fortes chances de dégrader votre suivi.
:::
Prennez 2 paires de fils, préférablement de couleur différentes, les coupper à la bonne longeur (56mm dans mon cas) et torsadez les, 2 pour 5v et 2 pour la masse.
Ici j'ai utilisé du fil d'enceintes ou ceux constitudé de cuivre sont relié au 5v et ceux constitué d'argent.
En suite dénudez les fils d'à peu près 3mm de chaque coté pour exposer les fils.
<ImageCard :options="image_settings._7_12_two"/>
## Étape 11: Coupez les fils pour les LEDs infrarouges
Pour trouver la longeure optimale, prenez un bout de ficelle et faites semblant que ce soit vos cables. Faites des marques au stylo sor votre ficelle puis vos fils aux même endroits et coupez les. Faire la même chose pour l'autre Œil.
Vous allez avoir besoin de couper 3 différents cables. 2 courts pour connecter les 2 PCBs par Œil entre eux, 2 plus longs pour l'alimentation et 2 un peu plus long pour l'alimentation des LEDS près des caméras tout en bas.
Une fois coupé, dénuder 4mm de cable.
## Étape 12: Emèlez le cables 5v du connecteur USB et celui des LEDs infrarouges et les étamer
Une fois les cables entouré l'un autour de l'autre ajoutez de la soudure pour les tenir en place. Cela vous facilitera la tache lors de la soudure.
<ImageCard :options="image_settings._7_12_three"/>
## Étape 13: Soudez le cable positif à votre ESP
Poser le cable de l'autre coté du pin 5v et appliquer de la soudure.
<ImageCard :options="image_settings._13_18_one"/>
## Étape 14: Soudez le cable négatif à votre ESP
Répétez l'[Étape 12](#step-12-twist-the-positive-usb-wire-and-positive-ir-led-wires-together-and-tin-them) mais avec les cables négatifs.
::: info
comme un utilisateur de notre discord à découvert, vous pouvez relier le pin `IO12` avec le pin de la masse `(GND)` sans problèmes.
:::
Dans l'exemple en dessous j'ai mis le tout au dessus du pin, ça sera une soudure qui durera à peu près une semaine, masi c'est là où le pistolet à colle se rend utile.
<ImageCard :options="image_settings._13_18_two"/>
## Étape 15: Reliez votre deuxième ESP
Répètez les étapes[12](#step-12-twist-the-positive-usb-wire-and-positive-ir-led-wires-together-and-tin-them) à [14](#step-14-solder-the-negative-wire-to-esp) avec votre deuxième ESP.
## Étape 16: Préparez la soudure des PCB des LEDs infrarouges
sortez votre loupe, c'est le moment de souder les toutes petites choses.
récupèrez vos 4 PCBs, 4 LEDs infrarouges et vos 4 résistances d'~350ohm.
<ImageCard :options="image_settings._13_18_three"/>
Voici les PCBs avec les légendes pour le borchage:
<ImageCard :options="image_settings._13_18_four"/>
légendes LED:
<ImageCard :options="image_settings._13_18_five"/>
Si vous avez des LEDs différentes, merci de consulter leur fiche technique.
Queslques terminologies étant asocié:
`5V`: le pin d'alimentation 5v.
`GND`: Masse.
`AR`: After-Resistor (après résistance) cela sera utilisé comme le pin d'alimentation sur les seconds PCBs relié en série vu que les résistance ne sont pas requises sur les seconds PCBs vu qu'ils sont sur les premiers.
`SNG`: Single resistor (Résistance unique), utilisez ce pin comme du 5v si vous utilisez **une seule** résistance de `~700ohm` sur les PCB v3 (pas recommandé).
`Negative`: Cela indique la partie négative de la LED.
`Positive`: Cela indique la partie négative de la LED.
## Étape 18: Soudez les résistances au PCB v3
Vous aurez besoin d'un seul PCB ayant des résistances par Œil.
Étamer les pads des résistances. Note: dans cet exemple, j'ai utilisé un peu trop de soudure, il devrait uniquement en avoir assez pour recouvrir légèrement le pad.
<ImageCard :options="image_settings._13_18_six"/>
En suite, atrapez une résistance et la placer sur les pads.
<ImageCard :options="image_settings._13_18_seven"/>
Pendant que vous tennez la résistance, ajoutez de la soudure sur votre fer à souder et appliquez la sur la résistance.
J'aime faire ça en ayant un bout de mon étain en l'air et le toucher avec mon fer à souder pour pouvoir tout appliquer facilement.
<ImageCard :options="image_settings._13_18_eight"/>
retournez le PCB et souder l'autre bout.
<ImageCard :options="image_settings._13_18_nine"/>
Maintenant repetez pour l'autre résistance.
<ImageCard :options="image_settings._13_18_ten"/>
## Soudez les LEDs au PCB v3
Étamez les pads des LED.
<ImageCard :options="image_settings.end_one"/>
Orientez la LED et la tenir en place.
<ImageCard :options="image_settings.end_two"/>
Soudez un côté.
<ImageCard :options="image_settings.end_three"/>
Retournez-là et soudez l'autre côté.
<ImageCard :options="image_settings.end_four"/>
## Reliez les PCB v3
::: Attention
Faites attention à la direction des LEDs sur les PCBs.
:::
Si les marques vertes font face à l'interieur du PCB comme dans l'image ci-dessous:
<ImageCard :options="image_settings.end_five"/>
Veuillez suivre le diagramme ci-dessous:
<ImageCard :options="image_settings.end_six"/>
Si les marques vertes font face à l'exterieur comme l'image ci-dessous:
<ImageCard :options="image_settings.end_seven"/>
Veuillez suivre le diagramme ci-dessous:
<ImageCard :options="image_settings.end_eight"/>
## Étape 19: Montures imprimés en 3D:
Dirigez vous vers vers [la partie des pièces imprimées en 3D](/how_to_build/parts_list#other-parts) de la liste du matériel.
Trouvez quel pièces sont pour votre casque et imprimez-les.
Certaines pièces vont marcher mieux que d'autres, il est recomandé de toutes les tester si il y en à plusieures disponibles, imprimez une de chaque.
Si aucune ne fonctionnes, vous pouvez essayer de les modifier vous même si vous savez comment faire. Si vous avez fait votre propre monture, merci de me notifier sur discord (en anglais), `Prohurtz#0001`, pour que je l'ajoute à notre liste.
Vous avez des problèmes à faire tenir les montures? essayez d'augmanter ou baisser l'échelle un petit peu afin d'assurer que ça rentres ni que ça ne bouges pas trop.
Il y à 2 mécanismes pour atacher les camérs j'usqu'a maintenant, vous trouverez comment sécuriser les caméras au différent types ci-dessous.
### Type 1
<ImageCard :options="image_settings.end_nine"/>
Ce design vous demande de glisser la caméra dans l'encoche. Généralement cette méthode de montage de la caméra est recommandé vu qu'elle n'a pas besoin de colle pour tenir en place.
placez la caméra dans l'encoche
<ImageCard :options="image_settings.end_ten"/>
appuyez lentement à l'intérieur de la caméra pour la faire cliquer en place.
<ImageCard :options="image_settings.end_eleven"/>
<div align="center">
<Alerts :options="alerts.end_one">
<template v-slot:content>
<p>
Il y a de fortes chances de casser la monture en inserrant le caméra. Si ça arrives vous pouvez quand même sauver la monture en fonction d'où elle à casser. Un point de pistolet à colle à l'endroit suffra probablement.
</p>
</template>
</Alerts>
</div>
### Type 2
<ImageCard :options="image_settings.end_twelve"/>
Ce design requière de la colle afin de fixer la caméra en place.
appliquer un peu de colle au fond de l'endroit ou la caméra doit aller.
<ImageCard :options="image_settings.end_thirteen"/>
Placez la caméra sur la monture.
<ImageCard :options="image_settings.end_fourteen"/>
## Attacher les LEDs infrarouges.
Une fois de plus les étapes vont changer en fonction de la monture.
Dans certaines cas il y aura des endroits pré-définis pour placer les LEDs.
<ImageCard :options="image_settings.end_fifteen"/>
Dans d'autres cas il n'y à pas d'endroit attitré pour vos LEDs, vous aurez à bidouiller pour trouver ce qui fonctionnera le mieux.
Cette image montre les positions optimales (ou proche d'optimal) pour les LEDs. Le pistolet à colle sera votre ami pour cette étape.
<ImageCard :options="image_settings.end_sixteen"/>
::: conseil
vous pouvez utiliser de l'alcool à 90° pour retirer facilement la colle.
:::

View File

@ -0,0 +1,126 @@
<script setup>
import Alerts from '../../vue/alerts/Alerts.vue'
import { alerts } from '../../static/alerts'
import PartsList from '../../vue/parts_list/PartsList.vue'
</script>
# Parts List {.text-[#ab5ac7]}
<Alerts :options="alerts.parts_list_one">
<template v-slot:content>
<p>
Veuillez noter que le matériel n'est pas encore fixé, tout le achat est a votre perte si la liste du matériel changes.
</p>
</template>
</Alerts>
## Cette page est une liste basique du matériel à acheter pour construire EyeTrackVR
<Alerts :options="alerts.parts_list_two">
<template v-slot:content>
<p>
Il est recommandé d'acheter vos pièces chez AliExpress vu que c'est bien moins onéreux.
</p>
</template>
</Alerts>
---
<Alerts :options="alerts.parts_list_three">
<template v-slot:content>
<p>
Il est bon de prendre l'habiture de commander quelques pièces en plus, notament les ESPs et le programeur, cela réduira les delais liés à des composants mort à l'arrivage.
</p>
</template>
</Alerts>
## Setup caméra
- 2x Modules ESP-CAM-32 [Lien AliExpress ici](https://a.aliexpress.com/_mKjL9Cq)
- 2x ov2640 160° fov IR / Night vers 75mm (850nm) [Lien AliExpress ici](https://a.aliexpress.com/_mrNbZww) ou une alternative sur Amazon du quel vous aurez besoin de retirer le filtre infrarouge manuelement, [lien ici](https://www.amazon.com/Camera-Aideepen-Wide-Angle-Megapixel-Support/dp/B09XXPX4SP/)
- 1x programeur ESP-CAM programmer/ MB [Lien AliExpress ici](https://a.aliexpress.com/_mPaPgPu)
Voici un lien Amazon avec 3 ESP-CAM sans les caméras [ici](https://www.amazon.com/ESP32-CAM-ESP32-CAM-MB-Development-Compatible-Raspberry/dp/B097H2KLCH)
- 1x Port mâle USB type-A pour alimenter vos ESPs.
[connecteur simple surAliExpress ici](https://www.aliexpress.com/item/2255801092919590.html) ou [Amazon par ici](https://www.amazon.com/10Gtek-DIP-Breakout-Adapter-2-54mm/dp/B09LC8WQCD/)
[Ou un avec une coque sur AliExpress ici](https://www.aliexpress.com/item/2251832820552545.html) ou [Amazon par là](https://www.amazon.com/Pigtail-Extension-Cables-Connector-Replacement/dp/B09ZQNJ2DJ/)
- 1x Câble de calibres plus petit pour alimenter les ESP
[Câble de calibre 28 sur AliExpress ici](https://a.aliexpress.com/_mK72cy6) ou [Amazon ici](https://www.amazon.com/Fermerry-Silicone-Stranded-Copper-Electrical/dp/B089CTT5X1/)
Reccommended:
- 2x Antennes externes pour les ESPs [AliExpress ici](https://www.aliexpress.com/item/2255800868378357.html) ou [Amazon ici](https://www.amazon.com/gp/product/B09K3ZPY5Z/)
## Émeteurs infrarouges
- 4x Unfocused SMD IR emitters
Ceux recomandé vennant [de LCSC ici](https://www.lcsc.com/product-detail/Infrared-IR-LEDs_XINGLIGHT-XL-3216HIRC-850_C965891.html).
Une alternative vennant [de Digikey ici](https://www.digikey.com/en/products/detail/inolux/IN-P32ZTIR/10384796). La différence entre les deux est que ceux de LCSC ont une puissance nominale plus faible, ce qui veut dire que dans le cas d'un court circuit ou tout autre mésaventure ceux de LCSC devrait être plus sûr, ce pourquoi ils sont recommandé.
<Alerts :options="alerts.parts_list_four">
<template v-slot:content>
<p>
Les plus petites ne peuvent pas être soudés à une température au dessus de 245°c ou alors elles vont brûler. des températures de soudure plus faible sont recommandée.
</p>
</template>
</Alerts>
<Alerts :options="alerts.parts_list_five">
<template v-slot:content>
<p>
<text class="font-bold">N'ACHETEZ PAS DES LEDS CONCENTRÉS</text>
<br>
Si vos LEDs resembles à ce que vous pouvez trouver dans une télécomande, ne les utilisez pas. Si vous n'êtes pas sûr de ce que vous faites achetez plutôt celles de LCSC ou Digikey.
</p>
</template>
</Alerts>
- 4x PCB pour les émeteurs infrarouges (hautement recommandé ) Les fichiers Gerber et les shemas ce trouves [ici.](https://github.com/RedHawk989/EyeTrackVR-Hardware/tree/main/IR%20Emmitter)
- 2x résistances de 698 à 710ohm ou alors la version recomandé avec 4x résistances CMS 1206 de 350ohm pour les émeteurs infrarouges (si vous n'utilisez pas de PCB pour vos émeteurs vous pouvez acheter des résistances traversantes)
- [Résisatnces de 357 ohm de Digikey ici](https://www.digikey.com/en/products/detail/stackpole-electronics-inc/RMCF1206FT357R/1759919)
- [Résisatnces de 348 ohm de LCSC ici](https://lcsc.com/product-detail/Chip-Resistor-Surface-Mount_BOURNS-CR1206-FX-3480ELF_C205328.html)
ou
- [Résisatnces de 698 ohm de LCSC ici](https://lcsc.com/product-detail/Chip-Resistor-Surface-Mount_FOJAN-FRC1206F6980TS_C2933749.html)
j'ai des kits de résisatnces, LEDs infrarouges et PCBs sur mon [Tindie ici.](https://www.tindie.com/products/eyetrackvr/eyetrackvr-pcbs-components-kit/)
J'ai également un kit pré-soudé également sur [Tindie ici](https://www.tindie.com/products/eyetrackvr/assembled-eyetrackvr-ir-led-kit/)
Cela vous assures d'avoir les bonnes LEDs infrarouges.
Si vous êtes une membre de mon Patreon vous aurez un code de réduction disponible.
- 1x Câble pour alimenter les Émeteurs infrarouges
[Câble de calibre 32 venant de AliExpress ici](https://a.aliexpress.com/_mK72cy6)
## Autres pièces et ouils
- 1x Pistolet à colle ou autre forme de colle. Pistolet à colle vennant de [AliExpress ici](https://www.aliexpress.com/item/3256803968572059.html) ou d'[Amazon ici](https://www.amazon.fr/pistolet-chauffage-projets-bricolage-r%C3%A9parations/dp/B09BQSQM7V)
- 1x Fer à souder et soudure (soudure sans plomb hautement recommandé) Fer à souder générique vennant de [AliExpress ici](https://www.aliexpress.com/item/3256801448141079.html) ou d'[Amazon ici](https://www.amazon.com/Liouhoum-Auto-Sleep-Adjustable-Temperature-Thermostatic/dp/B08PZBPXLZ/ref=sr_1_9)//
## Attahces/montures imprimées en 3D
Les montures et attaches avec un à côté d'eux sont recommandés pour son casque respectif. Ceci est basé sur des retours de la communauté pour vous indiquer ce qui marches le mieux pour la plupart des personnes.
<PartsList />
### Autre casques
Si vous n'avez pas un casque dans la liste ci-dessus, ça veut dire qu'il n'y à pas encore de monture faite pour votre casque. Si vous avez les connaisances sufisantes en modélisation ou de bonne astuce pour monter les éméteurs et caméras dans votre casque, merci de nous contacter sur discord afin qu'on puisses l'ajouter dans la liste. À partir du moment ou les caméras peuvent rentrer dans votre casque, il est potentiellement compatible. Si vous avez envie, essayez de faire une monture pour le reste de la communauté.
Jeuter un coup d'il sur comment faire votre propre monture [ici.](https://docs.eyetrackvr.dev/creating_your_own_camera_mount/)
<Alerts :options="alerts.parts_list_six">
<template v-slot:content>
<p>
Si vous avez une monture pas listé plus haut, merci de nous faire savoir dans le discord pour que l'on puisses l'ajouter.
</p>
</template>
</Alerts>

View File

@ -0,0 +1,43 @@
---
layout: home
hero:
name: Doccumentation de EyeTrackVR
text: Un système de suivi des yeux open source et abordable.
image:
src: /logo_light.png
alt: ETRVR logo
tagline: Pour les jeux sociaux VR via le protocole OSC et UDP.
actions:
- theme: brand
text: Commencer
link: /getting_started/intro
- theme: alt
text: Voir sur GitHub
link: https://github.com/RedHawk989/EyeTrackVR
features:
- icon: ⚡️
title: Open Source
details: EyeTrackVR est totalement open source gratuit d'utilisation.
- icon: 🎉
title: Communautaire
details: EyeTrackVR est construit par toi pour toi.
- icon: 💰
title: Abordable
details: EyeTrackVR est abordable et facile d'utilisation.
- icon: 🎮
title: Presque tout les casques de VR
details: EyeTrackVR marche avec presque n'importe quel casque de VR.
- icon: 🔨
title: Complètement DIY
details: EyeTrackVR est complètement DIY et facile à construire.
- icon: 🌐
title: Platforme Ouverte
details: EyeTrackVR est une plateforme ouverte qui marche avec n'importe quel jeu VR social.
- icon: 🔏
title: Respectueux De La Vie Privée
details: EyeTrackVR est respectueux de la vie privée et ne collected aucune donnée stocké sur ton propre PC.
- icon: 📡
title: Protocol Ouvert
details: EyeTrackVR utilises le le protocole Open Sound Control (OSC).
---

View File

@ -0,0 +1,11 @@
<script setup>
import FAQ from '../../vue/faq/FAQ.vue'
</script>
# Foire aux questions {.text-[#ab5ac7]}
<br>
---
<FAQ />

View File

@ -0,0 +1,37 @@
<script setup>
import Alerts from '../../vue/alerts/Alerts.vue'
import { alerts } from '../../static/alerts'
</script>
# Commenet ajouter le support pour le suivi des yeux sur votre avatar: {.text-[#ab5ac7]}
Voici une vidéo d'un contributeur montrant comment mettre en place un avatar VRChat:
<div align="center">
<iframe width="500" height="300" src="https://www.youtube.com/embed/Dfm-tkaruq0" title="Add eye tracking support to your VRChat avatar" frameborder="1" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
D'autres bonnes resources peuvent être trouvé sur le [GitHub](https://github.com/benaclejames/VRCFaceTracking/wiki/Eye-Tracking-Setup) et [Discord de VRC Face Tracking](https://discord.gg/Fh4FNehzKn).
### Nous utilisons les paramettres suivant
`LeftEyeX`
`RightEyeX`
`EyesY`
`LeftEyeLidExpandedSqueeze`
`RightEyeLidExpandedSqueeze`
<div align="center">
<Alerts :options="alerts.vrc_avatar_setup">
<template v-slot:content>
<p>
Nous ne supportons que les parametres float, Merci d'ajuster vos animations en conséquence.
</p>
</template>
</Alerts>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="assets/images/favicon/mstile-150x150.png"/>
<TileColor>#00a300</TileColor>
</tile>
</msapplication>
</browserconfig>

Binary file not shown.

After

Width:  |  Height:  |  Size: 990 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -0,0 +1,52 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1000.000000pt" height="1000.000000pt" viewBox="0 0 1000.000000 1000.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.14, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,1000.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M0 5000 l0 -5000 5000 0 5000 0 0 5000 0 5000 -5000 0 -5000 0 0
-5000z m5500 4332 c155 -61 259 -203 306 -417 21 -99 24 -377 5 -510 -32 -219
-97 -479 -173 -690 -54 -152 -188 -420 -238 -477 -53 -61 -96 -74 -293 -88
-84 -5 -222 -15 -307 -21 -283 -19 -559 -66 -825 -141 -77 -21 -356 -111 -620
-198 -525 -174 -692 -220 -797 -220 -115 0 -131 41 -78 201 34 102 151 331
252 492 529 841 1312 1577 2060 1937 149 71 277 118 395 144 95 22 241 16 313
-12z m3344 -842 c75 -29 137 -85 167 -153 22 -47 24 -65 24 -207 0 -168 -9
-225 -70 -420 -129 -415 -398 -944 -748 -1470 -175 -262 -309 -438 -439 -576
-125 -132 -176 -151 -264 -99 -59 34 -128 123 -274 350 -279 435 -499 673
-790 855 -46 29 -171 95 -277 148 -209 102 -281 154 -314 227 -35 76 -23 109
72 202 365 356 1525 929 2241 1107 210 52 310 66 473 62 117 -3 150 -7 199
-26z m-3289 -1668 c250 -44 401 -102 598 -232 187 -122 319 -232 492 -405 547
-550 888 -1273 965 -2044 13 -133 13 -439 0 -572 -39 -386 -150 -753 -303
-999 -414 -664 -1556 -1441 -2541 -1729 -411 -121 -1245 -235 -1576 -216 -300
17 -460 68 -587 188 -72 68 -103 133 -103 217 0 84 30 147 104 222 29 29 58
62 64 73 5 11 26 99 46 196 57 276 106 399 180 448 34 22 49 26 115 25 101 -1
180 -25 483 -145 339 -134 428 -160 589 -166 113 -5 135 -3 233 22 641 160
1567 691 2041 1170 164 166 244 299 318 530 178 555 79 1205 -263 1717 -184
276 -490 557 -751 688 -506 256 -1572 150 -2689 -267 -346 -130 -686 -280
-1248 -553 -353 -171 -382 -181 -448 -169 -74 14 -153 57 -211 115 -145 144
-91 334 146 513 393 297 1043 657 1616 893 656 271 1295 433 1980 502 22 2
173 3 335 1 246 -2 315 -6 415 -23z m-530 -1916 c46 -19 59 -43 94 -171 127
-460 145 -871 50 -1165 -77 -238 -244 -411 -449 -465 -80 -22 -240 -19 -336 5
-230 57 -472 244 -636 490 -92 139 -196 375 -228 522 -12 54 -12 58 13 100 32
55 142 160 239 228 279 197 704 396 973 455 83 18 237 19 280 1z m-2584 -885
l157 -53 38 -102 c51 -138 89 -260 124 -396 54 -216 64 -300 65 -505 0 -175
-2 -195 -23 -247 -47 -118 -128 -139 -232 -63 -169 124 -389 531 -589 1094
-85 238 -84 220 -18 265 77 53 126 66 232 63 78 -3 111 -11 246 -56z m3389
-414 c25 -12 77 -53 115 -91 163 -164 235 -382 173 -518 -77 -166 -281 -225
-545 -157 -130 33 -241 106 -278 185 -19 41 -21 123 -5 185 26 94 112 232 192
306 129 118 229 144 348 90z m-3414 -1011 c73 -33 135 -93 166 -161 19 -41 22
-66 21 -140 -2 -98 -28 -216 -64 -287 -81 -161 -245 -231 -428 -183 -144 37
-173 72 -193 235 -25 204 36 433 136 511 84 66 247 77 362 25z"/>
<path d="M5760 3491 c-19 -11 -62 -48 -96 -82 -143 -151 -251 -371 -214 -439
12 -22 14 -19 31 47 44 176 210 409 329 462 22 10 37 21 33 24 -11 12 -47 7
-83 -12z"/>
<path d="M1990 2367 c0 -46 24 -90 79 -139 131 -118 375 -138 465 -39 24 27
16 26 -37 -1 -59 -31 -195 -37 -268 -13 -99 33 -171 92 -214 174 -22 42 -24
44 -25 18z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,19 @@
{
"name": "EyeTrackVR",
"short_name": "EyeTrackVR",
"icons": [
{
"src": "android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

View File

@ -0,0 +1,49 @@
<script setup>
import Alerts from '../../vue/alerts/Alerts.vue'
import CheckList from '../../vue/CheckBoxList.vue'
import ImageCard from '../../vue/images/ImageComponent.vue'
import { image_settings } from '../../static/image_settings'
import { alerts } from '../../static/alerts'
import { Requirements } from '../../static/app_build_requirements'
</script>
# COnstruire l'app depuis la source {.text-[#ab5ac7]}
## CE guide va vous montrer comment construire l'application depuis la source
<Alerts :options="alerts.build_software_one">
<template v-slot:content>
<p>
Ceci n'est pas une étape requise, vous n'avez pas besoin de construire l'application depuis la source.
</p>
</template>
</Alerts>
## Prérequis
<CheckList :options="{...Requirements}"/>
## Installer Python
EyetrackVR utilises [Python 3.11.0](https://www.python.org/downloads/release/python-3110/) pour l'instant, avant de continuer merci de l'installer avant de continuer.
## Installer Poetry
Depuis la version `0.1.7` d'EyeTrackVR, nous avons utilié Poetry pour gèréer les dépendences de l'application. Pour construire l'application, vous devez premièrement installer Poetry et aller chercher les dépendences.
Pour installer Poetry ouvrez Windows Powershell et lancez les commandes suivantes `(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -`
[Documentation de Poetry](https://python-poetry.org/docs/)
## Installer les modules Python requis
Après avoir clonné le projet et installé Poetry, ouvrez un invité de commandes dans le dossier EyeTrackApp. Et lancez cette commande: `poetry install`
Çela devrait installer tout les modules requis.
## Construire l'application
Maintenant vous devriez être prêt à construire l'application.
Dans un invité de commandes ouver dans le dossier EyeTrackApp, lancez la commande `poetry run pyinstaller eyetrackapp.spec`
Laissez lui du temps de construire l'application. une fois finis, l'application devrait se trouver dans `dist/eyetrackapp`

View File

@ -0,0 +1,164 @@
<script setup>
import Alerts from '../../vue/alerts/Alerts.vue'
import CheckList from '../../vue/CheckBoxList.vue'
import ImageCard from '../../vue/images/ImageComponent.vue'
import { image_settings } from '../../static/image_settings'
import { alerts } from '../../static/alerts'
import { Requirements } from '../../static/app_build_requirements'
</script>
# Comment installer, lancer et ajuster l'application EyeTrackVR. {.text-[#ab5ac7]}
### Étape 1: Télécharger l'installeur EyetTrackVR et installer le programme
Allez sur la dernière version du programme sur [GitHub ici](https://github.com/RedHawk989/EyeTrackVR-Installer/releases/latest) et téléchargez le .zip
Extraire l'archive zip et lancer le .exe en temps qu'administrateur.
Vous serez accueillies par une fenêtre qui resembles à ça:
<ImageCard :options="image_settings.eyetrack_vr_guide_one"/>
Par défault il va s'installer dans `C:\Program Files\EyeTrackVR` et créer un racourcit sur votre bureau.
En appuillant sur le bouton `Change Install Path` vous allez ouvrir une fenêtre où vous pouvez naviguer votre arborécense et choisir un endroit alternatif où installer l'application.
Appuillez sur `Install` pour intsaller l'application.
<Alerts :options="alerts.eyetrack_vr_guide_one">
<template v-slot:content>
<p>
L'intsalleur peut également être utilisé pour mettre à jour l'application, vous aurez juste à refaire le processus d'instalation.
</p>
</template>
</Alerts>
Si il c'est bien installé la fenêtre devrait resembler à ça:
<ImageCard :options="image_settings.eyetrack_vr_guide_two"/>
## Étape 2: Lancer l'application EyeTrackVR
Si l'option `Create Desktop Shortcut` était coché vous devriez voir un icone sur votre bureau, double clickez dessus pour lancer l'application.
Vous devriez être accueillies avez une interface qui resembles à ça:
<ImageCard :options="image_settings.eyetrack_vr_guide_three"/>
## Étape 3: Familiarisez vous avec les options et terminologies
Nous allons voir quelques terminologies que vous allez trouver dans l'application.
En partant d'en haut:
### `Right eye`
Montres le flux et les options de l'œil droit uniquement.
### `Left eye`
Montres le flux et les options de l'œil gauche uniquement.
### `Both eyes`
Montres le flux et les options des deux yeux simultanément.
### `Camera Address`
C'est là où vous aller enter les adresses IP de vos caméras.
Autrement, ce champ peut également être utilisé pour rentrer le numéro d'une caméra branché ou un fichier vidéo.
### `Tracking Mode`
Çela changes l'interface vers celui du mode de suivi où il sort les valeures.
### `Cropping Mode`
C'est où vous allez tronquer votre œil.
### `Threshold`
C'est utilisé afin de couper tout ce qui ne fait pas noir comme votre pupille.
### `Rotation`
Pour que notre méthode marches le mieux, il faut que votre œil soit perpendiculaire à la fenêtre de l'application.
Utilisez ce slider pour ajuster la rotation de votre caméra pour que ce soit le cas.
### `Restart Calibrationn`
Ceci va commencer le mode de calibration pour votre œil. Lorceque vous êtes dans ce mode regardez dans le plus loin sur tout les bords.
### `Recenter Eye`
Çela va recentrer votre œil où vous êtes en train de regarder lorsceque vous appuilez sur le bouton.
## Étape 4: Ajoutez vos caméras dans le logiciel et configurez les
Allumez vos ESP et trouvez quel adresse IP est celle pour l'ESP de votre œil droit. Çela peut être fait en ouvrant les deux caméras dans un navigateur et mettre votre doit devant la caméra pour votre œil droit.
Copiez cette adresse IP et fermez la fenêtre de votre navigateur dans laquelle la vidéo était ouverte.
Entrez cette adresse IP dans le champ `Camera Address` de l'application et cliquez sur le bouton `Save and Restart Tracking`.
Vous ne voyez pas le flux de votre caméra? C'est parceque vous n'avez pas réfinis votre région d'interêt (ROI).
<ImageCard :options="image_settings.eyetrack_vr_guide_four"/>
Now press the `Cropping Mode` button.
You should see a feed of your camera.
Put your headset on and use an application to see your desktop. (Virtual desktop, SteamVR desktop, etc.)
Vous devriez voir quelque chose comme ça:
<ImageCard :options="image_settings.eyetrack_vr_guide_five"/>
Maintenant, dessinez un rectangle pour sélectionner votre œil.
Un exemple d'un bon ROI
<ImageCard :options="image_settings.eyetrack_vr_guide_six"/>
Retournez dans le `Tracking mode`.
Nous allons maintenant ajuster la rotation en bougeant le slider `Rotation`.
Passant de ça:
<ImageCard :options="image_settings.eyetrack_vr_guide_seven"/>
à ceci:
<ImageCard :options="image_settings.eyetrack_vr_guide_eight"/>
Maintenant nous allons ajuster le seuil (threshold).
Continuez par bouger le slider au maximum toujours avec votre casque sur la tête.
commencer à le faire glisser doucement j'usqu'à ce qu'uniquement votre pupille soit visible à l'interieur du visualiseur de seuil.
Un example d'un seuil bien trop bas:
<ImageCard :options="image_settings.eyetrack_vr_guide_nine"/>
Un example d'un seuil bien trop haut:
<ImageCard :options="image_settings.eyetrack_vr_guide_ten"/>
Un example d'un bon seuil:
<ImageCard :options="image_settings.eyetrack_vr_guide_eleven"/>
Répètez toutes les instructions dans cette étape pour votre œil gauche.
## Étape 5: Calibrez vos yeux
Une fois que votre œil est suiveable par le logiciel nous devrons le calibrer.
Appuillez sur le bouton`Restart Calibration` et regardez autour de vous.
Il est important que vous regardiez aux angles plus extrêmes lors de cette étape, tout en haut, tout en bas, etc...
Une fois que vous avez fait ça attendez que le `Mode` dises `Tracking`
La prochaine étape est de centrer vos yeux.
Regardez tout droit et appuillez sur le bouton `Recenter Eye`.
Votre œil est maintenant totalement calibré.
Répètez pour votre autre œil.
<Alerts :options="alerts.eyetrack_vr_guide_two">
<template v-slot:content>
<p>
Pour mieux centrer vos deux yeux il est conseiller de cliquer sur le bouton 'Recenter Eye' pour chaque œil sans bouger vos yeux.
</p>
</template>
</Alerts>
## Vous voyeaz quelque chose qui n'est pas à jour dans ce guide? laissez moi savoir! `Prohurtz#0001`

View File

@ -0,0 +1,22 @@
//vite.config.ts
import { SearchPlugin } from "vitepress-plugin-search";
import { defineConfig } from "vite";
// https://github.com/nextapps-de/flexsearch#options
var flexSearchIndexOptions = {
preset: "score",
cache: 1000,
context: true,
}
//default options
var options = {
...flexSearchIndexOptions,
previewLength: 62,
buttonLabel: "Rechercher",
placeholder: "rechercher dans la doc",
};
export default defineConfig({
plugins: [SearchPlugin(options)],
});

View File

@ -0,0 +1,108 @@
const printed_parts = {
hmds: [
{
hmd: "Quest 2",
parts: [
""
],
hyper_links: [
{
url: "https://github.com/RedHawk989/EyeTrackVR-Hardware/blob/main/3d_Printed_Mounts/Quest_2/Arkfall/EyeTrack_Quest_2_Mount_v10_By_Arkfall.stl",
desc: "Monture pour les caméras et les émeteurs infrarouges fait par Arkfall"
},
{
url: "https://github.com/RedHawk989/EyeTrackVR-Hardware/blob/main/3d_Printed_Mounts/Quest_2/Prohurtz/EyeTrack_Arkfall_Quest_2_Mount_Edit_By_Prourtz.stl",
desc: "★ Monture pour les caméras et les émeteurs infrarouges fait par Prohurtz"
},
{
url: "https://github.com/RedHawk989/EyeTrackVR-Hardware/blob/main/3d_Printed_Mounts/Quest_2/Arkfall/Quest_2_ESP_Mount_v2_By_Arkfall.stl",
desc: "★ Attachement pour les ESP par Arkfall"
},
{
url: "https://github.com/RedHawk989/EyeTrackVR-Hardware/blob/main/3d_Printed_Mounts/Quest_2/Prohurtz/Quest_2_ESP_Mounts_By_Prohurtz.stl",
desc: "Attachement pour les ESP par Prohurtz"
},
],
link_id: 1
},
{
hmd: "Valve Index",
parts: [
"ESP mount : N/A"
],
hyper_links: [
{
url: "https://github.com/RedHawk989/EyeTrackVR-Hardware/tree/main/3d_Printed_Mounts/Valve_Index/Seaweed",
desc: "★ Monture pour les caméras et les émeteurs infrarouges compatible avec les garndes valeures d'écartement pupillaire fait par Seaweed"
},
{
url: "https://github.com/RedHawk989/EyeTrackVR-Hardware/tree/main/3d_Printed_Mounts/Valve_Index/qdot",
desc: "Monture pour les caméras et les émeteurs infrarouges fait par Qdot"
},
{
url: "https://github.com/rrazgriz/IndexEyeTrackVR/tree/main/hardware",
desc: "Monture pour les caméras par Razgriz"
},
{
url: "https://github.com/MUTEtheCyberwolf/VALVE-INDEX-DEV-Frunk-1.0/tree/main/3D%20Print%20Files%20STL(Ascii)",
desc: "★ Modification du frunk pour attacher les ESP par MUTE the Cyberwolf"
},
],
link_id: 2
},
{
hmd: "Samsung Odyssey +",
parts: [
"Attachement ESP : Merci de vous réfèrer à l'attachement générique des ESP"
],
hyper_links: [
{
url: "https://github.com/RedHawk989/EyeTrackVR-Hardware/blob/main/3d_Printed_Mounts/Samsung_Odyssey%2B/Breakdown/Samsung%20Odyssey%2B%20Left%20by%20Breakdown.stl",
desc: "★ Monture pour les caméras et les émeteurs infrarouges fait par Breakdown"
}
],
link_id: 3
},
{
hmd: "Quest 1",
parts: [
"Attachement ESP : Merci de vous réfèrer à l'attachement générique des ESP"
],
hyper_links: [
{
url: "https://github.com/RedHawk989/EyeTrackVR-Hardware/blob/main/3d_Printed_Mounts/Quest_1/G0LDJAY/Quest_1_Cam_mount_v5_By_G0LDJAY.stl",
desc: "★ Monture pour les caméras et les émeteurs infrarouges fait par G0LDJAY"
}
],
link_id: 4
},
{
hmd: "Vive Pro 2",
parts: [
"Attachement ESP : Merci de vous réfèrer à l'attachement générique des ESP"
],
hyper_links: [
{
url: "https://github.com/RedHawk989/EyeTrackVR-Hardware/tree/main/3d_Printed_Mounts/Vive_Pro_2/StormFox",
desc: "★ Camera and IR emitter mount by StormFox"
}
],
link_id: 5
},
{
hmd: "Attachement générique des ESP",
parts: [
""
],
hyper_links: [
{
url: "https://github.com/RedHawk989/EyeTrackVR-Hardware/blob/main/3d_Printed_Mounts/General_ESP32-CAM_Mounts/ESPCAMshellv7_by_G0LDJAY.stl",
desc: "★ Attachement générique pour les ESP fait par G0LDJAY pour n'importe quel HMD (pas de monture spécifique par casque disponible)"
}
],
link_id: 6
}
]
}
export { printed_parts }

View File

@ -0,0 +1,109 @@
const alerts = {
user_warning: {//
type: 'warning',
title: '',
title_color: 'text-[orange]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'ATTENTION'
},
led_power_warning: {
type: 'warning',
title: 'Merci de faire attention',
title_color: 'text-[#b63a61] dark:text-[#ea4b7d]',
text_color: 'text-orange-400 dark:text-orange-500',
badge_content: 'ATTENTION'
},
parts_list_one: {//
type: 'warning',
title: '',
title_color: 'text-[orange]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'ATTENTION',
},
parts_list_two: {
type: 'info',
title: '',
title_color: 'text-[blue]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'NOTE',
},
parts_list_three: {
type: 'info',
title: '',
title_color: 'text-[blue]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'NOTE',
},
parts_list_four: {
type: 'info',
title: '',
title_color: 'text-[blue]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'NOTE',
},
parts_list_five: {
type: 'warning',
title: '',
title_color: 'text-[orange]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'ATTENTION',
},
parts_list_six: {
type: 'tip',
title: '',
title_color: 'text-[green]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'CONSEIL',
},
upload_firmware_one: {
type: 'info',
title: '',
title_color: 'text-[blue]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'NOTE',
},
configure_firmware_one: {
type: 'info',
title: '',
title_color: 'text-[blue]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'NOTE',
},
build_software_one: {
type: 'info',
title: '',
title_color: 'text-[blue]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'NOTE',
},
eyetrack_vr_guide_one: {
type: 'info',
title: '',
title_color: 'text-[blue]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'NOTE',
},
eyetrack_vr_guide_two: {
type: 'info',
title: '',
title_color: 'text-[blue]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'NOTE',
},
vrc_avatar_setup: {
type: 'info',
title: '',
title_color: 'text-[blue]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'NOTE',
},
end_one: {
type: 'info',
title: '',
title_color: 'text-[blue]',
text_color: 'text-slate-500 dark:text-slate-400',
badge_content: 'NOTE',
},
}
export { alerts }

View File

@ -0,0 +1,12 @@
import type { IDevRoadMap } from '../types/interfaces'
const Requirements: IDevRoadMap = {
state: true,
object: [
{ label: "Python 3.11.0", link: "https://www.python.org/downloads/release/python-3110/" },
{ label: "Poetry", link: "https://python-poetry.org/" },
{ label: "Un PC Windows/Linux", link: "" },
]
}
export { Requirements }

View File

@ -0,0 +1,42 @@
import type { IDevRoadMap } from '../types/interfaces'
const Completed: IDevRoadMap = {
state: true,
object: [
{ label: 'Algorythme de suivi' },
{ label: 'Calibration' },
{ label: 'Interface utilisateur' },
{ label: 'Design des circuits imprimés pour les emeteurs infrarouges' },
{ label: 'Support pour 2 yeux simultanément' },
{ label: 'Firmware' },
{ label: 'Meuilleur doccumentation (préparation, soudure etc.)' },
{ label: 'envoi des identifiants WiFi au démarage' },
]
}
const InProgress: IDevRoadMap = {
state: false,
object: [
{ label: 'Ouverture pupillaire variable' },
{ label: 'Sorti de la version 1.0 au masses' },
{ label: 'découpage automatique de la région d\'intérêt' },
{ label: 'Seuil automatique' },
{ label: 'mise en place du téléversement via autre chose que VS' },
{ label: 'Nouvelle interface' },
{ label: 'Carte de regulation de puissance' },
{ label: 'Nouveau circuit imprimé pour les LEDs infrarouges (uniquement pour la nouvelle carte de régulation)' },
]
}
const Planned: IDevRoadMap = {
state: false,
object: [
{ label: 'Support pour des parametres binnaires' },
{ label: 'Rendu Rendu Fovéal dynamique via OpenXR (pas garentis)' },
{ label: 'Cartes ESP-CAM modifiés' },
]
}
export { InProgress, Completed, Planned }

View File

@ -0,0 +1,66 @@
const faq = {
faq: [
{
question: "Quel est le but de ce projet?",
answer: "De créer un système de suivi des yeux, Open source, abordable pour les jeux sociaux VR tel que VRChat, en plus de créer une plateforme de suivi des yeux ouverte.",
hyper_link: "",
link_description: "",
},
{
question: "Quel casques seront supportés?",
answer: "N'importe quel casque dans lequel le matériel peut rentrer et où vous ou la communauté à créer une monture.",
hyper_link: "",
link_description: "",
},
{
question: "Comment est-ce que ça marches?",
answer: "Pour l'instant, on utilises une caméra pour chaque œil monté dans le casque. la caméra stream son flux vidéo vers votre PC pour être analysé afin d'envoyer les données de suivi via OSC à l'adresse de VRChat.",
hyper_link: "",
link_description: "",
},
{
question: "Quelles fonctionalitées vont être supportés?",
answer: "Le but serait de suivre l'ouverture et la position des yeux, et une forme de dilatation des pupilles. Une lontaine inspiration de ce projet serait d'avoir une sorte de rendu fovéal, parceque c'est cool et n'importe quelle amélioration de performence en VR est la bienvenue.",
hyper_link: "",
link_description: "",
},
{
question: "Quand est-ce que ça sera terminé?",
answer: "Quand ça sera finis 😉 J'ai une vie un peu remplie donc le développement peut être lent ou rapide en conséquence de façon imprévisible.",
hyper_link: "",
link_description: "",
},
{
question: "Est-ce que les infrarouges vont faire des dégars sur mes yeux?",
answer: "Ce projet à été construit avec la sûreté en temps que pillier. Si vous avez toutes les mesures de sécurité en place et que la quantité d'infrarouges que vous observez avec une caméra à l'air sûr, tout devrait bien aller. Merci de vous rappeler que le développement n'est pas fini et qu'il vaut mieux être précautionneux.",
hyper_link: "https://dammedia.osram.info/media/bin/osram-dam-2496608/AN002_Details%20on%20photobiological%20safety%20of%20LED%20light%20sources.pdf",
link_description: " here is a pdf with safety information",
},
{
question: "Combien ça coûte?",
answer: "Mon but est de garder le prix le plus bas possible avec $75 comme grand maximum, le matériel actuel côute aux alentours de $25 à $40. aaaa",
hyper_link: "",
link_description: ""
},
{
question: "Comment est-ce que j'adapte mon avatar?",
answer: "Regardez le tutoriel vidéo dans la section Divers ou vous réfèrez vous au wiki de VRChat face tracking sur github. Veuillez noter que l'on supporte uniquement les parametres float.",
hyper_link: "",
link_description: ""
},
{
question: "Quel est le matériel existant utilise et comment est-ce que je construit le tout?",
answer: "Des tests sont en train d'être fait pour valider nos choix matériels actuels, pas de matériel n'a encore été totalement confirmé c'est pour ça que je ne peux pas recommander d'aacheter des pièces et de l'assembler vous même si vous n'êtes pas parti pour contribuer au projet et perdre un peu d'argent dans le procésus. ceci est toujours valide.",
hyper_link: "",
link_description: ""
},
{
question: "Où est la doccumentation?",
answer: "Toute notre doccumentation est rasemblé sur ce site internet, toute future doccumentation se trouvera également ici.",
hyper_link: "",
link_description: "",
}
]
}
export { faq }

View File

@ -0,0 +1,403 @@
const image_settings = {
image_one: {
url: "https://i.imgur.com/j18rRI7.jpg",
alt: "'img des composants'",
caption: "'les ESPs, caméras, un programmeur et un connecteur USB'",
max_width: "max-width: 400px;"
},
discord_content: {
url: "https://discord.com/api/guilds/946212245187199026/widget.png?style=banner3",
url_2: "https://discord.gg/kkXYbVykZX",
alt: "'Banière discord'",
max_width: "max-width: 400px;"
},
external_antenna: {
url: "https://i.imgur.com/OzpxFMD.png",
alt: "'img d'une antenne externe'",
caption: "Immage venant de: ",
caption_link: "https://randomnerdtutorials.com/esp32-cam-connect-external-antenna",
max_width: "max-width: 400px;"
},
external_antenna_resistors: {
url: "https://i.imgur.com/RIFpNqW.jpg",
alt: "'img des résistances de l'antenne externe'",
max_width: "max-width: 400px;"
},
camera_socket: {
url: "https://i.imgur.com/T5asLGN.jpg",
alt: "'img du socket caméra'",
max_width: "max-width: 400px;"
},
camera_socket_clip: {
url: "https://i.imgur.com/Z8b8Sin.jpg",
alt: "'img d'un clip caméra'",
max_width: "max-width: 400px;"
},
camera_cable: {
url: "https://i.imgur.com/dDBIi9j.jpg",
alt: "'img d'un câble caméra'",
max_width: "max-width: 400px;"
},
camera_clip_close: {
url: "https://i.imgur.com/VnFi5XS.jpg",
alt: "'img d'un câble caméra'",
max_width: "max-width: 400px;"
},
_7_12_one: {
url: "https://i.imgur.com/LsLPAcd.jpg",
alt: "",
max_width: "max-width: 400px;"
},
_7_12_two: {
url: "https://i.imgur.com/Cdu9lSN.jpg",
alt: "",
max_width: "max-width: 400px;"
},
_7_12_three: {
url: "https://i.imgur.com/QlRrWNn.jpg",
alt: "",
max_width: "max-width: 400px;"
},
_13_18_one: {
url: "https://i.imgur.com/DhnmLBG.jpg",
alt: "",
max_width: "max-width: 400px;"
},
_13_18_two: {
url: "https://i.imgur.com/PWA0gtq.jpg",
alt: "",
max_width: "max-width: 400px;"
},
_13_18_three: {
url: "https://i.imgur.com/0zXY79j.jpg",
alt: "",
caption: "résistance de 357ohm et les PCBs V3",
max_width: "max-width: 400px;"
},
_13_18_four: {
url: "https://i.imgur.com/n1noWKq.png",
alt: "",
caption: "V3",
max_width: "max-width: 400px;"
},
_13_18_five: {
url: "https://i.imgur.com/Ap8OAWY.png",
alt: "",
caption: "Les marques vertes et l'encoche sur le paquet indiquent la cathode des LEDs ci-dessus.",
max_width: "max-width: 400px;"
},
_13_18_six: {
url: "https://i.imgur.com/gb4etdB.jpg",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
_13_18_seven: {
url: "https://i.imgur.com/ev5QFch.jpg",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
_13_18_eight: {
url: "https://i.imgur.com/8jCQOHw.jpg",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
_13_18_nine: {
url: "https://i.imgur.com/CHUb7Iv.jpg",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
_13_18_ten: {
url: "https://i.imgur.com/jZYAm5O.jpg",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
end_one: {
url: "https://i.imgur.com/pjvLHJL.jpg",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
end_two: {
url: "https://i.imgur.com/RbHZQhl.jpg",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
end_three: {
url: "https://i.imgur.com/VyClWvp.jpg",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
end_four: {
url: "https://i.imgur.com/tFCQTqE.jpg",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
end_five: {
url: "https://i.imgur.com/TiLTAms.png",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
end_six: {
url: "https://i.imgur.com/2pFF3oM.png",
alt: "",
caption: "",
max_width: "max-width: 500px;"
},
end_seven: {
url: "https://i.imgur.com/bEq6Ww0.jpg",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
end_eight: {
url: "https://i.imgur.com/ubIa1ir.png",
alt: "",
caption: "",
max_width: "max-width: 400px;"
},
end_nine: {
url: "https://i.imgur.com/a6ERUFx.png",
alt: "",
caption: "",
max_width: "max-width: 500px;"
},
end_ten: {
url: "https://i.imgur.com/Wy89UWy.jpg",
alt: "",
caption: "",
max_width: "max-width: 500px;"
},
end_eleven: {
url: "https://i.imgur.com/LtKOLWo.jpg",
alt: "",
caption: "",
max_width: "max-width: 500px;"
},
end_twelve: {
url: "https://i.imgur.com/9mty1bv.png",
alt: "",
caption: "",
max_width: "max-width: 500px;"
},
end_thirteen: {
url: "https://i.imgur.com/ArLO1ls.jpg",
alt: "",
caption: "",
max_width: "max-width: 500px;"
},
end_fourteen: {
url: "https://i.imgur.com/ZIecsMM.jpg",
alt: "",
caption: "",
max_width: "max-width: 500px;"
},
end_fifteen: {
url: "https://i.imgur.com/tYD1KKe.png",
alt: "",
caption: "",
max_width: "max-width: 500px;"
},
end_sixteen: {
url: "https://i.imgur.com/3rCRU5A.jpg",
alt: "",
caption: "",
max_width: "max-width: 500px;"
},
upload_firmware_image_one: {
url: "https://i.imgur.com/dSPSpkY.png",
alt: "'bouton moniteur série de platformio'",
max_width: "max-width: 500px;"
},
upload_firmware_image_two: {
url: "https://i.imgur.com/PoHP3NC.png",
alt: "'img du moniteur série de platformio'",
max_width: "max-width: 600px;"
},
setup_vscode_image_one: {
url: "https://i.imgur.com/jXPXIFz.gif",
alt: "'img'",
max_width: "max-width: 500px;"
},
setup_vscode_image_two: {
url: "https://i.imgur.com/hAm3Zu0.gif",
alt: "'img'",
max_width: "max-width: 500px;"
},
setup_vscode_image_three: {
url: "https://i.imgur.com/ebV0IgT.gif",
alt: "'img'",
max_width: "max-width: 500px;"
},
setup_vscode_image_four: {
url: "https://i.imgur.com/DWO5vkE.png",
alt: "'img'",
max_width: "max-width: 500px;"
},
setup_vscode_image_five: {
url: "https://i.imgur.com/mWAVxtF.png",
alt: "'img'",
max_width: "max-width: 500px;"
},
setup_vscode_image_six: {
url: "https://i.imgur.com/YbXpX7t.png",
alt: "'img'",
max_width: "max-width: 500px;"
},
setup_vscode_image_seven: {
url: "https://i.imgur.com/c61Cpaz.gif",
alt: "'img'",
max_width: "max-width: 500px;"
},
configure_firmware_one: {
url: "https://i.imgur.com/VZeI39I.png",
alt: "'img'",
max_width: "max-width: 500px;"
},
configure_firmware_two: {
url: "https://i.imgur.com/ySzUMPO.png",
alt: "'img'",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_one: {
url: "https://i.imgur.com/olwRFYI.png",
alt: "'img'",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_two: {
url: "https://i.imgur.com/Ugzzgbh.png",
alt: "'img'",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_three: {
url: "https://i.imgur.com/z6V7A71.png",
alt: "'img'",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_four: {
url: "https://i.imgur.com/MJb2h74.png",
alt: "'img'",
caption: "Voyez le texte de l'option Awating Eye Cropping?",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_five: {
url: "https://i.imgur.com/1pNYITS.png",
alt: "'img'",
caption: ":O c'est mon œil!",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_six: {
url: "https://i.imgur.com/HZSvFBv.png",
alt: "'img'",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_seven: {
url: "https://i.imgur.com/xXTB3sM.png",
alt: "'img'",
caption: "Il est de traviole!",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_eight: {
url: "https://i.imgur.com/blsrpCX.png",
alt: "'img'",
caption: "Bien mieux!",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_nine: {
url: "https://i.imgur.com/30fFadH.png",
alt: "'img'",
caption: "Bien mieux!",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_ten: {
url: "https://i.imgur.com/ZjpKfCV.png",
alt: "'img'",
caption: "Bien mieux!",
max_width: "max-width: 500px;"
},
eyetrack_vr_guide_eleven: {
url: "https://i.imgur.com/KPUn8S1.png",
alt: "'img'",
caption: "Bien mieux!",
max_width: "max-width: 500px;"
},
fox_ir_build_instructions_one: {
url: "https://i.imgur.com/WyoVdcR.jpg",
alt: "'img'",
caption: "résistance de 698ohm et PCBs V2",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_two: {
url: "https://i.imgur.com/sNB6ju2.png",
alt: "'img'",
caption: "V2",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_three: {
url: "https://i.imgur.com/Ap8OAWY.png",
alt: "'img'",
caption: "Les marques vertes et l'encoche sur le paquet indiquent la cathode des LEDs ci-dessus.",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_four: {
url: "https://i.imgur.com/ayQ5vkf.jpg",
alt: "'img'",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_five: {
url: "https://i.imgur.com/DpFwecO.jpg",
alt: "'img'",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_six: {
url: "https://i.imgur.com/50ydMrl.jpg",
alt: "'img'",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_seven: {
url: "https://i.imgur.com/Qq3cvxi.jpg",
alt: "'img'",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_eight: {
url: "https://i.imgur.com/yWGaKaC.jpg",
alt: "'img'",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_nine: {
url: "https://i.imgur.com/Ql4zYCq.jpg",
alt: "'img'",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_ten: {
url: "https://i.imgur.com/Xrczoyv.jpg",
alt: "'img'",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_eleven: {
url: "https://i.imgur.com/KKgP8qs.jpg",
alt: "'img'",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_twelve: {
url: "https://i.imgur.com/SvbHAuY.jpg",
alt: "'img'",
caption: "LED inversé dans cette image, l'encoche verte doit NE DOIT PAS faire face au PCB.",
max_width: "max-width: 400px;"
},
fox_ir_build_instructions_thirteen: {
url: "https://i.imgur.com/gopjVG3.png",
alt: "'dessin'",
max_width: "max-width: 500px;"
},
};
export { image_settings }

View File

@ -0,0 +1,68 @@
import { type IMembers } from '../types/interfaces'
const members: IMembers[] = [
{
name: 'Prohurtz',
avatar: 'https://avatars.githubusercontent.com/u/48768484?v=4',
title: 'Initiateur / Modérateur / Documenteur / Chef du développement logiciel',
links: [
{
icon: 'github',
link: 'https://github.com/RedHawk989'
},
]
},
{
name: 'Summer',
avatar: 'https://avatars.githubusercontent.com/u/115666235?v=4',
title: 'Ingénieur en Machine Learning / Data Scientist / développeur d\'application',
links: [
{
icon: 'github',
link: 'https://github.com/Summer404NotFound'
},
]
},
{
name: 'lorow',
avatar: 'https://avatars.githubusercontent.com/u/14099558?v=4',
title: 'Chef du développement du firmware / développeur d\'application',
links: [
{
icon: 'github',
link: 'https://github.com/lorow'
},
]
},
{
name: 'DaOfficialWizard',
avatar: 'https://avatars.githubusercontent.com/u/45744329?v=4',
title: 'développeur firmware / manageur de la doccumentation / développeur d\'application',
links: [
{
icon: 'github',
link: 'https://github.com/ZanzyTHEbar'
},
]
},
]
const contributors: IMembers[] = [
{
name: 'qdot',
avatar: 'https://avatars.githubusercontent.com/u/34539?v=4',
links: [
{ icon: 'github', link: 'https://github.com/qdot' },
{ icon: 'twitter', link: 'https://twitter.com/qdot' },
]
},
{
name: 'dfgHiatus',
avatar: 'https://avatars.githubusercontent.com/u/51272212?v=4',
links: [
{ icon: 'github', link: 'https://github.com/dfgHiatus' },
]
},
]
export { members, contributors, IMembers }

View File

@ -0,0 +1,18 @@
import type { IDevRoadMap } from '../types/interfaces'
const RequiredHardware: IDevRoadMap = {
state: true,
object: [
{label: "2 cartes ESP32 CAM"},
{label: "2 caméras 160 degrés"},
{label: "1 connecteur USB pour alimenter vos ESPs"},
{label: "1 programmeur (vivement recommandé d'en prendre 2))"},
{label: "Émetteurs infrarouges, résistances, et préférablement des PCBs"},
{label: "Câble de calibres plus petit pour alimenter les ESP"},
{label: "Câble de plus gros calibre pour alimenter les LEDs infrarouges"},
{label: "Une imprimante 3D pour imprimer les fixations/montures. (utiliser des sites comme JLCPCB peut également être une option)"},
{label: "De la colle, pistolet à colle fortement recommandé"},
]
}
export { RequiredHardware }

View File

@ -0,0 +1,21 @@
export interface ISocialLinks {
icon: string,
link: string,
}
export interface IMembers {
name: string,
avatar?: string,
title?: string,
links: ISocialLinks[],
}
export interface IDevRoadMapObject {
label: string,
link?: string,
}
export interface IDevRoadMap {
state: boolean,
object: IDevRoadMapObject[],
}

View File

@ -0,0 +1,40 @@
/* Custom Checkboxes */
input[type="checkbox"] {
cursor: pointer;
width: 10px;
height: 10px;
margin: 10px;
-webkit-appearance: none;
-moz-appearance: none;
-o-appearance: none;
appearance: none;
outline: 1px solid lightblue;
box-shadow: rgba(0, 0, 0, 0.25) 0px 54px 55px,
rgba(0, 0, 0, 0.12) 0px -12px 30px, rgba(0, 0, 0, 0.12) 0px 4px 6px,
rgba(0, 0, 0, 0.17) 0px 12px 13px, rgba(0, 0, 0, 0.09) 0px -3px 5px;
background-clip: content-box;
padding: 3px;
}
input,
input:focus {
border: none;
border-radius: 2pt;
box-shadow: 0 0 0 1pt grey;
outline: none;
transition: 0.1s;
}
input[type="checkbox"]:checked {
background-color: #3899ff;
}
input[type="checkbox"]:focus {
box-shadow: 0 0 3pt 2pt cornflowerblue;
}
label {
font-size: 18px;
position: relative;
top: -9px;
}

View File

@ -0,0 +1,20 @@
/* .vitepress/theme/custom.css */
/** Import all project related CSS files here */
/*! Do not put raw CSS code in this file */
/* Fonts */
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700;800;900&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Lato:wght@300;400;700;900&display=swap');
@import url('https://fonts.googleapis.com/css?family=Ubuntu:500');
/* Custom Imports */
@import 'theme.css';
@import 'index.css';
@import 'scrollbar.css';
@import 'checkboxes.css';
/* TailWindCSS Files */
@tailwind base;
@tailwind components;
@tailwind utilities;

View File

@ -0,0 +1,11 @@
@layer components {
.grid-container {
display: grid;
column-gap: 50px;
row-gap: 50px;
}
.custom-links {
@apply dark:text-blue-400 text-blue-800 hover:underline
}
}

View File

@ -0,0 +1,21 @@
/* width */
::-webkit-scrollbar {
width: 6px;
}
/* Track */
::-webkit-scrollbar-track {
box-shadow: inset 0 0 5px grey;
border-radius: 10px;
}
/* Handle */
::-webkit-scrollbar-thumb {
background: #6d7faeb4;
border-radius: 10px;
}
/* Handle on hover */
::-webkit-scrollbar-thumb:hover {
background: #6d7fae;
}

View File

@ -0,0 +1,359 @@
/* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css */
@import url(https://fonts.googleapis.com/css?family=Space+Mono:regular,italic,700,700italic);
@import url(https://fonts.googleapis.com/css?family=Space+Grotesk:regular,italic,700,700italic);
/**
* Typography
* -------------------------------------------------------------------------- */
:root {
/* Base Font */
--vp-font-family-base: "Space Grotesk", "Inter var experimental", "Inter var",
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu,
Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
--font-accent: #ab5ac7;
--font-accent-light: #ab5ac7e3;
/* Code Snippet font */
--vp-font-family-mono: "Space Mono", Menlo, Monaco, Consolas, "Courier New",
monospace;
}
/**
* Colors Theme
* -------------------------------------------------------------------------- */
:root {
/* Main Theme Colors */
/* --vp-c-brand: var(--vp-c-green);
--vp-c-brand-light: var(--vp-c-green-light);
--vp-c-brand-lighter: var(--vp-c-green-lighter);
--vp-c-brand-dark: var(--vp-c-green-dark);
--vp-c-brand-darker: var(--vp-c-green-darker);
--vp-c-sponsor: #fd1d7c; */
--vp-c-brand: var(--font-accent);
--vp-c-brand-light: var(--font-accent-ligt);
--vp-c-brand-lighter: var(--font-accent);
--vp-c-brand-lighter: rgba(31, 23, 255, 0.25);
--vp-c-brand-dark: #4d45a8;
--vp-c-brand-darker: #3a3381;
--vp-c-sponsor: #fd1d7c;
/* Text and Background Colors */
--vp-c-bg: var(--vp-c-white);
--vp-c-bg-soft: var(--vp-c-white-soft);
--vp-c-bg-mute: var(--vp-c-white-mute);
--vp-c-bg-alt: var(--vp-c-white-soft);
--vp-c-bg-alpha-with-backdrop: rgba(255, 255, 255, 0.7);
--vp-c-bg-alpha-without-backdrop: rgba(255, 255, 255, 0.95);
--vp-c-bg-backdrop: rgba(0, 0, 0, 0.6);
--vp-c-divider: var(--vp-c-divider-light-1);
--vp-c-divider-light: var(--vp-c-divider-light-2);
--vp-c-divider-inverse: var(--vp-c-divider-dark-1);
--vp-c-divider-inverse-light: var(--vp-c-divider-dark-2);
--vp-c-text-1: var(--vp-c-text-light-1);
--vp-c-text-2: var(--vp-c-text-light-2);
--vp-c-text-3: var(--vp-c-text-light-3);
--vp-c-text-4: var(--vp-c-text-light-4);
--vp-c-text-inverse-1: var(--vp-c-text-dark-1);
--vp-c-text-inverse-2: var(--vp-c-text-dark-2);
--vp-c-text-inverse-3: var(--vp-c-text-dark-3);
--vp-c-text-inverse-4: var(--vp-c-text-dark-4);
--vp-c-text-code: var(--vp-c-indigo-soft);
}
.dark {
--vp-c-bg: var(--vp-c-black-soft);
--vp-c-bg-soft: var(--vp-c-black-mute);
--vp-c-bg-mute: var(--vp-c-gray-dark-3);
--vp-c-bg-alt: var(--vp-c-black);
--vp-c-bg-alpha-with-backdrop: rgba(36, 36, 36, 0.7);
--vp-c-bg-alpha-without-backdrop: rgba(36, 36, 36, 0.95);
--vp-c-divider: var(--vp-c-divider-dark-1);
--vp-c-divider-light: var(--vp-c-divider-dark-2);
--vp-c-divider-inverse: var(--vp-c-divider-light-1);
--vp-c-divider-inverse-light: var(--vp-c-divider-light-2);
--vp-c-text-1: var(--vp-c-text-dark-1);
--vp-c-text-2: var(--vp-c-text-dark-2);
--vp-c-text-3: var(--vp-c-text-dark-3);
--vp-c-text-4: var(--vp-c-text-dark-4);
--vp-c-text-inverse-1: var(--vp-c-text-light-1);
--vp-c-text-inverse-2: var(--vp-c-text-light-2);
--vp-c-text-inverse-3: var(--vp-c-text-light-3);
--vp-c-text-inverse-4: var(--vp-c-text-light-4);
--vp-c-text-code: var(--vp-c-indigo-lighter);
}
/**
* Shadows
* -------------------------------------------------------------------------- */
:root {
--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06);
--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, 0.07), 0 1px 4px rgba(0, 0, 0, 0.07);
--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, 0.1), 0 2px 6px rgba(0, 0, 0, 0.08);
--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, 0.12), 0 3px 9px rgba(0, 0, 0, 0.12);
--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, 0.16), 0 4px 12px rgba(0, 0, 0, 0.16);
}
/**
* Z-indexes
* -------------------------------------------------------------------------- */
:root {
--vp-z-index-local-nav: 10;
--vp-z-index-nav: 20;
--vp-z-index-layout-top: 30;
--vp-z-index-backdrop: 40;
--vp-z-index-sidebar: 50;
--vp-z-index-footer: 60;
}
/**
* Icons
* -------------------------------------------------------------------------- */
:root {
--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");
--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E");
}
/**
* Layouts
* -------------------------------------------------------------------------- */
:root {
--vp-layout-max-width: 1440px;
}
/**
* Component: Code
* -------------------------------------------------------------------------- */
:root {
--vp-code-line-height: 1.7;
--vp-code-font-size: 0.875em;
--vp-code-block-color: var(--vp-c-text-dark-1);
--vp-code-block-bg: #292d3e;
--vp-code-line-highlight-color: rgba(0, 0, 0, 0.5);
--vp-code-line-number-color: var(--vp-c-text-dark-3);
--vp-code-line-diff-add-color: rgba(125, 191, 123, 0.1);
--vp-code-line-diff-add-symbol-color: rgba(125, 191, 123, 0.5);
--vp-code-line-diff-remove-color: rgba(255, 128, 128, 0.05);
--vp-code-line-diff-remove-symbol-color: rgba(255, 128, 128, 0.5);
--vp-code-line-error-color: var(--vp-c-red-dimm-2);
--vp-code-line-warning-color: var(--vp-c-yellow-dimm-2);
--vp-code-copy-code-hover-bg: rgba(255, 255, 255, 0.05);
--vp-code-copy-code-active-text: var(--vp-c-text-dark-2);
--vp-code-tab-text-color: var(--vp-c-text-dark-2);
--vp-code-tab-bg: var(--vp-code-block-bg);
--vp-code-tab-divider: var(--vp-c-divider-dark-2);
--vp-code-tab-hover-text-color: var(--vp-c-text-dark-1);
--vp-code-tab-active-text-color: var(--vp-c-text-dark-1);
--vp-code-tab-active-bar-color: var(--vp-c-brand);
}
/* Code Block */
.dark {
--vp-code-block-bg: var(--vp-c-black);
/* --vp-code-tab: var(--vp-c-black-mute);*/
/* --vp-code-tab-hover: var(--vp-c-gray-dark-4);*/
}
/**
* Component: Button
* -------------------------------------------------------------------------- */
:root {
--vp-button-brand-border: var(--vp-c-brand-light);
--vp-button-brand-text: var(--vp-c-text-dark-1);
--vp-button-brand-bg: var(--vp-c-brand);
--vp-button-brand-hover-border: var(--vp-c-brand-light);
--vp-button-brand-hover-text: var(--vp-c-text-dark-1);
--vp-button-brand-hover-bg: var(--vp-c-brand-light);
--vp-button-brand-active-border: var(--vp-c-brand-light);
--vp-button-brand-active-text: var(--vp-c-text-dark-1);
--vp-button-brand-active-bg: var(--vp-button-brand-bg);
--vp-button-alt-border: var(--vp-c-gray-light-3);
--vp-button-alt-text: var(--vp-c-text-light-1);
--vp-button-alt-bg: var(--vp-c-gray-light-5);
--vp-button-alt-hover-border: var(--vp-c-gray-light-3);
--vp-button-alt-hover-text: var(--vp-c-text-light-1);
--vp-button-alt-hover-bg: var(--vp-c-gray-light-4);
--vp-button-alt-active-border: var(--vp-c-gray-light-3);
--vp-button-alt-active-text: var(--vp-c-text-light-1);
--vp-button-alt-active-bg: var(--vp-c-gray-light-3);
--vp-button-sponsor-border: var(--vp-c-gray-light-3);
--vp-button-sponsor-text: var(--vp-c-text-light-2);
--vp-button-sponsor-bg: transparent;
--vp-button-sponsor-hover-border: var(--vp-c-sponsor);
--vp-button-sponsor-hover-text: var(--vp-c-sponsor);
--vp-button-sponsor-hover-bg: transparent;
--vp-button-sponsor-active-border: var(--vp-c-sponsor);
--vp-button-sponsor-active-text: var(--vp-c-sponsor);
--vp-button-sponsor-active-bg: transparent;
}
.dark {
--vp-button-brand-border: var(--vp-c-brand-light);
--vp-button-brand-text: var(--vp-c-text-dark-1);
--vp-button-brand-bg: var(--vp-c-brand-dark);
--vp-button-brand-hover-border: var(--vp-c-brand-lighter);
--vp-button-brand-hover-text: var(--vp-c-text-dark-1);
--vp-button-brand-hover-bg: var(--vp-c-brand);
--vp-button-brand-active-border: var(--vp-c-brand-lighter);
--vp-button-brand-active-text: var(--vp-c-text-dark-1);
--vp-button-brand-active-bg: var(--vp-button-brand-bg);
--vp-button-alt-border: var(--vp-c-gray-dark-2);
--vp-button-alt-text: var(--vp-c-text-dark-1);
--vp-button-alt-bg: var(--vp-c-bg-mute);
--vp-button-alt-hover-border: var(--vp-c-gray-dark-2);
--vp-button-alt-hover-text: var(--vp-c-text-dark-1);
--vp-button-alt-hover-bg: var(--vp-c-gray-dark-2);
--vp-button-alt-active-border: var(--vp-c-gray-dark-2);
--vp-button-alt-active-text: var(--vp-c-text-dark-1);
--vp-button-alt-active-bg: var(--vp-button-alt-bg);
--vp-button-sponsor-border: var(--vp-c-gray-dark-1);
--vp-button-sponsor-text: var(--vp-c-text-dark-2);
}
/**
* Component: Custom Block
* -------------------------------------------------------------------------- */
:root {
--vp-custom-block-code-font-size: 13px;
--vp-custom-block-info-border: var(--vp-c-divider-light);
--vp-custom-block-info-text: var(--vp-c-text-2);
--vp-custom-block-info-bg: var(--vp-c-white-soft);
--vp-custom-block-info-code-bg: var(--vp-c-gray-light-4);
--vp-custom-block-tip-border: var(--vp-c-green-dimm-1);
--vp-custom-block-tip-text: var(--vp-c-green-darker);
--vp-custom-block-tip-bg: var(--vp-c-green-dimm-3);
--vp-custom-block-tip-code-bg: var(--vp-custom-block-tip-bg);
--vp-custom-block-warning-border: var(--vp-c-yellow-dimm-1);
--vp-custom-block-warning-text: var(--vp-c-yellow-darker);
--vp-custom-block-warning-bg: var(--vp-c-yellow-dimm-3);
--vp-custom-block-warning-code-bg: var(--vp-custom-block-warning-bg);
--vp-custom-block-danger-border: var(--vp-c-red-dimm-1);
--vp-custom-block-danger-text: var(--vp-c-red-darker);
--vp-custom-block-danger-bg: var(--vp-c-red-dimm-3);
--vp-custom-block-danger-code-bg: var(--vp-custom-block-danger-bg);
--vp-custom-block-details-border: var(--vp-custom-block-info-border);
--vp-custom-block-details-text: var(--vp-custom-block-info-text);
--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);
--vp-custom-block-details-code-bg: var(--vp-custom-block-details-bg);
}
.dark {
--vp-custom-block-info-border: var(--vp-c-divider-light);
--vp-custom-block-info-bg: var(--vp-c-black-mute);
--vp-custom-block-info-code-bg: var(--vp-c-gray-dark-4);
--vp-custom-block-tip-border: var(--vp-c-green-dimm-2);
--vp-custom-block-tip-text: var(--vp-c-green-light);
--vp-custom-block-warning-border: var(--vp-c-yellow-dimm-2);
--vp-custom-block-warning-text: var(--vp-c-yellow-light);
--vp-custom-block-danger-border: var(--vp-c-red-dimm-2);
--vp-custom-block-danger-text: var(--vp-c-red-light);
}
/**
* Component: Nav
* -------------------------------------------------------------------------- */
:root {
--vp-nav-height: var(--vp-nav-height-mobile);
--vp-nav-height-mobile: 56px;
--vp-nav-height-desktop: 82px;
}
@media (min-width: 960px) {
:root {
--vp-nav-height: var(--vp-nav-height-desktop);
}
}
/**
* Component: Sidebar
* -------------------------------------------------------------------------- */
:root {
--vp-sidebar-width: 372px;
}
/**
* Component: Home
* -------------------------------------------------------------------------- */
:root {
--vp-home-hero-name-color: var(--vp-c-brand);
--vp-home-hero-name-background: transparent;
--vp-home-hero-image-background-image: none;
--vp-home-hero-image-filter: none;
}
/**
* Component: Badge
* -------------------------------------------------------------------------- */
:root {
--vp-badge-info-border: var(--vp-c-divider-light);
--vp-badge-info-text: var(--vp-c-text-2);
--vp-badge-info-bg: var(--vp-c-white-soft);
--vp-badge-tip-border: var(--vp-c-green-dimm-1);
--vp-badge-tip-text: var(--vp-c-green-darker);
--vp-badge-tip-bg: var(--vp-c-green-dimm-3);
--vp-badge-warning-border: var(--vp-c-yellow-dimm-1);
--vp-badge-warning-text: var(--vp-c-yellow-darker);
--vp-badge-warning-bg: var(--vp-c-yellow-dimm-3);
--vp-badge-danger-border: var(--vp-c-red-dimm-1);
--vp-badge-danger-text: var(--vp-c-red-darker);
--vp-badge-danger-bg: var(--vp-c-red-dimm-3);
}
.dark {
--vp-badge-info-border: var(--vp-c-divider-light);
--vp-badge-info-bg: var(--vp-c-black-mute);
--vp-badge-tip-border: var(--vp-c-green-dimm-2);
--vp-badge-tip-text: var(--vp-c-green-light);
--vp-badge-warning-border: var(--vp-c-yellow-dimm-2);
--vp-badge-warning-text: var(--vp-c-yellow-light);
--vp-badge-danger-border: var(--vp-c-red-dimm-2);
--vp-badge-danger-text: var(--vp-c-red-light);
}

View File

@ -0,0 +1,26 @@
<script setup>
const props = defineProps(['options']);
</script>
<template>
<div class="checkboxes">
<ul style="list-style: none;">
<li v-for='item in props.options.object'>
<div v-if="props.options.state">
<input type="checkbox" checked>
<label v-if="item.link !== null || props.link !== ''"><a :href="item.link" target="_blank">{{
item.label
}}</a></label>
<label v-else>{{ item.label }}</label>
</div>
<div v-else>
<input type="checkbox" unchecked>
<label v-if="item.link !== null || props.link !== ''"><a :href="item.link" target="_blank">{{
item.label
}}</a></label>
<label v-else>{{ item.label }}</label>
</div>
</li>
</ul>
</div>
</template>

View File

@ -0,0 +1,35 @@
<template>
<div>
<button @click="toggleAccordion()" class="flex items-center space-x-3" :aria-expanded="isOpen"
:aria-controls="`collapse${_uid}`">
<slot name="title" />
<svg class="w-3 transition-all duration-200 transform" :class="{
'rotate-180': isOpen,
'rotate-0': !isOpen,
}" fill="none" stroke="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 10"
aria-hidden="true">
<path d="M15 1.2l-7 7-7-7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
</svg>
</button>
<div v-show="isOpen" :id="`collapse${_uid}`">
<slot name="content" />
</div>
</div>
</template>
<script>
export default {
data() {
return {
isOpen: false,
};
},
methods: {
toggleAccordion() {
// TODO: toggle the accodrian with a smooth transition
this.isOpen = !this.isOpen;
},
},
};
</script>

View File

@ -0,0 +1,19 @@
<script setup>
const props = defineProps(['options']);
</script>
<template>
<div class="my-2 max-w-xs rounded-lg bg-white px-4 py-4 shadow-xl ring-1 ring-slate-900/5 dark:bg-slate-800">
<div>
<span class="drop-shadow-lg">
<Badge :type="options.type" :text="options.badge_content" />
</span>
</div>
<div class="mt-2 pl-1 text-2xl font-bold tracking-tight text-slate-900" :class="options.title_color">
{{ options.title }}
</div>
<p class="mt-2 pl-1 text-sm" :class="options.text_color">
<slot name="content" />
</p>
</div>
</template>

View File

@ -0,0 +1,28 @@
<!-- Do not edit this file - it is a template. Please edit the index.ts file in /static/3d_printed_member -->
<script setup>
import Accordion from '../../vue/accordion/Accordion.vue'
import { faq } from '../../static/faq'
</script>
<template>
<div>
<Accordion v-for="member in faq.faq" class="mb-4">
<template v-slot:title>
<span class="font-semibold text-xl">{{ member.question }}</span>
</template>
<template v-slot:content>
<div>
<span class="">
<blockquote>
<ul style="list-style: none;">
<li>{{ member.answer }}</li>
<p v-if="member.hyper_link != NULL && member.hyper_link != ''">
<a :href="member.hyper_link" target="_blank">{{ member.link_description }}</a>
</p>
</ul>
</blockquote>
</span>
</div>
</template>
</Accordion>
</div>
</template>

View File

@ -0,0 +1,27 @@
<script setup>
const props = defineProps(['options']);
</script>
<template>
<div align="center" class="mb-4">
<figure>
<a v-if="options.url_2" class="no_icon" target="_blank" rel="noopener" :href="options.url_2">
<img class="docimage max-w-full h-auto rounded-lg" :src="options.url" :alt="options.alt"
:style="options.max_width" />
</a>
<a v-else class="no_icon" target="_blank" rel="noopener" :href="options.url">
<img class="docimage max-w-full h-auto rounded-lg" :src="options.url" :alt="options.alt"
:style="options.max_width" />
</a>
<figcaption v-if="options.caption">
<br>
{{ options.caption }}
<a v-if="options.caption_link" :href="options.caption_link" target="_blank">
<span class="iconify" data-icon="mdi:open-in-new" data-inline="false">
{{ options.caption_link }}
</span>
</a>
</figcaption>
</figure>
</div>
</template>

View File

@ -0,0 +1,29 @@
<!-- Do not edit this file - it is a template. Please edit the index.ts file in /static/3d_printed_parts -->
<script setup>
import Accordion from '../../vue/accordion/Accordion.vue'
import { printed_parts } from '../../static/3d_printed_parts'
</script>
<template>
<div>
<Accordion v-for="parts in printed_parts.hmds" class="mb-4">
<template v-slot:title>
<span class="font-semibold text-xl">{{ parts.hmd }}</span>
</template>
<template v-slot:content>
<div>
<span class="">
<blockquote>
<ul style="list-style: none;">
<p v-if="parts.hyper_links != NULL && parts.hyper_links != ''"
v-for="hyper_link in parts.hyper_links">
<a :href="hyper_link.url" target="_blank">{{ hyper_link.desc }}</a>
</p>
<li v-for="part in parts.parts" :key="part">{{ part }}</li>
</ul>
</blockquote>
</span>
</div>
</template>
</Accordion>
</div>
</template>