Hackerspace Ventres mous - Mot-clé - arduinoVentres mous est un hackerspace à Rouen. Tous les lundis soir, nous développons, faisons de l'administration systèmes, de l'électronique, des bidouillages et des bricolages qui ont même inspiré Mc Gyver. Arduino Raspberry pi. Nous débattons sur nos préférences entre LINUX et BSD.2022-11-30T08:59:44+01:00urn:md5:9aeab4d75d94b55f491d1b8e41db6777DotclearRobot suiveur de ligne (doc)urn:md5:09ff5b23361a195c35371c9dc4829cb22019-04-22T21:01:00+02:002019-04-22T21:52:06+02:00gniearkProjets - réalisations - documentationsarduinoélectronique <p>Voici (enfin) les schémas et explications pour le robot suiveur de ligne, qu'on a (tenté) de faire construire aux participants de l'atelier d'initiation à l'électronique il y a déjà plusieurs semaines.</p>
<p>Afin que vous compreniez certains choix, voici un rappel des contraintes:
Le but n'était pas de faire le méga robot suiveur de ligne, mais de concevoir un kit qui pourrait être monté en une soirée par des novices. D'où certains choix allant vers la simplicité au détriment des capacités.</p>
<p>Le voici une fois monté:</p>
<p><img src="https://www.ventresmous.fr/public/lineFollower/.P_20190220_230656_m.jpg" alt="P_20190220_230656.jpg" style="display:table; margin:0 auto;" title="P_20190220_230656.jpg, avr. 2019" /></p>
<h3>Principe de fonctionnement</h3>
<p>Deux photoresistances frôlent le sol. Pour chacune d'entre elles:
Lorsqu'elle est au dessus de la ligne noire, elle reçoit moins de lumière. Sa valeur de résistance est modifiée.</p>
<p><img src="https://www.ventresmous.fr/public/lineFollower/principe.svg" alt="principe.svg" style="display:table; margin:0 auto;" title="principe.svg, avr. 2019" /></p>
<p>En fonction des situations l'arduino déclenchera les moteurs de manière à avancer ou tourner.</p>
<p><a href="https://www.ventresmous.fr/public/lineFollower/nuit-des-robots-1.pdf">Le diaporama d'introduction lors de la soirée peut être consulté ici.</a></p>
<h3>Châssis</h3>
<p>Les fichiers 3d Pour imprimer le châssis sont disponible par là:</p>
<p><a href="https://git.ventresmous.fr/VentresMous/lineFollowerBot/src/master/chassis" hreflang="fr">https://git.ventresmous.fr/VentresMous/lineFollowerBot/src/master/chassis</a></p>
<p><img src="https://www.ventresmous.fr/public/lineFollower/.chassis_m.png" alt="chassis.png" style="display:table; margin:0 auto;" title="chassis.png, avr. 2019" /></p>
<h3>Électronique</h3>
<p>Voici le schéma électronique recto verso (pour assemblage sur une plaque de prototypage à pastilles):</p>
<p><img src="https://www.ventresmous.fr/public/lineFollower/robot-soudure-composants-v2.svg" alt="robot-soudure-composants-v2.svg" style="display:table; margin:0 auto;" title="robot-soudure-composants-v2.svg, avr. 2019" /></p>
<p><a href="https://www.ventresmous.fr/public/lineFollower/notice.pdf">Ce PDF contient des instructions pas à pas</a>.</p>
<h3>Code arduino</h3>
<p>Le code arduino très simplifié et très commenté:</p>
<pre class="brush: c">// lineFollowerBot.ino
// Programme basique permettant à un robot de suivre une ligne dessinée au sol.
//
// Un projet du hackerspace Ventres Mous.
// =============================================================================
//
// IDENTIFICATION DES BROCHES DE L’ARDUINO UTILISÉES PAR LE PROJET
//
// =============================================================================
// Chaque broche de l’Arduino est identifiée par un numéro. Afin de faciliter
// la lecture du code, on leur donne des noms parlants.
// Broches sur lesquelles les moteurs sont connectés.
// Ce sont des broches de sortie numériques.
#define MOTEUR_GAUCHE 2
#define MOTEUR_DROITE 8
// Broches sur lesquelles les capteurs sont connectés.
// Ce sont des broches de lecture analogique.
#define CAPTEUR_GAUCHE A0
#define CAPTEUR_DROITE A1
// Broches sur lesquelles les leds de suivi d’étalonnage sont connectées.
// Ce sont des broches de sortie numériques.
#define ETALONNAGE_LED_GAUCHE 4
#define ETALONNAGE_LED_DROITE 5
// Broche sur laquelle le bouton d’étalonnage est connecté.
// C’est une broche de lecture numérique.
#define ETALONNAGE_BOUTON 12
// Les 2 états possible du bouton d’étalonnage : pressé et relevé.
#define BOUTON_PRESSE 1
#define BOUTON_RELEVE 0
// Variables utilisées pour définir les seuils de détection des capteurs. Les
// seuils sont réglés à 200 par défaut.
int seuil_gauche = 200;
int seuil_droite = 200;
// =============================================================================
//
// INITIALISATION DES BROCHES DE L’ARDUINO
//
// =============================================================================
// Cette fonction est exécutée une seule fois lors de l’allumage de l’Arduino.
// Son rôle consiste à configurer l’Arduino pour un usage précis, dans le cas
// présent pour un robot suiveur de ligne.
void setup() {
// Configure les broches des moteurs en sortie numérique. Ces broches seront
// soit à 0 volt, soit à 5 volts. Les broches de l’Arduino ne sont pas faites
// pour alimenter un moteur, elles serviront à piloter des transistors qui,
// eux, alimenteront les moteurs.
pinMode(MOTEUR_GAUCHE, OUTPUT);
pinMode(MOTEUR_DROITE, OUTPUT);
// Configure les broches des leds de suivi d’étalonnage en sortie numérique.
// Les leds consomment très peu d’énergie, elles seront directement pilotées
// par les broches de l’Arduino.
pinMode(ETALONNAGE_LED_GAUCHE, OUTPUT);
pinMode(ETALONNAGE_LED_DROITE, OUTPUT);
// Configure la broche du bouton d’étalonnage en entrée numérique.
pinMode(ETALONNAGE_BOUTON, INPUT);
// Les broches analogiques des capteurs sont obligatoirement en mode lecture
// analogique. Il n’y a donc pas de réglage à faire sur ces broches.
Serial.begin(9600);
}
// =============================================================================
//
// GESTION DU BOUTON D’ÉTALONNAGE
//
// =============================================================================
// Attend jusqu’à ce que le bouton d’étalonnage soit enfoncé ou relaché.
// Le paramètre etat peut prendre 2 valeurs : BOUTON_PRESSE et BOUTON_RELEVE.
// Si la fonction est appelée avec BOUTON_PRESSE, elle ne laissera le programme
// continuer que si le bouton est enfoncé. Si elle est appelée avec
// BOUTON_RELEVE, elle ne laissera le programme continuer que si le bouton est
// relevé.
void continuer_si(int etat) {
while(digitalRead(ETALONNAGE_BOUTON) != etat) delay(1);
}
// =============================================================================
//
// GESTION DES LEDS D’ÉTALONNAGE
//
// =============================================================================
// Fait clignoter les leds d’étalonnage pour indiquer à l’utilisateur que
// l’étalonnage est terminé.
void clignoter() {
// Fait clignoter 5 fois les leds. Clignoter consiste à allumer puis éteindre.
for(int b = 0; b < 5; b++) {
// Allume les leds d’étalonnage (les broches sont réglées à 5 volts).
digitalWrite(ETALONNAGE_LED_GAUCHE, HIGH);
digitalWrite(ETALONNAGE_LED_DROITE, HIGH);
// Attend 0,2 secondes (200 millisecondes).
delay(200);
// Éteint les leds d’étalonnage (les broches sont réglées à 0 volt).
digitalWrite(ETALONNAGE_LED_GAUCHE, LOW);
digitalWrite(ETALONNAGE_LED_DROITE, LOW);
// Attend 0,2 secondes (200 millisecondes).
delay(200);
}
}
// Éteint les deux leds d’étalonnage.
void eteindre() {
// Éteint les 2 leds de débogage en mettant leurs broches à 0 volt.
digitalWrite(ETALONNAGE_LED_GAUCHE, LOW);
digitalWrite(ETALONNAGE_LED_DROITE, LOW);
}
// =============================================================================
//
// ÉTALONNAGE DES CAPTEURS DU ROBOT
//
// =============================================================================
// Étalonne les capteurs pour établir la différence entre la ligne et le sol.
void etalonnage() {
// Variables qui vont recevoir les valeurs minimales et maximales des capteurs
// gauche et droite (L’unité importe peu). Elles permettent de garder en
// mémoire l’état du capteur afin de pouvoir effectuer des calculs plus tard.
int min_gauche;
int min_droite;
int max_gauche;
int max_droite;
// Arrête les 2 moteurs, le robot ne bouge plus.
moteur_arret();
// L’étalonnage est déclenché quand l’utilisateur appuie sur le bouton
// d’étalonnage. On attend que le bouton soit relaché pour étalonner.
continuer_si(BOUTON_RELEVE);
Serial.println("BOUTON_RELEVE");
// Lit l’état des deux capteurs.
min_gauche = analogRead(CAPTEUR_GAUCHE);
min_droite = analogRead(CAPTEUR_DROITE);
// Éteint les deux leds d’étalonnage.
eteindre();
// Attend que l’utilisateur clique sur le bouton (clic = appui + relache).
continuer_si(BOUTON_PRESSE);
continuer_si(BOUTON_RELEVE);
Serial.println("BOUTON_PRESSE_RELEVE");
// Lit l’état des deux capteurs.
max_gauche = analogRead(CAPTEUR_GAUCHE);
max_droite = analogRead(CAPTEUR_DROITE);
// Le seuil correspond à la valeur située entre les valeurs minimales et
// maximales que le capteur retourne.
seuil_gauche = (min_gauche + max_gauche) / 2;
seuil_droite = (min_droite + max_droite) / 2;
Serial.println("FIN_ETALONNAGE");
clignoter();
}
// =============================================================================
//
// GESTION DES DEUX MOTEURS
//
// =============================================================================
// Arrête les deux moteurs. Le robot ne bouge plus.
void moteur_arret() {
Serial.println("ARRET_MOTEUR");
digitalWrite(MOTEUR_GAUCHE, LOW);
digitalWrite(MOTEUR_DROITE, LOW);
}
// Fait tourner le robot à droite.
void moteur_droite() {
// Pour tourner à droite, on bloque le côté droit et on fait avancer le côté
// gauche.
Serial.println("MOTEUR_DROITE");
digitalWrite(MOTEUR_GAUCHE,HIGH);
digitalWrite(MOTEUR_DROITE,LOW);
}
// Fait tourner le robot à gauche.
void moteur_gauche() {
// Pour tourner à gauche, on bloque le côté gauche et on fait avancer le côté
// droit.
Serial.println("MOTEUR_GAUCHE");
digitalWrite(MOTEUR_GAUCHE, LOW);
digitalWrite(MOTEUR_DROITE, HIGH);
}
// Fait tourner les deux moteurs. Le robot avance.
void moteur_avance() {
Serial.println("MOTEUR_AVANCE");
digitalWrite(MOTEUR_GAUCHE, HIGH);
digitalWrite(MOTEUR_DROITE, HIGH);
}
// =============================================================================
//
// BOUCLE PRINCIPALE
//
// =============================================================================
// La fonction loop est appelée en boucle par l’Arduino. Un Arduino est prévu
// pour ce genre de tâche : exclusive et répétitive.
// Le programme considère que le robot démarre la ligne entre les deux capteurs.
void loop() {
// Variables qui vont recevoir les valeurs des capteurs.
int valeur_gauche;
int valeur_droite;
// Si le bouton d’étalonnage est pressé, on lance l’étalonnage.
if(digitalRead(ETALONNAGE_BOUTON) == 1){
etalonnage();
}
// Lit l’état des deux capteurs.
valeur_gauche = analogRead(CAPTEUR_GAUCHE);
valeur_droite = analogRead(CAPTEUR_DROITE);
// Fait avancer le robot si les deux capteurs identifient le sol.
if((valeur_gauche < seuil_gauche) && (valeur_droite < seuil_droite)) {
moteur_avance();
return;
}
// Tourne à droite si le capteur de gauche identifie le sol et le capteur de
// droite identifie la ligne. Cela veut dire que le robot dévie à gauche par
// rapport à la ligne qu’il doit suivre. On corrige en tournant à droite
// jusqu’à ce que la ligne soit à nouveau entre les deux capteurs.
if((valeur_gauche < seuil_gauche) && (valeur_droite > seuil_droite)) {
moteur_droite();
// Attend que le capteur de droite identifie le sol.
while(analogRead(CAPTEUR_DROITE) > seuil_droite){
if(digitalRead(ETALONNAGE_BOUTON) == 1){
etalonnage();
break;
}
delay(1);
}
return;
}
// Tourne à gauche si le capteur de gauche identifie la ligne et le capteur de
// droite identifie le sol. Cela veut dire que le robot dévie à droite par
// rapport à la ligne qu’il doit suivre. On corrige en tournant à gauche
// jusqu’à ce que la ligne soit à nouveau entre les deux capteurs.
if((valeur_gauche > seuil_gauche) && (valeur_droite < seuil_droite)) {
moteur_gauche();
// Attend que le capteur de gauche identifie le sol.
while(analogRead(CAPTEUR_GAUCHE) > seuil_gauche){
if(digitalRead(ETALONNAGE_BOUTON) == 1){
etalonnage();
break;
}
delay(1);
}
return;
}
// Arrête le robot si les deux capteurs identifient chacun le sol. Cela veut
// dire que le robot a perdu la ligne, il est plus prudent de l’arrêter.
if((valeur_gauche > seuil_gauche) && (valeur_droite > seuil_droite)) {
moteur_arret();
return;
}
}</pre>Conception d'un kit d'initiation à l'électroniqueurn:md5:8d9435b8564711860563d504a37c0f112019-01-28T23:32:00+01:002019-01-28T23:32:00+01:00gniearkEvènementsarduinodsen <p>Le 25/02/2019 nous animerons dans le cadre d'un <a href="http://dsea.fr/programmedsen.php">Doctorat sauvage en numérique</a> , un atelier d'initiation à l'électronique, et la programation d'un Arduino.</p>
<p>Les participants auront à assembler, faire le circuit sur une plaque de prototypage, programmer un robot suiveur de ligne. (Plusieurs personnes par robot à construire, libre aux participants de s'arranger pour savoir qui repart avec le robot)</p>
<p>Le défi préalable à cet atelier était de concevoir un kit robot ludique qui:</p>
<ul>
<li>Soit réalisable en moins de 4 heures en comptant le temps pour les indications, la formation des groupes, les tests.</li>
<li>Initie à des techniques que les participants pourront réutiliser à la maison. Donc hormis un pistolet à colle, un fer à souder et un tourne-vis, aucun autre outil ne doit être à utiliser.</li>
<li>A des possibilités d'amélioration.</li>
</ul>
<p>La conception du kit est finie. Voici le prototype:</p>
<p><a href="https://www.ventresmous.fr/public/Dxd2Ma1W0AA0dWx.jpeg" title="Dxd2Ma1W0AA0dWx.jpeg"><img src="https://www.ventresmous.fr/public/.Dxd2Ma1W0AA0dWx_m.jpg" alt="Dxd2Ma1W0AA0dWx.jpeg" title="Dxd2Ma1W0AA0dWx.jpeg, janv. 2019" /></a></p>
<p>Reste à faire:</p>
<ul>
<li>Mettre à jour schéma électronique sur le git</li>
<li>Rédiger la documentation de montage.</li>
<li>Commander les pièces pour composer les kits.</li>
</ul>
<p>pour la conception du kit, ça se passe par là: <a href="https://git.ventresmous.fr/VentresMous/lineFollowerBot">Dépot Gogs LineFolderBot</a>.</p>
<p>Cher lecteur, si cet atelier vous intéresse, RDV le 25 février!</p>Détecteur d'humidité qui déclenche l'arrosage.urn:md5:e08210d12b347856969afcccb03520ba2017-03-08T18:32:00+01:002017-03-09T09:27:03+01:00gniearkPodcasts audio ou vidéosarduinoélectronique <p><img src="https://www.ventresmous.fr/public/imagesEnVrac/.bandeau-arrosage_m.jpg" alt="bandeau-arrosage.jpg" style="display:table; margin:0 auto;" title="bandeau-arrosage.jpg, mar. 2017" /></p>
<p>Avec deux clous, nous créons un détecteur d'humidité. La valeur est lue par un Arduino qui déclenche l'arrosage de la plante.</p>
<p>Voici le déroulement de la création du prototype de ce système en vidéo. Nous l'avons enregistré lors du Hackerspace:</p>
<p><a href="https://www.youtube.com/watch?v=9QKTiv2h9RY"><img src="https://www.ventresmous.fr/public/imagesEnVrac/.apercu-youtube_m.png" alt="" /></a></p>
<p>Ingrédients:</p>
<ul>
<li>Deux clous</li>
<li><a href="https://www.qwant.com/?q=DC%2012V%20Normalement%20Ferm%C3%A9%20%C3%A9lectrovanne%20D%27eau%20Pour%20Distributeur%20Purificateur%20&t=web" hreflang="fr">Une électro-vanne 12V DC</a> (entre 6 et 7 euros en fonction du vendeur)</li>
<li>Deux résistances</li>
<li>Un arduino</li>
<li>Un transistor NPN TIP 1026</li>
<li>De l'eau</li>
</ul>
<p>Voici le schéma:</p>
<p><a href="https://www.ventresmous.fr/public/imagesEnVrac/IMG_20170308_223402.jpg" title="IMG_20170308_223402.jpg"><img src="https://www.ventresmous.fr/public/imagesEnVrac/.IMG_20170308_223402_m.jpg" alt="IMG_20170308_223402.jpg" style="display:table; margin:0 auto;" title="IMG_20170308_223402.jpg, mar. 2017" /></a></p>
<p>Voici le code arduino Utilisé lors de la POC:</p>
<pre class="brush: csharp">/*
* POC base de code Arduino
* pilotage d'une vanne en fonction de l'humidité
*
* By VentresMous - Zigazou - https://www.ventresmous.fr/
* Licensed under the Do What The Fuck You Want to Public License
* Without any Warranty
*/
int analogPin = 0; //Pin servant à la mesure sur le pont diviseur de tension
int vanne = 13; //Pin reliée au transistor pour pilotyer la vanne
int raw = 0; // variable to store the raw input value
void ouvreVanne() {
digitalWrite(vanne, HIGH);
}
void fermeVanne() {
digitalWrite(vanne, LOW);
}
void setup() {
Serial.begin(9600);
pinMode(vanne, OUTPUT);
fermeVanne();
}
void loop() {
raw = analogRead(analogPin);
Serial.print("Voltage: ");
Serial.println(raw);
if(raw > 60) {
ouvreVanne();
delay(3000);
fermeVanne();
}
delay(2000);
}</pre>Création d'un disque de Nipkow (télévision mécanique)urn:md5:46cece59a3ee5645df49b276565d083f2016-11-16T22:59:00+01:002016-11-27T21:45:27+01:00gniearkProjets - réalisations - documentationsarduinoNipkowtélévisionélectronique <p>Ce projet né au au hackerspace consiste en la création d'une télévision mécanique, via le principe du disque de Nipkow.</p>
<p>Une lampe ayant pour forme deux arcs de cercle et deux morceaux de rayon s'allume aux bons moments pour illuminer dans les trous du disque qui tourne... erf non c'est trop galère à expliquer, voici la page <a href="https://fr.wikipedia.org/wiki/Disque_de_Nipkow" hreflang="fr">Wikipedia sur le disque de Nikpow</a> et <a href="https://www.aleph99.info/La-naissance-de-la-television.html" hreflang="fr">cette vidéo explique assez bien le principe</a></p>
<p>Maintenant que vous avez compris le principe, voyons la manière dont nous allons tenter de le réaliser, puis l'état d'avancement.</p>
<h3>Descriptif rapide</h3>
<p><img src="https://www.ventresmous.fr/public/Nipkow/.nip_m.png" alt="nip.png" title="nip.png, nov. 2016" /></p>
<p>Sur l'image 3D ci dessus:</p>
<ul>
<li>Un moteur courant continu qui entraîne un Vinyle<sup>[<a href="https://www.ventresmous.fr/post/2016/11/16/Cr%C3%A9ation-d-un-disque-de-Nipkow-%28t%C3%A9l%C3%A9vision-m%C3%A9canique%29#wiki-footnote-1" id="rev-wiki-footnote-1">1</a>]</sup> percé de trous pour en faire un disque de Nipkow</li>
<li>Le moteur est fixé sur son alimentation (un boitier ATX)</li>
<li>Un bras tient une fourche optique (non représentée sur l'image). Elle permettra que l'arduino puisse mesurer la durée de rotation. Dans la programmation on estimera que le temps de rotation est égal à celui de la rotation précédente. Donc si la lampe doit s'allumer lorsque le disque est à un angle de i°, elle le fera au temps: (i X tempsRotation / 360) secondes.</li>
<li>Une lampe ayant la forme adapté et un éclairage homogène</li>
</ul>
<h3>Réalisation</h3>
<h4>Fixer un disque vinyle sur l'axe de rotation d'un moteur cc, puis démonter et percer le boitier d'alimentation ATX afin de pouvoir fixer le moteur.</h4>
<p><img src="https://www.ventresmous.fr/public/Nipkow/.IMG_20161001_171857_m.jpg" alt="IMG_20161001_171857.jpg" style="display:table; margin:0 auto;" title="IMG_20161001_171857.jpg, nov. 2016" /></p>
<p><img src="https://www.ventresmous.fr/public/Nipkow/.IMG_20161001_171943_m.jpg" alt="IMG_20161001_171943.jpg" style="display:table; margin:0 auto;" title="IMG_20161001_171943.jpg, nov. 2016" /></p>
<p>Le moteur ci dessus n'allait pas assez vite. On l'a accéléré en augmentant la tension jusqu'à 12V (ce que permet le boitier d'alim). bref RIP petit moteur de mécano.</p>
<h4>En parrallèle, la lampe.</h4>
<p>Elle est constituée de leds et d'une coque dessinée et imprimée avec une reprap.</p>
<p><img src="https://www.ventresmous.fr/public/Nipkow/.IMG_20161009_211440_m.jpg" alt="IMG_20161009_211440.jpg" style="display:table; margin:0 auto;" title="IMG_20161009_211440.jpg, nov. 2016" /></p>
<p><img src="https://www.ventresmous.fr/public/Nipkow/.IMG_20161009_211456_m.jpg" alt="IMG_20161009_211456.jpg" style="display:table; margin:0 auto;" title="IMG_20161009_211456.jpg, nov. 2016" /></p>
<p><img src="https://www.ventresmous.fr/public/Nipkow/.IMG_20161009_224304_m.jpg" alt="IMG_20161009_224304.jpg" style="display:table; margin:0 auto;" title="IMG_20161009_224304.jpg, nov. 2016" /></p>
<p><img src="https://www.ventresmous.fr/public/Nipkow/.IMG_20161009_224244_m.jpg" alt="Lampe à partir de leds pour disque de Nipkow" style="display:table; margin:0 auto;" title="Lampe à partir de leds pour disque de Nipkow, nov. 2016" /></p>
<h4>Circuit de connexion de la fourche optique:</h4>
<p>Prototypage:</p>
<p><img src="https://www.ventresmous.fr/public/Nipkow/.IMG_20161002_220921_m.jpg" alt="IMG_20161002_220921.jpg" style="display:table; margin:0 auto;" title="IMG_20161002_220921.jpg, nov. 2016" /></p>
<p>Réalisation du shield:</p>
<p><img src="https://www.ventresmous.fr/public/Nipkow/.IMG_20161002_225957_m.jpg" alt="IMG_20161002_225957.jpg" style="display:table; margin:0 auto;" title="IMG_20161002_225957.jpg, nov. 2016" /></p>
<h4>Avec un autre moteur</h4>
<p>J'ai dessiné et imprimé un carter permettant de fixer ces moteurs. <a href="http://www.thingiverse.com/thing:1858624">Publiés sur thingiverse</a>.</p>
<p><a href="https://www.ventresmous.fr/public/Nipkow/IMG_20161030_005539.jpg" title="IMG_20161030_005539.jpg"><img src="https://www.ventresmous.fr/public/Nipkow/.IMG_20161030_005539_m.jpg" alt="IMG_20161030_005539.jpg" style="display:table; margin:0 auto;" title="IMG_20161030_005539.jpg, nov. 2016" /></a></p>
<p>Ce type de moteur est assez rapide mais n'a pas assez de couple pour entraîner un vinyle. C'est un fail. Du coup, lundi dernier, Zigazou m'a légué sa perceuse pour que j'en récupère le moteur.</p>
<p><strong>A Suivre....</strong></p>
<p>Les premiers dessins 3D sont sur <a href="https://github.com/gnieark/Nipkow" hreflang="fr">ce dépot github</a>. Les schémas électroniques et le code arduino suivront.</p>
<div class="footnotes"><h4>Note</h4>
<p>[<a href="https://www.ventresmous.fr/post/2016/11/16/Cr%C3%A9ation-d-un-disque-de-Nipkow-%28t%C3%A9l%C3%A9vision-m%C3%A9canique%29#rev-wiki-footnote-1" id="wiki-footnote-1">1</a>] 50cts à la foire à tout</p></div>