Projet OpenDwarfFortress

L’objectif de ce projet est de créer un clone open source du célèbre jeu Dwarf Fortress en améliorant l’interface tout en conservant la profondeur de jeu.

Pour l’instant ce projet possède un github dans lequel je posterai le code et un wiki sur lequel je commenterai le code.

Une fois le projet un peu développé et structuré, il serai bien de former une équipe de développement avec développeurs et graphistes pour améliorer les graphismes et ajouter du contenu, avis aux amateurs !

Fabriquer un mini ordinateur programmable à base d’Atmega328

J’ai toujours souhaité construire moi même mon propre ordinateur et écrire mon propre système d’exploitation à faire tourner dessus. Je suis aujourd’hui en passe de réaliser ce rêve en utilisant un microcontrôleur (et non microprocesseur ) de carte arduino pour fabriquer une sorte de super calculatrice programmable.

AVERTISSEMENT : Ce projet n’est pas terminé, je ne peux donc pas poster les instructions complètes mais je vais néanmoins déjà décrire l’architecture générale de mon premier prototype pour donner des idées à ceux qui souhaiterai se lancer.

Le cœur de mon “ordinateur” est le microcontrôleur Atmega328p-pu, cela permet de “tricher un peu pour commencer en utilisant les librairies arduino”. J’utilise la librairie Ps2Keyboard pour gerer les entrées claviers, la librairie TVout pour afficher ma “user’s friendly console” sur un mini écran RCA pour regarder des films en voiture, librairie Tone pour générer du son et la librairie SD pour gérer la carte SD. Je n’utilise aucun shield ce qui signifie que j’utilise quelques résistances pour adapter les niveau de tension de la carte SD et du microcontrôleur (3,3v contre 5v), quelques résistances pour le signal TV et un potentiomètre pour le speaker.

Le montage est plutôt simple et avec un peu de bonne volonté on s’en sort très bien. Du coté programmation, il suffit de tirer trois fils de votre carte arduino à votre breadboard pour la programmation (TxT, RxT, -).

Pour l’instant, mon programme m’affiche un beau menu en noir et blanc avec une chouette image de GNU bricoleur. Je peux, au choix, jouer du piano sur mon clavier, taper du texte et le stocker dans la carte SD, écouter des musiques pré-enregistrées, jouer à un jeu du style moon-buggy (sous linux) et et et …. utiliser un interpréteur de commande maison!!! Cocorico!!!

Au final, j’espère être capable d’écrire des vrai programmes interprétés dans mon langage propre mais je rencontre des difficultés au niveau de la mémoire programme de l’Atmega qui est insuffisante (32Ko). Je pense que je vais devoir implémenter mon interpréteur plus bas niveau et enregistrer les différentes fonctionnalité citée plus haut dans le langage interprété sur la carte SD  afin de libérer de la mémoire programme.

Voili voilou, dès que j’ai terminé, j’essaierai de poster ici un tutoriel détaillé comme pour l’imprimante 3D et comme je devrai le faire pour mon astuce permettant de diriger la souris grâce aux mouvements des mains capté par une cameras.

 

Tout faire avec son Raspberry Pi

Depuis que j’ai mon Raspberry Pi, je me suis rendu compte qu’avec un peu de persévérance et d’astuce, on peut vraiment tout faire avec son mini ordinateur.

Voila donc la liste des meilleurs programmes et logiciels pour le Raspberry Pi. Il sont tous utilisables au quotidien si on accepte le fait que le Raspberry Pi n’est pas un “foudre de guerre”.

Les programmes sont rangé par catégories et sont installable via “sudo apt-get install nomduprog” en console ou via Synaptic qui tourne sur le Raspberry Pi mais qui est lent.

Programmation:(ma section préférée)

  • gcc et leafpad :pour la programmation en C et C++ (un peu austère mais fonctionnel);
  • codeblocks : pour la programmation en C et pas que, avec le support faciles des librairies, long au démarrage;
  • geany : idem en plus rapide, similaire à Notepad++  ;
  • python : pour programmer en python
  • qtcreator : petite manip pour linker le compilateur mais fonctionne très bien, long au démarrage;
  • scratch : mon petit frère est fan et c’est pas mal pour commencer;
  • arduino : bien sur, le célèbre IDE pour arduino;
  • … c’est tout ce dont j’ai besoin pour l’instant.

Internet:

  • dillo : dégrade un peu les pages internet mais charge rapidement, je l’utilise au quotidien;
  • netsurf : quand dillo rend le texte illisible;
  • sr et linx : LE navigateur en console pour les ascètes, excellent pour ceux qui n’ont qu’un terminal console;
  • midori : pour consulter ses mail, fonctionne parfaitement avec mailoo et bien avec gmail;
  • chromiun : un peu lourd mais permet d’utiliser les applications chrome;

Multimédia:

  • mocp : lecteur de musique en console parfait;
  • vlc : fonctionne mais consomme de la RAM et pas pour les vidéo;
  • omxplayer : fonctionne parfaitement pour les vidéo;
  • youtube-dl: pour télécharger des vidéo;
  • yt (ou whitney) : pour regarder des vidéo sur youtube en live (utilise youtube-dl et omxplayer);
  • cdparanoia : pour ripper des CD;
  • radiotray : pour écouter les radio internet (fonctionne plus sur les dernières versions de Debian);
  • … et bien d’autres, j’allongerai la liste au fur et à mesure de mes découvertes.

Bureautique:

  • Word fonctionne (voir mon article);
  • abiword : suffisant pour du traitement de texte simple, lit les docx;
  • openoffice : un peu lourd mais très complet;
  • leafpad : pour les réfractaires au terminal (sinon nano) l’équivalent du bloc note;
  • terminator : pour diviser son terminal, on n’a pas inventé mieux pour avoir un bureau bien rangé!;
  • vim : je ne suis pas un adepte mais c’est très pratique;

Jeux: (je ne joue vraiment pas beaucoup et il y a des articles plus complet sur internet mais voila des trucs qui fonctionnent bien)

  • dosbox et snes9x : des émulateurs efficaces, pour snes9x, ne pas passer par aptitude et télécharger directement sur le site de l’auteur;
  • 2048 fonctionne en console, ça vas faire des heureux!!
    wget https://raw.githubusercontent.com/mevdschee/2048.c/master/2048.c
    gcc -o 2048 2048.c
    ./2048
  • golly : un jeu de la vie très évolué avec de nombreuses règles différentes;
  • openarena et quake : de nombreux tutos sur internet;

Emettre la radio avec son Raspberry Pi

Ce n’est pas mon projet à proprement parler et j’ai trouvé toutes les sources sur internet mais je trouve fantastique de pouvoir transformer son Raspberry Pi en emmetteur radio juste en faisant varier très rapidement l’état de tension d’un de ses GPIO servant alors d’antenne. Je trouve que ce projet n’est pas très présent sur internet c’est pourquoi je me permet de leur faire un petit peu de publicité. Je vous conseille donc d’aller sur google et de rechercher “radio raspberry pi” et de suivre les instructions, c’est très facile et amusant. EDIT : voici un lien vers le Wiki du projet, http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter

Transformer son Raspberry Pi en alarme

En utilisant quelques logiciels présents dans les dépôts de Debian, on peut transformer son Raspberry Pi en une excellente alarme. Ainsi, j’ai utilisé comme webcam un vieil appareil photo dont l’écran est cassé et j’ai installé le logiciel “motion” (sudo apt-get install motion). Je vous conseille de jeter un coup d’oeil sur le wiki pour comprendre toutes les options de configuration de motion. Une fois que vous l’avez configuré correctement (par exemple pour prendre deux photos et une vidéo de 30 secondes chaque fois qu’il détecte un mouvement, vous pouvez par exemple rédiger un petit script bash pour vous envoyer un mail d’alerte à l’aide de la commande mail (sudo apt-get install mail) avec les photos en pièce-jointe et afficher un petit message à l’écran du Rpi du genre “intru repéré” à l’aide de Xmessages.

Faire obéir son Rasberry Pi au doigt et à l’oeil (au doigt surtout!!!)

Vous vous demandez sûrement ce qui ce cache dans cette section vide au nom énigmatique. Il s’agit en fait d’un projet permettant à l’utilisateur du Raspberry Pi de manipuler (déplacer et cliquer) la souris grâce aux mouvements de sa main filmée par une webcam. Je vous rassure tout de suite, le projet a abouti et je posterai ici les sources et les explications dès que je trouverai un peu de temps pour nettoyer le code (quand j’aurai terminé mon imprimante 3D, en fait) Si vous vous demandez alors pourquoi je crée une section vide, c’est parce que cela peut vous donner une idée de projet, que cela me sert de pense-bête et que cela vous donnera peut-être envie de revenir sur ce site !

Fabriquer une imprimante 3D avec du matériel de récupération !

Vous ne savez pas quoi faire avec votre Raspberry Pi ? C’est étonnant, le Raspberry Pi offre tellement de possibilités ! Pour changer un peu des Media-Centers et des tutoriels expliquant comment préparer la carte SD, je vais vous présenter mon projet d’imprimante 3D entièrement conçue avec des matériaux de récupérations (bien que commandée par un Raspberry Pi). Cela peut vous paraître impossible mais il est relativement facile d’obtenir de modestes résultats sans gros investissements financiers.

Des exemples

Je vais donc vous présenter, étape par étape, avec les codes sources et des photos, comment j’ai réalisé mon prototype.
ATTENTION! : Mon projet n’est pas encore totalement abouti mais il est en très bonne voie. Les instructions complètes seront publiées quand j’en aurai le temps et quand tout fonctionnera parfaitement. En attendant, voila déjà un début pour vous donner une idée du projet et pour ceux qui sont pressés, voici un pack contenant mes codes sources:imprimante_arduino_4.zip.

Partie 1 : Présentation générale

Vous vous demandez sûrement comment il est possible de fabriquer une imprimante 3D sans dépenser une fortune en moteurs pas-à-pas et en contrôleurs. La solution est toute simple : des tiroirs de lecteurs CD !

tiroir

Le tiroir du lecteur CD

L’avantage des lecteurs CD (de récupération) est que chaque lecteur CD correspond à un axe de notre imprimante 3D. Il nous faudra donc 3 lecteurs CD, un pour chaque axe de notre imprimante (un axe étant une direction selon laquelle la tête d’impression, pourra se déplacer). Il peut sembler difficile de trouver trois lecteurs CD mais il suffit de ramasser quelques vieux ordinateurs-tours avant le passage des encombrants (les gens jettent n’importe quoi !!) pour obtenir une belle collection de lecteurs CD. Généralement le mécanisme du tiroir fonctionne encore même si le lecteur CD à l’air cassé et qu’il ne peut plus lire les CD. Pour optimiser le positionnement des lecteurs CD les uns par rapport aux autres, et après avoir fait quelques tests, il me semble qu’il est plus pratique d’assembler les lecteurs CD selon le schéma ci dessous.

Schéma d’assemblage

Les lecteurs CD en votre possession, il vous faudra trois relais, quelques résistances ou/et des potentiomètres, des transistors NPN, éventuellement des LED, des breadboards (plaques d’essais sans soudure), beaucoup de fil électrique, et beaucoup de courage pour faire le circuit de commande des moteurs. Vous aurez aussi besoin de carton, de scotch, et de petit matériel de bricolage pour faire l’assemblage final. Vous pouvez aussi utiliser des cartes relais manufacturées, mais j’ai préféré les faire moi-même car j’avais déjà des composants récupérés ici et là à la maison (… et c’est plus drôle !). Après, il ne reste plus qu’à brancher les entrées de votre “carte de relais” au Raspberry Pi et à programmer un logiciel qui gère l’impression et les mouvements des moteurs pour obtenir de magnifiques résultats.

emsemble
Le montage final

Bon et bien, yapuka !

 

Partie 2 : Fabrication de la partie mécanique/électronique de notre imprimante.

1 – Une fois en possession de vos lecteurs CD, repérer sur le circuit imprimé du lecteur où sont les bornes d’alimentation du moteur (qui est généralement soudé directement sur ledit circuit, auquel cas il faudra souder directement aux bornes) et y souder deux fils car nous allons alimenter le moteur nous-même afin de pouvoir commander précisément le sens et la durée de fonctionnement du moteur.
2 – Deux options s’ouvrent alors à vous:
-soit vous utilisez une carte de relais achetée toute faite et vous n’avez pas de problèmes (sachant qu’il me semble qu’il faut alimenter les moteurs en 6V)
-soit vous décidez de faire vous-même votre carte et les ennuis commencent. (J’ai fait tous mes tests avec des blocs de 4 piles de 1.5V car je n’avais pas d’alimentation suffisamment puissante). Vous pouvez d’abord brancher les moteurs pour vous assurer de leur bon fonctionnement. Il ne s’agit pas de moteurs pas-à-pas donc il n’y a pas de gestion complexe de l’alimentation mais il faut tout de même pouvoir démarrer, arrêter, et changer le sens de rotation des moteurs. J’ai tout d’abord pensé à un pont en H avec des transistors pour la commande des moteurs mais j’ai perdu beaucoup de temps sans parvenir à faire fonctionner ce montage pourtant simple et normalement efficace. J’arrive parfaitement à commander le moteur avec le Raspberry Pi et via un transistor mais lorsque que je commande le plus et le moins du moteur avec deux transistors cela ne fonctionne plus. Ce n’est pas un problème lié au genre du transistor (NPN/PNP) car j’ai fait des tests avec les deux. Je pense que c’est lié aux caractéristiques des transistors que j’ai utilisés, peut-être un problème lorsque l’on met la charge dans la branche émetteur des transistors.

pontenH

Un pont en H

En désespoir de cause, je me suis donc tourné vers des relais, commandés à travers un transistor et équipés d’une diode de roue libre, pour gérer le sens de rotation du moteur

Les schémas éléctriques

Voici le schéma. Les diodes de roue libre sont importantes mais pas indispensables : elles servent à faire circuler le courant en boucle jusqu’à atténuation de ce courant dans la bobine du relais lorsque celui-ci entre en commutation car des phénomènes transitoires se produisent lorsque l’on tente de couper brutalement le courant dans une bobine et c’est exactement ce que nous faisons lorsque nous commutons le relais. Lorsque votre carte de relais est prête, il peut-être intéressant de brancher les moteurs à cette carte via des potentiomètres pour essayer de ralentir un peu les moteurs (c’est toujours ça de gagné : plus le moteur ira lentement, plus notre imprimante sera précise). Pour ma part, je n’ai finalement pas mis de potentiomètre parce qu’ils me posaient des problèmes au fur et à mesure que mes piles s’usaient. J’avais réglé les potentiomètres à la limite de fonctionnement des moteurs, et la tension d’alimentation, en variant légèrement, ne permettait plus aux moteurs de démarrer à travers les potentiomètres. Cela provoquait des bugs incompréhensibles jusqu’à ce que j’ôte les potentiomètres de la breadboard (d’où l’avantage de faire le montage au brouillon sur une plaque d’essais sans soudure avant de le réaliser en dur sur une plaque de prototypage rapide).
3 – Faites des tests avec votre Rasberry Pi a l’aide de la librairie WiringPi (instruction d’installation sur le site de Drogon https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/ ) Vous pouvez vous faire un petit script bash rapide qui fait avancer / reculer les moteurs en boucle pour vous assurer que tout fonctionne et régler votre potentiomètre (éventuel) précisément. Ceci fait, vous pouvez déjà dessiner des carrés sur une feuille avec seulement deux lecteurs CD (l’un poussant l’autre selon l’axe des y, et l’autre modifiant la position du stylo selon l’axe des x). Mais vous ne pouvez malheureusement pas encore lever le stylo. Je vous conseille de monter le lecteur CD poussant le stylo sur un chariot de façon à réduire les frottements et à épargner un peu le lecteur de l’axe Y. J’ai réalisé mon chariot avec des trains d’atterrissage de LEGO (empruntés à mes petits frères). Une autre solution consiste à poser le lecteur de l’axe des x sur deux plaques de carton rigide (voire glacé) pouvant glisser l’une sur l’autre.

Le chariot pour le lecteur x

 

 

Partie 3 : monter le tout de façon propre

emsemble

Le montage final

La partie la plus facile !! Il est néanmoins important d’avoir un montage propre afin d’éviter les mauvais contacts et les courts circuits. J’ai monté les axes x et y sur une boite de ramette de papier dont j’ai agrandi le haut avec des plaques de carton dur scotchées solidement. Cela me permet de fixer mon axe z perpendiculairement aux deux autres et sous le crayon (remplacé plus tard par un pistolet à colle pour réaliser des objets 3D). En tout cas, il est maintenant possible de lever le crayon (en fait, baisser le plateau sur lequel est posée la feuille). Nous avons donc une super imprimante 2D Encore faut-il la programmer !

 

Partie 4 : Programmation du Raspberry Pi

Astuce rapide, j’ai branché mon imprimante via des dominos avec des connecteurs ce qui me permet d’arrêter facilement l’imprimante quand le programme plante et de déconnecter/connecter l’imprimante facilement pour la déplacer par exemple. Il est aussi possible de mettre un interrupteur sur le moins commun du Raspberry Pi ou de mettre un interrupteur sur l’alimentation de votre imprimante (pas pratique dans mon cas car j’utilise des blocs de piles différents pour les différents moteurs) ou de combiner différentes solutions. Ceci dit, entrons dans la partie programmation. Voici un pack contenant mes codes sources:imprimante_arduino_4.zip. J’ai choisi de modéliser la feuille comme un tableau dans les cases duquel nous allons tracer des petits point. Pour l’impression 3D, nous repasserons plusieurs fois sur la même feuille en descendant le plateau d’un cran à chaque fois. Pour commencer, j’ai réalisé un programme qui lit dans un fichier texte une matrice de 0 et de 1 préalablement enregistrée. Le prgramme imprime un point pour chaque “1”.
0000000000
0001111000
0001001000
0001111000
0001111000
0010110100
0100110010
0001001000
0010000100
0010000100
Dans ce programme, j’ai mélangé le langage C bas niveau pour gérer le tableau, la matrice de caractères que je rentre et des scripts bash pour incrémenter d’une unité la position des moteurs et manipuler le plateau. Il faut lancer l’exécutable C pour lancer l’impression. Le programme appellera lui-même les scripts bash nécessaires en fonction de la façon dont il interprète la matrice. Cela permet d’avoir une configuration souple et de ne pas avoir à recompiler le programme à chaque modification. Il suffit de modifier les scripts ce qui est très facile. Le programme C lance les scripts avec la commande system(/chemins/script); qui émule un terminal linux. La gestion du temps pour le déplacement des moteurs est effectuée par les scripts avec la commande wait TPS; C’est ce que j’ai trouvé de plus précis mais ce n’est pas terrible. Le mieux serait d’utiliser une carte arduino pour une gestion du temps parfaite commandé par le Raspberry Pi pour l’interface homme-imprimante. J’essaierai plus tard. Voici les scripts et le code source C à compiler avec gcc input -output en console. Pour fonctionner, mon programme nécessite la librairie WiringPi installée sur le système. Je vous conseille de vous inspirer de mon programme, mais de le faire quand même vous-même car vous comprendrez alors mieux comment cela fonctionne (indispensable pour éviter les erreurs grossières) et, de plus, vous aurez les numéros de pins correspondant avec ceux que vous utilisez sur votre Rpi. EDIT: J’ai maintenant codé un programme permettant à l’utilisateur de dessiner dans une fenêtre à l’aide de la souris ce qu’il veut imprimer. Ce programme génère alors des sources dans le language Arduino. Il suffit alors d’uploader ce code sur l’Arduino pour imprimer le dessin. Ce programme fonctionne sur n’importe quel ordinateur et permet donc à ceux qui ne possèdent pas de Rasperry Pi de l’utiliser quand même. Les moteurs sont branchés sur les GPIO de l’arduino toujours à l’aide de la carte de relais.

Partie 5 : La 3D !!

pistolet

Le pistolet à colle

Pour l’impression 3D, j’ai réutilisé le même programme que précedement (celui avec la matrice de caractère) assorti d’un script qui le relance autant de fois que votre objet comprend de couches. Pour la version 3D de l’imprimante, j’utilise un pistolet à colle à la place du crayon. J’appuis sur la gâchette du pistolet au moyen d’un élastique. Ainsi, la matière utilisée (colle) est bon marché et facile à faire fondre. Attention tout de même à ce que le bout du pistolet à colle touche presque la feuille de façon à ce que la colle soit bien appliquée sur le plateau et non expulsée dans le vide. Vous pouvez “regler” l’épaisseur de la couche imprimée en jouant sur la vitesse d’impression. Le seul problème est que la colle ne sèche pas suffisament vite. On peut néanmoins imprimer de petits objets (voir photos) et si l’on n’est très patient, on peut même réaliser des choses très fines.

 

Objets 3D en colle

Avec de l’imagination, on peut même trouver une utilitée à ces objets, une bague pour sa soeur, un support de brosse à dents ou de bic, des pieds pour élever l’ordinateur et dégager les aérations, … .

 
Objets 3D en colle

Si vous avez d’autres idées, n’hésitez pas à me les communiquer. Si vous avez réalisé la même chose que moi, faites-moi signe avec des photos, cela me fera plaisir.