====== UNO Switch Shield ======
L'objectif est de disposer d'une solution de commande avec témoins lumineux pour arduino.\\
La solution doit être facilement intégrable pour des projets arduino avec des librairies clef en main.
Je profite de cette occasion pour :
* me "re"lancer dans la gravure de circuits imprimés et donc de rédiger mes expériences sur ce sujet : [[:electronique:atelier:circuits_imprimes|Réalisation Circuits Imprimés]]
* découvrir le logiciel Eagle pour développer des PCBs
===== Conception PCB =====
Afin d'économiser les entrées/sorties du microcontrôleur et d'être scalable, des registres à décalage sont choisis contre d'autres solutions de ce type : [[:electronique:micro_controleurs:atmega328:switch_analogique|switch_analogique]] \\
Avec les registres input ou output, il est possible de les disposer en cascade à volonté. \\
En résulte seulement 3 pins microcontrôleur pour n*8 entrées ou sorties. \\
\\
Le schéma eagle développé pour l'occasion est le suivant : {{ :electronique:micro_controleurs:atmega328:switch_shield:switch_shield_schematic.png?direct&600x404 }}
L'autoroutage proposé par eagle en double couche sur un format shield arduino : {{ :electronique:micro_controleurs:atmega328:switch_shield:switch_shield_pcb.png?direct&300x218 }}
Un lien esayeda où j'ai exporté les fichiers eagle : [[https://easyeda.com/florian.tales/uno-shield-switch-led|easyeda.com/florian.tales/uno-shield-switch-led]]
Réalisation sur circuit imprimé :
|{{ :electronique:micro_controleurs:atmega328:switch_shield:20170326_113951.jpg?direct&200x267 |20170326_113951.jpg}}|{{ :electronique:micro_controleurs:atmega328:switch_shield:20170326_113943.jpg?direct&200x267 |20170326_113943.jpg}}|{{ :electronique:micro_controleurs:atmega328:switch_shield:20150725_155811.jpg?direct&250x188 |20150725_155811.jpg}}|
===== Code Arduino =====
En définitive la lecture de l'état des boutons se fait via :
Switch_Manager_checkButtons();
A tout moment on peut lire l'état des boutons dans les tableaux : ''pressed[] justpressed[] justreleased[]'' L’écriture d'état des LEDs se fait via :
Led_Manager_setLed(Led Number, boolean status HIGH or LOW);
Code complet : [[https://github.com/floriantales/arduino_switch_shield|GitHub]]
===== Démonstration =====
{{youtube>VwH-PEEE3p0}}
===== Améliorations pour le prochain design =====
- HC595 not the best part for LEDs, limit of 70mA for the part, so 8-9 mA per LED. cd74AC164 much better part, especially in matrix use, with 20-24mA/pin drive capability. or TPIC6B595 for sinking current, 150mA/pin sink capability.\\
- 74hc595 Led flashing on start up: [[http://forums.parallax.com/discussion/139862/74hc595-on-start-up|http://forums.parallax.com/discussion/139862/74hc595-on-start-up]]\\
- un composant très malin qui va faire tout ça pour nous : [[https://www.futurashop.it/image/catalog/data/Download/TM1638_V1.3_EN.pdf|TM1638]]
===== Notes et références =====
Pour les boutons (Entrées) : [[https://www.arduino.cc/en/Tutorial/ShiftIn|Arduino Playground - ShiftIn]] \\
Pour les LEDs (Sorties): [[https://www.arduino.cc/en/Tutorial/ShiftOut|Arduino Playground - ShiftOut]] \\
Réalisation presque identique (dessin Freezing et gravure PCBWay.com) : [[http://www.whatimade.today/pcb-from-concept-to-design-to-fabrication-and-testing-using-fritzing/|www.whatimade.today]]
\\
~~socialite~~