Rep Price : Différence entre versions
(50 révisions intermédiaires par un autre utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{Projet | {{Projet | ||
− | |||
|name = Rep_Price | |name = Rep_Price | ||
|status = experimental | |status = experimental | ||
− | |||
|image = | |image = | ||
− | |||
|description = fabrication de disque pour platine jouet de type Fisher Price avec boîte à musique. | |description = fabrication de disque pour platine jouet de type Fisher Price avec boîte à musique. | ||
|license = GPL v3.0 | |license = GPL v3.0 | ||
− | |contributeurs = | + | |contributeurs = Thomas |
− | | | + | |ingrédients = PLA, code, Processing, openSCAD |
− | |||
|url = | |url = | ||
}} | }} | ||
Ligne 17 : | Ligne 13 : | ||
== Concept == | == Concept == | ||
− | Au début des années 1970, Fisher Price | + | Au début des années 1970, Fisher Price met en vente son magnifique 'record player': tourne disque qui permet de lire des chansons au doux son mécanique des lames métalliques de la boite à musique embarquée dans le bras de lecture. |
+ | [[File:recordPlayer.jpg|border|360px|le Record Player Fisher Price]] | ||
+ | |||
− | |||
https://fr.wikipedia.org/wiki/Bo%C3%AEte_%C3%A0_musique | https://fr.wikipedia.org/wiki/Bo%C3%AEte_%C3%A0_musique | ||
+ | |||
+ | Parmi les petites ritournelles présentes sur les disques, on trouve des tubes intemporels pour les nenfants: vive le vent, souris verte et autres hymnes enfantins. | ||
+ | |||
+ | Pour '''''Rep Price''''' l'idée est de pouvoir produire de nouveaux disques sur lesquels serait imprimée les talents d'aujourd'hui: britney spears, justin bieber ou encore la fouine ! | ||
+ | |||
+ | (À noter que fisher price réédite ses record player pour la Noél 2012 ! c'est dire la puissance intemporelle de ces petites machines : http://www.perpetualkid.com/fisher-price-record-player.aspx) | ||
+ | |||
+ | Comme les idées sont dans l'air, et que les inventions ne sont pas issues de l'esprit de quelques génies romantiques mais de travaux collectifs et d'échanges entre 'bidouilleurs', catalysé aujourd'hui par Internet (l'Histoire cependant retiendra un nom pour la postérité c'est plus simple pour les manuels scolaires), le jour ou j'ai décidé de graver mon premier disque pour le ''Record Player'', un type à mis cette vidéo en ligne : http://hackaday.com/2012/05/24/fisher-price-record-player-plays-stairway-to-heaven/ | ||
+ | |||
+ | Le travail était déjà fait... :-/ | ||
+ | |||
+ | Tout de même ''fred27'' a partagé une documentation pour réaliser à son tour un magnifique disque, ici sur intstructables: | ||
+ | http://www.instructables.com/id/Custom-records-for-a-70s-toy-record-player/?ALLSTEPS | ||
+ | |||
+ | Merci à lui ! | ||
+ | |||
+ | Mais heureusement pour nous, ''fred27'' a donné de quoi faire tout ça en utilisant un logiciel propriétaire fonctionnant sur vindoze !! | ||
+ | |||
+ | Super, tout n'était donc pas perdu pour nous, il nous restait à faire une version ''libre'' pour les mellowmans amateurs de pingouins. | ||
+ | |||
+ | == Expérimentations == | ||
+ | |||
+ | J'ai tout d'abord tenté de réaliser un disque en utilisant la [[ReprapPrusa]] de PiNG ainsi qu'[[OpenScad]] pour créer la forme initiale. | ||
+ | |||
+ | Voici ici le code utilisé pour imprimer mon premier modèle de disque: | ||
+ | |||
+ | <code> | ||
+ | //REP_PRICE v.0.1 | ||
+ | //Copyright (C) 2012 ((Thomas Bernardi)) | ||
+ | // | ||
+ | //Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon | ||
+ | //les termes de la Licence Publique Générale GNU publiée par la Free Software //Foundation | ||
+ | //(version 2 ou bien toute autre version ultérieure choisie par vous). | ||
+ | |||
+ | //Ce programme est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE, | ||
+ | //ni explicite ni implicite, y compris les garanties de commercialisation ou //d'adaptation | ||
+ | //dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails. | ||
+ | |||
+ | //Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même temps que ce programme ; | ||
+ | //si ce n'est pas le cas, écrivez à la Free Software //Foundation, Inc., 59 Temple Place, Suite 330, | ||
+ | //Boston, MA 02111-1307, États-Unis. | ||
+ | |||
+ | rayonDisque=60.5; | ||
+ | paroi = 0.5; | ||
+ | $fn = 75; // pour affiner les contours (nbr de facettes) dans tout le prog | ||
+ | |||
+ | |||
+ | // méthode pour construire les 11 pistes | ||
+ | module piste(rayon){ | ||
+ | |||
+ | translate([0,0,3]){ | ||
+ | difference(){ | ||
+ | cylinder(r=rayon, h=2); | ||
+ | cylinder(r=(rayon-paroi), h=2.1); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | // on tire des valeurs aléatoires entre 0 et 360 degré | ||
+ | randomVal = rands(0, 360, 6, rayon); | ||
+ | randomVal2 = rands(0, 360, 6, rayon+2); | ||
+ | |||
+ | // je place des dents de façon aléatoire | ||
+ | for( i = [0 : 5]){ | ||
+ | dents(rayon, randomVal[i]); //dent d'un côté de la piste | ||
+ | dents(rayon-1.4, randomVal2[i]); //dent de l'autre côté | ||
+ | echo(randomVal[i]); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | // création d'un module pour les 'dents' | ||
+ | module dents(xPos, angle){ | ||
+ | color([255,0,0]){ | ||
+ | rotate(a=[0,0,angle]){ | ||
+ | translate([xPos, 0, 3]){ | ||
+ | cube([1.4, 1, 2]); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | //echo( "Random Vector: ",angle, "xPos: ", xPos); | ||
+ | } | ||
+ | |||
+ | |||
+ | //---------------------------------------------------------- | ||
+ | // dessin de la forme principale | ||
+ | difference(){ | ||
+ | union(){ | ||
+ | // le disque principal | ||
+ | cylinder(r=rayonDisque,h=3); | ||
+ | |||
+ | // l'anneau extérieur | ||
+ | translate([0,0,3]){ | ||
+ | difference(){ | ||
+ | cylinder(r=rayonDisque, h=2); | ||
+ | cylinder(r=(rayonDisque-2.4), h=2.1); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // l'anneau intérieur | ||
+ | translate([0,0,3]){ | ||
+ | difference(){ | ||
+ | cylinder(r=26.7, h=2); | ||
+ | cylinder(r=(26.7-2.4), h=2.1); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // on execute la méthode piste avec une boucle | ||
+ | for (i = [58.1 : 2.9 : 29.59]) { | ||
+ | piste(i); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | // les perçage du milieu | ||
+ | union(){ | ||
+ | cylinder(r=3.2, h=8, center=true); | ||
+ | translate([21, 0, 0]){ | ||
+ | cylinder(r=1.3, h=8, center=true); | ||
+ | } | ||
+ | translate([0, 21, 0]){ | ||
+ | cylinder(r=1.3, h=8, center=true); | ||
+ | } | ||
+ | translate([-21, 0, 0]){ | ||
+ | cylinder(r=1.3, h=8, center=true); | ||
+ | } | ||
+ | translate([0, -21, 0]){ | ||
+ | cylinder(r=1.3, h=8, center=true); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | </code> | ||
+ | |||
+ | Pour l'instant le rendu d'impression avec la RepRap manque de précision, surement la qualité serait plus optimale avec la CNC... Une fois qu'elle sera réparée j'essaierai avec. | ||
+ | |||
+ | ==== Vinyles numériques imprimés ==== | ||
+ | |||
+ | Entre temps, une hackeuse (Amanda Ghassaei) a réussi à imprimer un vinyle avec une imprimante 3D: | ||
+ | |||
+ | http://www.rue89.com/zapnet/2012/12/27/pixies-nirvana-daft-punk-des-vinyles-crees-par-une-imprimante-3d-238137 | ||
+ | |||
+ | Le premier vinyle numérique (qualité audio très modeste), la plupart des vinyles étant analogiques et reproduisant fidèlement le son. | ||
+ | |||
+ | La bonne nouvelle, c'est que le travail d'encodage a été réalisé avec Processing et la librairie modelbuilder : | ||
+ | |||
+ | http://www.instructables.com/id/3D-Printed-Record/step7/Make-Your-Own-Records/ | ||
+ | |||
+ | ==== Une version avec Processing ? ==== | ||
+ | |||
+ | Une librairie développée par Marius Watz pour Processing permet d'exporter des fichiers .STL : | ||
+ | |||
+ | http://workshop.evolutionzone.com/2011/04/06/code-modelbuilder-library-public-release/ | ||
+ | |||
+ | Après moult tentatives pour utiliser la librairie modelBuilder dans Processing 2b3, Processing 2b6 et Processing 2b7, je suis confronté à des problèmes de compatibilité : | ||
+ | |||
+ | <code>NoSuchMethodError: You may be using a library that's incompatible to this version of Processing</code> | ||
+ | |||
+ | Le problème viendrait de la classe MouseNav3D.java qui utilise une classe Java plus usité dans la dernière version de Processing | ||
+ | |||
+ | <tt> Event Handling has changed significantly in 2.0b7. Due to necessary changes in the OpenGL renderer, and to provide better compatibility with Android and JavaScript modes, we've added actual MouseEvent and KeyEvent classes to Processing. In previous releases, the MouseEvent and KeyEvent classes referred to the automatically imported "java.awt.MouseEvent" and "java.awt.KeyEvent". This is no longer the case, so your code will behave a little differently. The OpenGL renderer no longer uses AWT (and therefore doesn't use java.awt events), so it's a necessary change there. On Android, there's no such thing as java.awt. More details on this as I have time to write them up. | ||
+ | |||
+ | This also has implications for libraries, and the library developer pages have more information. | ||
+ | |||
+ | </tt> | ||
+ | |||
+ | Je repasse donc avec succès sur Processing 1.5.1 | ||
+ | |||
+ | Premier essai d'un export d'une forme simple en .STL | ||
+ | |||
+ | <code> | ||
+ | import unlekker.util.*; | ||
+ | import unlekker.modelbuilder.*; | ||
+ | |||
+ | MouseNav3D nav; | ||
+ | UGeometry model; | ||
+ | |||
+ | void setup () { | ||
+ | size(600, 600, P3D); | ||
+ | |||
+ | nav = new MouseNav3D(this); | ||
+ | nav.trans.set(width/2, height/2, 0); | ||
+ | |||
+ | model = Primitive.cylinder(121, 5, 100, true); | ||
+ | } | ||
+ | |||
+ | void draw() { | ||
+ | background(100); | ||
+ | |||
+ | lights(); | ||
+ | |||
+ | // call MouseNav3D transforms | ||
+ | nav.doTransforms(); | ||
+ | fill(255); | ||
+ | |||
+ | model.draw(this); | ||
+ | } | ||
+ | |||
+ | public void mouseDragged() { | ||
+ | nav.mouseDragged(); | ||
+ | } | ||
+ | |||
+ | |||
+ | public void keyPressed() { | ||
+ | nav.keyPressed(); | ||
+ | |||
+ | if(key=='s') { | ||
+ | model.writeSTL(this, "sphere.stl"); | ||
+ | } | ||
+ | } | ||
+ | </code> |
Version actuelle en date du 19 juin 2014 à 09:31
fabrication de disque pour platine jouet de type Fisher Price avec boîte à musique.
Contributeur·ice·s
Statut du projet
experimental
Statut de la publication
License
GPL v3.0
Inspiration
Fichiers source
Machines
Matériaux
Lien
Concept
Au début des années 1970, Fisher Price met en vente son magnifique 'record player': tourne disque qui permet de lire des chansons au doux son mécanique des lames métalliques de la boite à musique embarquée dans le bras de lecture.
https://fr.wikipedia.org/wiki/Bo%C3%AEte_%C3%A0_musique
Parmi les petites ritournelles présentes sur les disques, on trouve des tubes intemporels pour les nenfants: vive le vent, souris verte et autres hymnes enfantins.
Pour Rep Price l'idée est de pouvoir produire de nouveaux disques sur lesquels serait imprimée les talents d'aujourd'hui: britney spears, justin bieber ou encore la fouine !
(À noter que fisher price réédite ses record player pour la Noél 2012 ! c'est dire la puissance intemporelle de ces petites machines : http://www.perpetualkid.com/fisher-price-record-player.aspx)
Comme les idées sont dans l'air, et que les inventions ne sont pas issues de l'esprit de quelques génies romantiques mais de travaux collectifs et d'échanges entre 'bidouilleurs', catalysé aujourd'hui par Internet (l'Histoire cependant retiendra un nom pour la postérité c'est plus simple pour les manuels scolaires), le jour ou j'ai décidé de graver mon premier disque pour le Record Player, un type à mis cette vidéo en ligne : http://hackaday.com/2012/05/24/fisher-price-record-player-plays-stairway-to-heaven/
Le travail était déjà fait... :-/
Tout de même fred27 a partagé une documentation pour réaliser à son tour un magnifique disque, ici sur intstructables: http://www.instructables.com/id/Custom-records-for-a-70s-toy-record-player/?ALLSTEPS
Merci à lui !
Mais heureusement pour nous, fred27 a donné de quoi faire tout ça en utilisant un logiciel propriétaire fonctionnant sur vindoze !!
Super, tout n'était donc pas perdu pour nous, il nous restait à faire une version libre pour les mellowmans amateurs de pingouins.
Expérimentations
J'ai tout d'abord tenté de réaliser un disque en utilisant la ReprapPrusa de PiNG ainsi qu'OpenScad pour créer la forme initiale.
Voici ici le code utilisé pour imprimer mon premier modèle de disque:
//REP_PRICE v.0.1
//Copyright (C) 2012 ((Thomas Bernardi))
//
//Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon
//les termes de la Licence Publique Générale GNU publiée par la Free Software //Foundation
//(version 2 ou bien toute autre version ultérieure choisie par vous).
//Ce programme est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE, //ni explicite ni implicite, y compris les garanties de commercialisation ou //d'adaptation //dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails.
//Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même temps que ce programme ; //si ce n'est pas le cas, écrivez à la Free Software //Foundation, Inc., 59 Temple Place, Suite 330, //Boston, MA 02111-1307, États-Unis.
rayonDisque=60.5; paroi = 0.5; $fn = 75; // pour affiner les contours (nbr de facettes) dans tout le prog
// méthode pour construire les 11 pistes
module piste(rayon){
translate([0,0,3]){ difference(){ cylinder(r=rayon, h=2); cylinder(r=(rayon-paroi), h=2.1); }
} // on tire des valeurs aléatoires entre 0 et 360 degré randomVal = rands(0, 360, 6, rayon); randomVal2 = rands(0, 360, 6, rayon+2);
// je place des dents de façon aléatoire for( i = [0 : 5]){ dents(rayon, randomVal[i]); //dent d'un côté de la piste dents(rayon-1.4, randomVal2[i]); //dent de l'autre côté echo(randomVal[i]); }
} // création d'un module pour les 'dents' module dents(xPos, angle){ color([255,0,0]){ rotate(a=[0,0,angle]){ translate([xPos, 0, 3]){ cube([1.4, 1, 2]); } } } //echo( "Random Vector: ",angle, "xPos: ", xPos); }
//----------------------------------------------------------
// dessin de la forme principale
difference(){
union(){
// le disque principal
cylinder(r=rayonDisque,h=3);
// l'anneau extérieur translate([0,0,3]){ difference(){ cylinder(r=rayonDisque, h=2); cylinder(r=(rayonDisque-2.4), h=2.1); } }
// l'anneau intérieur translate([0,0,3]){ difference(){ cylinder(r=26.7, h=2); cylinder(r=(26.7-2.4), h=2.1); } }
// on execute la méthode piste avec une boucle for (i = [58.1 : 2.9 : 29.59]) { piste(i); }
} // les perçage du milieu union(){ cylinder(r=3.2, h=8, center=true); translate([21, 0, 0]){ cylinder(r=1.3, h=8, center=true); } translate([0, 21, 0]){ cylinder(r=1.3, h=8, center=true); } translate([-21, 0, 0]){ cylinder(r=1.3, h=8, center=true); } translate([0, -21, 0]){ cylinder(r=1.3, h=8, center=true); } } }
Pour l'instant le rendu d'impression avec la RepRap manque de précision, surement la qualité serait plus optimale avec la CNC... Une fois qu'elle sera réparée j'essaierai avec.
Vinyles numériques imprimés
Entre temps, une hackeuse (Amanda Ghassaei) a réussi à imprimer un vinyle avec une imprimante 3D:
Le premier vinyle numérique (qualité audio très modeste), la plupart des vinyles étant analogiques et reproduisant fidèlement le son.
La bonne nouvelle, c'est que le travail d'encodage a été réalisé avec Processing et la librairie modelbuilder :
http://www.instructables.com/id/3D-Printed-Record/step7/Make-Your-Own-Records/
Une version avec Processing ?
Une librairie développée par Marius Watz pour Processing permet d'exporter des fichiers .STL :
http://workshop.evolutionzone.com/2011/04/06/code-modelbuilder-library-public-release/
Après moult tentatives pour utiliser la librairie modelBuilder dans Processing 2b3, Processing 2b6 et Processing 2b7, je suis confronté à des problèmes de compatibilité :
NoSuchMethodError: You may be using a library that's incompatible to this version of Processing
Le problème viendrait de la classe MouseNav3D.java qui utilise une classe Java plus usité dans la dernière version de Processing
Event Handling has changed significantly in 2.0b7. Due to necessary changes in the OpenGL renderer, and to provide better compatibility with Android and JavaScript modes, we've added actual MouseEvent and KeyEvent classes to Processing. In previous releases, the MouseEvent and KeyEvent classes referred to the automatically imported "java.awt.MouseEvent" and "java.awt.KeyEvent". This is no longer the case, so your code will behave a little differently. The OpenGL renderer no longer uses AWT (and therefore doesn't use java.awt events), so it's a necessary change there. On Android, there's no such thing as java.awt. More details on this as I have time to write them up.
This also has implications for libraries, and the library developer pages have more information.
Je repasse donc avec succès sur Processing 1.5.1
Premier essai d'un export d'une forme simple en .STL
import unlekker.util.*;
import unlekker.modelbuilder.*;
MouseNav3D nav; UGeometry model;
void setup () {
size(600, 600, P3D);
nav = new MouseNav3D(this); nav.trans.set(width/2, height/2, 0); model = Primitive.cylinder(121, 5, 100, true);
}
void draw() {
background(100);
lights();
// call MouseNav3D transforms nav.doTransforms(); fill(255);
model.draw(this);
}
public void mouseDragged() {
nav.mouseDragged();
}
public void keyPressed() {
nav.keyPressed();
if(key=='s') { model.writeSTL(this, "sphere.stl"); }
}