Table des matières:

Osu ! Clavier : 8 étapes (avec photos)
Osu ! Clavier : 8 étapes (avec photos)

Vidéo: Osu ! Clavier : 8 étapes (avec photos)

Vidéo: Osu ! Clavier : 8 étapes (avec photos)
Vidéo: Osu! - Comment bien débuter 2024, Novembre
Anonim
Osu ! Clavier
Osu ! Clavier

J'ai récemment commencé à jouer à un jeu de rythme appelé osu ! et après avoir vu une vidéo d'un mini clavier commercial, j'ai pensé que ce serait un projet amusant d'en concevoir un moi-même. Peu de temps après, j'ai décidé que ce serait une bonne idée de le mettre sur instructables comme premier projet.

Si vous souhaitez reproduire ce projet exactement jusqu'à la dernière instruction, soyez mon invité, mais certaines des décisions que j'ai faites ne sont pas basées sur le prix le plus bas ou la meilleure qualité. Certains composants sont choisis presque uniquement parce que je les avais traînés. Si vous pouvez le gérer, je vous encourage à personnaliser votre projet.

Remarque 1: des composants SMD (petits appareils électroniques) sont utilisés, donc si vous reproduisez ce projet, des compétences en soudure sont requises. peut-être qu'une version facile à souder sera ajoutée mais ces leds ne sont pas livrées dans un paquet de trous creux

Remarque 2: j'ai mis à jour le code plusieurs fois et je suis maintenant à la version 3ish. Je vais laisser tout le code en ligne mais je vous recommande d'utiliser la dernière version. Il n'a actuellement pas de fonctionnalité led, mais il devrait être le plus performant.

Étape 1: Matériel et explications

Matériaux et explications
Matériaux et explications

Selon la façon dont vous réalisez votre projet, vous aurez peut-être besoin de différents composants, mais ces composants sont ceux que j'ai utilisés. Si vous avez le temps et que vous voulez économiser de l'argent, commandez aliexpress et ne commandez pas le PCB.

1 câble Arduino pro micro + USB

3 interrupteurs Kailh BOX rouges

3 résistance 10k (0805 SMD)

3 condensateur 100nF (0805 SMD)

4 LED RVB APA102 (5050 CMS)

3 touches

1 carte de circuit imprimé (PCB) fournie dans ce projet

1 boîtier imprimé en 3D fourni dans ce projet

Pourquoi utiliser un micro Arduino pro ?

La plupart des cartes arduino comme la Uno (Atmega328) n'ont pas de support natif pour la communication USB. Oui, vous pouvez les programmer très facilement via USB et je pense qu'il existe des solutions de contournement, mais j'aime rester simple en ce qui concerne la communication USB et je ne sais pas si les solutions de contournement sont aussi réactives. Ces cartes utilisent une puce externe pour rendre la communication USB possible alors que le micro Arduino pro (Atmega32U4) l'a intégré.

Les interrupteurs

Il existe de nombreux interrupteurs mécaniques que vous pouvez utiliser. Linéaire, tactile ou clicky de Kailh ou Cherry MX. Choisissez celui que vous préférez. J'ai utilisé les commutateurs Kailh car ils étaient bon marché sur Ailexpress. Si vous choisissez d'utiliser le PCB, vous aurez besoin de commutateurs Kailh BOX. La couleur détermine le sentiment.

Les composants électroniques

Il n'y a pas grand-chose à expliquer à leur sujet dans ce chapitre, mais si vous n'utilisez pas le PCB, je recommanderais uniquement des composants de trou creux normaux pour faciliter le soudage. Malheureusement, les leds utilisées ne sont pas disponibles dans des boîtiers à trous traversants. Je ne recommanderais pas non plus d'utiliser des fils sur des boîtiers CMS, sauf si vous êtes très confiant dans vos compétences en soudure. Même pour les CMS sur un PCB, des compétences "avancées" en soudure sont nécessaires.

Le logement

Je fournis un logement dans ce projet, mais il est en ce moment défectueux. Des modifications sont nécessaires pour installer les boulons, les ouvertures pour les leds ne sont pas optimales, l'arduino est exposé et une pièce doit être découpée pour que l'USB s'adapte. À l'avenir, un nouveau logement pourrait être ajouté. Si vous avez une imprimante 3D, imprimez-la, mais ne vous efforcez pas d'imprimer ce boîtier défectueux si vous ne le faites pas et utilisez simplement une sorte de boîte de projet.

Étape 2: le schéma

Le schéma
Le schéma

Le schéma de ce projet est assez simple, mais je souhaite expliquer les composants pour les personnes intéressées et ne connaissant pas cette implémentation.

Basculer les connexions vers l'Arduino

Les commutateurs sont connectés aux broches Arduino 0, 2 et 3 car ces broches peuvent être utilisées comme interruptions externes. Ceci est expliqué plus en détail dans la section code.

Le circuit anti-rebond

Sur le côté gauche du schéma se trouve un circuit qui est copié 3 fois. Ce circuit est utilisé pour anti-rebond du commutateur. Pour savoir ce qu'est l'anti-rebond, vous devez comprendre le rebond des commutateurs et ce n'est pas difficile à comprendre.

Regardez d'abord cette simulation pour peindre une première image (cliquez rapidement sur le commutateur et regardez le signal ci-dessous)

Lorsque vous appuyez ou relâchez un interrupteur, il rebondit et votre signal alterne entre haut et bas plusieurs fois pendant quelques millisecondes. Un Arduino est vraiment rapide et lit tous les hauts et bas en ce court laps de temps. Le programme enverra une pression ou un relâchement de touche chaque fois qu'un haut ou un bas est lu, de sorte qu'à chaque pression, votre ordinateur recevra plusieurs pressions de touche. Pas idéal pour un jeu de rythme.

Ce circuit anti-rebond ralentira le front descendant du signal. Le signal envoyé à l'Arduino ne pourra pas changer aussi rapidement que le rebond se produit, il sera donc lu en une seule pression. Ne vous inquiétez pas qu'il ralentisse pour la prochaine vraie presse, car il le fera.

Avancée:

L'Atmaga32U4 lit un minimum numérique à 0,2 Vcc - 0,1 V = 0,9 volt. La tension du condensateur à tout instant de sa décharge est Vcc * e^(-t/RC). Si vous mesurez un temps anti-rebond différent sur votre commutateur, vous pouvez calculer vos valeurs de résistance et de condensateur.

formulaire de formule

Les LED

Les LED RVB sont des LED APA102 adressables individuellement à l'aide d'une horloge et d'une ligne de données. Aucun composant externe n'est nécessaire pour les faire fonctionner. Pour de nombreuses LED, vous devez utiliser un condensateur parallèle à 5 volts et à la terre, mais avec seulement 4 LED, vous n'en avez pas besoin.

Étape 3: La conception de la carte

La conception du conseil
La conception du conseil

Le PCB a été conçu en JLCPCB. Je ne suis pas sponsorisé par eux mais pour des prototypes bon marché, ils font d'excellents PCB. Pour 2 dollars, vous obtenez 10 de la même planche, mais l'expédition était d'environ 11 dollars pour moi. Si vous ne voulez pas nécessairement un éclairage RVB et prévoyez d'en faire un seul, vous devriez envisager de faire votre clavier sans PCB.

La conception de la planche était assez simple. J'avais seulement besoin d'ajouter un composant pour les commutateurs, mais après avoir regardé quelques vidéos, j'ai compris. Le seul défaut que j'ai réalisé est que le placement des trous est un peu trop proche des interrupteurs.

Pour commander le PCB, allez sur https://jlcpcb.com/ et choisissez l'option 2 couches. Il vous demandera un fichier Gerber. téléchargez le fichier ".zip" et faites-le glisser vers la fenêtre. Vous n'avez pas besoin de le décompresser. Les paramètres devraient être corrects et vous pouvez continuer et terminer la commande.

Étape 4: Conception du boîtier et conseils d'assemblage

Conseils pour la conception et l'assemblage du boîtier
Conseils pour la conception et l'assemblage du boîtier
Conseils pour la conception et l'assemblage du boîtier
Conseils pour la conception et l'assemblage du boîtier
Conseils pour la conception et l'assemblage du boîtier
Conseils pour la conception et l'assemblage du boîtier
Conseils pour la conception et l'assemblage du boîtier
Conseils pour la conception et l'assemblage du boîtier

Concevoir

Comme mentionné précédemment, ma conception est imparfaite mais vous pouvez toujours l'imprimer si vous le souhaitez. la conception a été réalisée dans Fusion 360. C'est un logiciel de modélisation 3D gratuit et avec mon expérience de l'inventeur et de solidworks, il était assez facile de travailler avec. Les cercles sur les coins du boîtier sont destinés à empêcher le décollement du lit d'impression.

Si vous faites votre propre cas, une seule chose est vraiment importante. Vos commutateurs doivent être fermement placés et incapables de bouger. J'ai fourni des photos des découpes carrées avec des dimensions afin que vous puissiez les utiliser pour votre propre conception en supposant que vous utilisiez des commutateurs Kailh BOX.

Assemblée

Vous avez maintenant tous les composants nécessaires à l'assemblage. Il y a un ordre pour assembler cette première version car les interrupteurs sont soudés.

1. Soudez les composants SMD. ce sont les résistances, les condensateurs et les LED.

2. Soudez le micro Arduino pro.

3. Placez les 3 interrupteurs dans la plaque de recouvrement imprimée en 3D avant de souder. Le couvercle ne peut pas être retiré après avoir soudé les commutateurs. Dessouder les interrupteurs n'est pas conseillé et peut les détruire.

4. Soudez maintenant les commutateurs en place. Faites-le le plus rapidement possible car les interrupteurs en plastique peuvent fondre et les abîmer ou réduire considérablement leur nombre de clics.

5. Placez la plaque de recouvrement assemblée dans le boîtier imprimé en 3D et fixez-la avec du ruban adhésif ou utilisez des boulons s'ils n'interfèrent pas avec les touches.

6. Placez les keyCaps sur les commutateurs et vous avez terminé.

Recommandations

Dessoudez ou masquez les LED de l'arduino après avoir téléchargé votre code. Les leds sont agréables à avoir si votre code ne se télécharge pas mais ne sont pas agréables à regarder comme un produit fini. Des pincettes pointues et habiles sont requises.

De plus, certains pieds de préhension sur le fond sont agréables pour antidérapants et laissent passer la lumière RVB.

Étape 5: Le Code V1 (hardware Debounce)

Le Code V1 (hardware Debounce)
Le Code V1 (hardware Debounce)
Le Code V1 (hardware Debounce)
Le Code V1 (hardware Debounce)

Le code de ce projet n'est pas adapté aux débutants, donc si vous commencez tout juste à programmer dans arduino, ce code vous fera peut-être un peu peur. Cependant, je vais essayer d'expliquer ce qui se passe du mieux que je peux. Certaines choses sont expliquées plus loin dans ce texte, donc si vous avez des questions, veuillez d'abord lire le tout.

Téléchargement du code

Téléchargez d'abord les 3 fichiers ".ino" et placez-les dans un dossier. Si vous n'avez pas l'IDE Arduino, téléchargez-le simplement gratuitement sur le site officiel d'arduino.

Connectez votre Arduino à votre PC et ouvrez "OSU_Keyboard_code_V1.ino". Dans Tools Board, sélectionnez "Arduino/Genuino Micro". Également dans Outils, sélectionnez le bon port COM. Cela peut parfois changer. Pour télécharger le code sur votre Arduino, cliquez simplement sur la flèche en haut à gauche de l'écran et attendez qu'il vous dise qu'il est terminé en bas à gauche.

OSU_Keyboard_code_V1

Inclure et définir

Vous devez d'abord inclure la bibliothèque Keyboard. Cela permet d'utiliser l'Arduino comme clavier.

Ensuite, je définis quelques valeurs. Define est comme une variable mais ils ne peuvent pas changer pendant l'exécution du programme. Les 9 premiers sont pour le caractère du clavier, le numéro de broche arduino et les bits de port.

Ensuite, les bits de port des données LED et de l'horloge.

Le nombre de leds est également défini et une variable pour l'angle de la roue chromatique.

Installer

Cette partie du code ne sera exécutée qu'une seule fois lorsque l'arduino sera branché.

Tout d'abord, les broches d'horloge et de données des LED sont définies comme sorties et les broches de commutation comme entrées. Il s'agit de la version avancée de pinMode(). Si vous êtes intéressé, recherchez "manipulation directe du port".

Keyboard.begin() démarre simplement la connexion USB en tant que clavier.

Les 3 interruptions suivantes sont liées aux broches du commutateur. Chaque fois qu'un changement est détecté sur la broche du commutateur, un petit programme sera exécuté. Ce petit programme sera fait plus loin.

Boucle

Cette partie se répétera continuellement pendant que l'arduino est alimenté.

Je ne l'utilise que pour changer et mettre à jour la couleur des LED.

Interruptions

Ici, les petits programmes, qui ne seront exécutés que lorsqu'un changement est détecté sur les broches du commutateur, sont effectués. Ils sont identiques à l'exception de la broche à laquelle ils réagissent.

Il vérifie d'abord si le bouton est enfoncé ou relâché et envoie la commande clavier correcte.

LED (expliquée dans un ordre différent)

Si vous êtes curieux de savoir comment les LED sont contrôlées, vous devriez consulter la fiche technique de l'APA102.

Un peu

Il s'agit à nouveau de la version de manipulation de port directe de l'écriture numérique.

Tout d'abord, il vérifie s'il doit envoyer un 0 ou un 1 et tire respectivement la broche de données vers le bas ou vers le haut. Ensuite, il écrit très brièvement la broche d'horloge haut et l'écrit à nouveau bas.

Un octet

Cela répète oneBit 8 fois avec une boucle "for". Il lit le premier bit d'un octet et passe sa valeur à la fonction oneBit et fait de même pour les 7 bits suivants.

LedDonnées

Cela répète oneByte 4 fois pour fournir les données nécessaires pour une led. Le premier octet commence par 111xxxxx et une valeur de luminosité de 5 bits à la place du xxxxx. La luminosité peut être réglée de 0 à 31 (2^5 = 32 niveaux).

Les 3 octets suivants sont pour les valeurs bleu, vert et rouge. Un octet pour chaque couleur.

CouleurRoueCetteLed

Cette fonction appelle ledData lui donne les couleurs RVB en fonction d'un angle dans la roue chromatique.

La valeur de 16 bits est un dividende en 6 sections équidistantes de 60 degrés. Regarder les images peut vous aider à mieux comprendre.

(une version 8 bits est également fournie mais commentée car trop fluctuante)

DébutFinFrame

Le cadre de départ doit être utilisé chaque fois que vous souhaitez envoyer de nouvelles couleurs aux leds et que vous souhaitez mettre à jour la couleur réelle des leds

Je n'utilise que l'image de début car l'image de fin n'est pas nécessaire. La trame de début est de 4 octets de 0. La trame de fin est de 4 octets de 255 (11111111).

Étape 6: Le Code V2 (logiciel Debounce With Timers)

Le Code V2 (logiciel Debounce With Timers)
Le Code V2 (logiciel Debounce With Timers)

Après un certain temps de jeu, j'ai remarqué quelques problèmes de double tapotement avec le rebond matériel. Cela pourrait être corrigé avec d'autres résistances ou condensateurs de valeur, mais comme les boutons et le couvercle ne sont pas amovibles, j'ai pensé que le logiciel anti-rebond serait une bonne solution. L'anti-rebond logiciel devrait fonctionner, que l'anti-rebond matériel soit implémenté ou non. Dans ma configuration actuelle, je ne pouvais pas retirer le couvercle, j'ai donc laissé les résistances et les condensateurs en place.

Je n'expliquerai pas le code aussi longuement que la version précédente car il est un peu plus difficile à expliquer.

Fondamentalement, la plupart du code fonctionne de la même manière et le code LED n'est pas modifié. ce qui a changé, c'est que les interruptions externes n'utilisent plus les fonctions arduino. Maintenant, cela fonctionne en code C pur. Et maintenant, ce qui est ajouté, c'est l'interruption logicielle. Pour cela, j'ai utilisé les minuteries AVR pour attendre un certain temps jusqu'à ce que le rebond s'arrête. Étant donné que les temporisateurs sont basés sur des interruptions, le temps de déconcentration n'est pas influencé par quoi que ce soit qui se passe dans la boucle.

Le seul inconvénient que je peux trouver est que les fonctions de délai arduino ne peuvent plus être utilisées. Parce que les fonctions de retard utilisent la minuterie 0 et ce programme utilise la minuterie 0 pour anti-rebond.

Dans l'image, vous pouvez voir comment le code fonctionne à peu près. Le bit mem indique si un temporisateur est en cours d'exécution. Ce qui n'est pas représenté, c'est le cas où à la fin de la pression sur le bouton, l'entrée est faible. Dans ce cas, seule une pression de touche serait envoyée alors que le bouton est déjà relâché. Ce qui signifie que la touche sera maintenue enfoncée en ce qui concerne l'ordinateur. Pour cette rare exception, une vérification sera effectuée à l'expiration d'une minuterie. Si à la fin d'une minuterie le bouton n'est pas enfoncé, une commande de déverrouillage sera envoyée.

Étape 7: Le Code V3 (logiciel Debounce With Vertical Counter) (recommandé) (pas de LED)

Le Code V3 (logiciel Debounce With Vertical Counter) (recommandé) (pas de LED)
Le Code V3 (logiciel Debounce With Vertical Counter) (recommandé) (pas de LED)

Ce code a ÉGALEMENT une version où vous n'avez pas besoin de résistances pull down. Assurez-vous de connecter chaque bouton à l'entrée et à la TERRE ! Le pull-up intégré est utilisé

J'ai également connu quelques presses non enregistrées dans le code V2. Je pense que le code est devenu trop complexe avec sa minuterie et son interruption externe et j'ai peut-être manqué quelques exceptions. Pour cette raison, je suis parti de zéro en cherchant sur Internet des méthodes anti-rebond de logiciels.

(honnêtement, au moins la moitié de ce projet est devenu un bouton anti-rebond à ce stade)

Après quelques recherches, je suis tombé sur ce post:

www.compuphase.com/electronics/debouncing….

Pour être honnête, il m'a fallu un certain temps pour bien comprendre comment cela fonctionne exactement. Cela implique des manipulations de bits assez complexes, mais je vais essayer de le rendre aussi simple que possible. Cependant mes explications ne seront qu'un ajout au post donc vous devriez au moins lire les "compteurs verticaux", "une implémentation annotée" et "réduire la latence".

mon explication

Le chronogramme (réalisé dans WaveDrom) que j'ai ajouté devrait rendre ce bit mathématique difficile à comprendre au moins un peu plus compréhensible. Notez que l'image a 2 bits de compteur, mais mon code en a 3. Cela signifie un temps d'anti-rebond plus long.

Un bit par valeur

Avec la mise en œuvre du compteur vertical, il est possible d'anti-rebondir plusieurs boutons en même temps, en parallèle. Toutes les valeurs sont de type Byte(uint8_t) et se composent de 8 bits. nous ne nous intéressons pas à la valeur de ces octets, mais nous nous intéressons plutôt aux bits eux-mêmes. Chaque bouton à éliminer n'utilise qu'un bit de chaque octet. Le premier bouton utilise uniquement le premier bit de chaque octet, le deuxième bouton utilise le deuxième bit, etc.

Tout en même temps

En utilisant les calculs binaires, il est possible d'exécuter ces anti-rebonds de broches en parallèle. Et, bien que les mathématiques binaires soient assez compliquées, elles sont très efficaces pour le processeur.

Avec un type de données 8 bits, il est donc possible de le faire pour 8 boutons. L'utilisation de types de données plus grands permet plus de rebonds à la fois.

Le rebond

La routine anti-rebond est exécutée toutes les 1 millisecondes avec une interruption de minuterie.

lorsque le bouton est enfoncé, le buttonState, qui est l'état anti-rebond, s'abaissera immédiatement, indiquant une pression sur un bouton. Pour détecter un relâchement, le bouton doit être suffisamment haut pour indiquer qu'il n'a pas rebondi depuis un certain temps. Toggle est utilisé pour indiquer un changement de bouton. Les bits du compteur sont utilisés pour …. compter depuis combien de temps il n'y a pas eu de rebond.

Delta indique une différence entre l'entrée et l'état anti-rebond. Ce n'est que lorsqu'il y a une différence que le compteur compte. le compteur sera remis à zéro lorsqu'un rebond est détecté (delta est 0).

Étape 8: Le résultat

Image
Image

Si tout s'est bien passé, vous devriez maintenant avoir un clavier fonctionnel pour jouer à Osu ! au. Personnellement, je n'ai pas du tout remarqué de latence. Si vous le faites, s'il vous plaît laissez-moi savoir. Aussi, s'il y a des questions, n'hésitez pas à demander quoi que ce soit.

Les mentions précédentes à propos d'une V2 ne sont pas une promesse, alors ne remettez pas ce projet à plus tard car vous voulez attendre la V2.

J'espère que vous apprécierez votre clavier !

Osu ! nom: Thomazzz3

Dépannage

Si vous pensez avoir des problèmes avec votre clavier, ouvrez d'abord un éditeur de texte et appuyez une fois sur chaque touche pendant une courte période.

Une ou plusieurs touches ne fonctionnent pas ?

Il est possible que vous ayez détruit un interrupteur en interne lors de la soudure. Si vous avez un multimètre, mettez-le sur continuité/bip, mettez-le parallèlement à l'interrupteur alors que l'Arduino n'est pas connecté et appuyez sur la touche. Il devrait émettre un bip.

Les caractères que vous venez de taper correspondent-ils aux touches que vous avez configurées dans Osu ! ?

Modifiez les caractères du code arduino dans les 3 premiers #Defines (' ' est nécessaire !).

Ou changez votre Osu ! paramètres pour utiliser les touches configurées.

Une ou plusieurs touches sont-elles répétées plusieurs fois ?

Le circuit anti-rebond ne fonctionne probablement pas pour vos commutateurs ou n'est pas correctement soudé. Vérifiez vos connexions de soudure. Si cela persiste, essayez une valeur de condensateur de 1uF. Ce sera très difficile pour les utilisateurs de PCB.

Si vous rencontrez des problèmes avec vos LED

Les LED clignotent-elles ?

Une connexion de soudure peut être lâche. Si vous utilisez le PCB, confirmez que l'étain à souder a vraiment coulé sur le tampon sur l'impression.

Aucune des leds ne fonctionne ou à partir d'un certain nombre de leds ne fonctionne plus ?

Vérifiez les courts-circuits entre les connexions de la première LED (suivez les pistes) et vérifiez l'étain bien connecté sur les sorties de l'Arduino et à nouveau la première LED. S'il est confirmé qu'il est correct et qu'il est toujours défectueux, vous devrez peut-être remplacer la première LED.

Si cela résout le problème, répétez l'opération pour les LED suivantes si nécessaire.

Conseillé: