Table des matières:

Distributeur automatique basé sur Arduino à 1 $ : 8 étapes
Distributeur automatique basé sur Arduino à 1 $ : 8 étapes

Vidéo: Distributeur automatique basé sur Arduino à 1 $ : 8 étapes

Vidéo: Distributeur automatique basé sur Arduino à 1 $ : 8 étapes
Vidéo: DISTRIBUTEUR DE CROQUETTES AUTOMATISÉ ! - ARDUINO #8 2024, Juillet
Anonim
Image
Image
Enveloppe
Enveloppe

Nous avons eu notre idée de notre professeur d'ingénierie - nous avons tous pensé que ce serait une bonne idée d'avoir un distributeur automatique pour notre classe et il a dit - "cool, faites-en un". Il s'est avéré qu'un distributeur automatique serait un excellent projet senior et qu'une fois terminé, il fonctionnerait comme une collecte de fonds pour notre programme d'ingénierie.

On l'appelle un distributeur automatique de 1 $ non pas parce que cela coûte 1 $ à fabriquer, mais simplement parce que l'accepteur de billets est un modèle plus ancien qui ne prend que des billets de 1 $:)

Étape 1: Critères

Nous voulions un distributeur qui tiendrait sur un bureau et ne serait pas trop grand. Nous avons pris les dimensions de la largeur de la table pour nous assurer que nous n'avions pas le distributeur qui pendait de la table.

Étape 2: boîtier

Enveloppe
Enveloppe
Enveloppe
Enveloppe
Enveloppe
Enveloppe

Nous avons fabriqué notre boîte de 19 pouces de large sur 17 pouces de long sur 25 pouces de haut. Nous avons utilisé une machine CNC pour couper notre bois. Nous avons utilisé solidworks pour concevoir les faces, puis les avons converties en types de fichiers de dessin pour notre logiciel CNC. Nous avons poncé les bords puis les avons vissés avec 1 ¼”. Nous avons fixé le panneau avant avec une charnière et utilisé des vis ¼ , afin que les vis ne passent pas de l'autre côté. Nous avons également utilisé du verre acrylique que nous avons découpé pour les étagères et le panneau avant.

Étape 3: Électronique

Électronique
Électronique
Électronique
Électronique
Électronique
Électronique
Électronique
Électronique

Arduino

Nous avons utilisé une carte Arduino Mega 2560. Nous avons également utilisé des cartes de moteur Adafruit pour qu'elles puissent faire fonctionner les moteurs pas à pas. Nous avons ajouté des broches aux adafruits pour qu'ils se connectent les uns aux autres. Ils les ont insérés les uns sur les autres. Chacun peut faire fonctionner 2 moteurs. Veuillez également noter que le cavalier doit être connecté.

Alimentation de bureau

Alimentation Bestek ATX utilisant un adaptateur pour maintenir l'alimentation allumée. L'adaptateur provient de sparkfun.com et fournit différentes tensions.

Bobines dans les moteurs

Nous avons fabriqué des modèles Solidworks pour tenir le moteur, saisir la bobine et guider la bobine le long de l'étagère. Nous avions obtenu nos bobines sur ebay et les avions coupées à la dimension. Nous avons également dû plier 3 d'entre eux car nous n'en avons pas eu 6 avec les extrémités droites pour se connecter au support de bobine. Nous les avons ensuite imprimés en 3D et attachés à la bobine et au moteur. Les moteurs pas à pas que nous avions, nous les avons mis dans un support. Il tiendrait le moteur et guiderait la bobine le long d'un chemin rectiligne.

LCD et clavier

Nous avons utilisé un clavier Arduino et un écran LCD connectés à un fil 5V sur l'adaptateur d'alimentation pour l'alimentation, puis dans la même carte Arduino

Câblage

Nous recommandons l'utilisation de fils de calibre 18. Dans notre cas, nous avons dû faire des compromis en utilisant différentes jauges car nous n'avions plus de 18 jauges

Bande LED

Nous avons utilisé une bande LED pour éclairer la machine. Nous l'avons connecté à un câble 12V sur l'adaptateur d'alimentation. Heureusement, la bande LED que nous avons utilisée avait un + et un -, ce qui facilitait le processus de connexion.

Étape 4: Accepteur de factures

Accepteur de factures
Accepteur de factures
Accepteur de factures
Accepteur de factures
Accepteur de factures
Accepteur de factures
Accepteur de factures
Accepteur de factures

Nous avons utilisé un Coinco BA30B comme accepteur de billets. Il devait être connecté directement au mur comme source d'alimentation. Nous l'avons combiné avec un adaptateur 24 broches d'une alimentation atx pour le brancher et permettre un câblage plus facile. Les brochages que nous avons suivis se trouvent dans le lien suivant:

techvalleyprojects.blogspot.com/2011/07/ard…

Dans notre cas, nous avons dû créer un support pour surélever l'accepteur de billets car sinon il serait trop bas pour notre boîtier.

Étape 5: Tester

Testez d'abord l'électronique à l'extérieur du boîtier pour vous assurer que les composants fonctionnent. Tous les problèmes qui surviennent doivent être résolus avant de les placer à l'intérieur du boîtier.

Étape 6: De l'électronique au boîtier

Une fois que vous avez testé l'électronique et que vous êtes satisfait de leurs résultats, commencez à les placer dans votre boîtier. Ajustez la longueur des fils pour qu'ils s'adaptent confortablement à l'intérieur.

Étape 7: Tests finaux

Une fois placé dans le boîtier, testez à nouveau le tout. Si tout fonctionne comme prévu, félicitations ! Vous avez fabriqué un distributeur automatique.

Étape 8: Code Arduino + Liens

Téléchargements:

Code Arduino

drive.google.com/drive/folders/1oC4MhOcMFy…

Dossier SolidWorks avec fichiers pièce et assemblage

drive.google.com/drive/folders/1amZoypiWcZ…

Juste au cas où quelque chose serait arrivé au lien, voici le code arduino entièrement affiché. Code Arduino <<

#include #include #include "Arduino.h" #include #include #include "utility/Adafruit_MS_PWMServoDriver.h" #include

const int étapesParRévolution = 200; octet const ROWS = 4; //quatre lignes const byte COLS = 3; //trois colonnes char keys[ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; octet rowPins[ROWS] = {5, 6, 7, 8}; // connexion aux broches de ligne de l'octet du clavier colPins[COLS] = {2, 3, 4}; // se connecte aux brochages de colonne du clavier Keypad keyboard = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); Adafruit_MotorShield AFMS1 = Adafruit_MotorShield(); Adafruit_StepperMotor * monMoteur1 = AFMS1.getStepper(-200, 1); Adafruit_StepperMotor * monMoteur2 = AFMS1.getStepper(-200, 2); Adafruit_MotorShield AFMS2 = Adafruit_MotorShield (0x61); Adafruit_StepperMotor *myMotor3 = AFMS2.getStepper(-200, 1); Adafruit_StepperMotor *myMotor4 = AFMS2.getStepper(-200, 2); Adafruit_MotorShield AFMS3 = Adafruit_MotorShield (0x62); Adafruit_StepperMotor * monMoteur5 = AFMS3.getStepper(-200, 1); Adafruit_StepperMotor *myMotor6 = AFMS3.getStepper(-200, 2); Adafruit_MotorShield AFMS4 = Adafruit_MotorShield (0x63); Adafruit_StepperMotor * monMoteur7 = AFMS4.getStepper(-200, 1); Adafruit_StepperMotor * monMoteur8 = AFMS4.getStepper(-200, 2); LiquidCrystal LCD (1, 11, 9, 10, 12, 13); //Broches numériques auxquelles l'écran LCD est connecté // Constantes // // broche pour la ligne de crédit (-) du validateur de factures const int billValidator = 22;

// Variables /

/ enregistrement de la durée d'impulsion (millisecondes) longue durée non signée;

// contenant le total des dollars enregistrés int dollarCounter = 0; void setup() { lcd.begin (16, 1); //définir les coordonnées du texte lcd lcd.print("Insérer $1 seulement"); //Définir le texte Serial.begin(9600); // Initialise les ports série pour la communication. Serial.println("Test pas à pas !"); // Tapez Out Stepper Test dans le moniteur série afin que nous sachions quel moteur pas à pas est enfoncé. AFMS1.begin(); AFMS2.begin(); AFMS3.begin(); AFMS4.begin(); monMoteur1->setSpeed(100); //Définir la vitesse du moteur à laquelle ils exécuteront myMotor2->setSpeed(100); myMotor3->setSpeed(100); myMotor4->setSpeed(100); myMotor5->setSpeed(100); myMotor6->setSpeed(100); myMotor7->setSpeed(100); myMotor8->setSpeed(100); // Configurations des broches pour le validateur de factures et le bouton pinMode(billValidator, INPUT); //Définit l'accepteur de facture

// Initialise les ports série pour la communication. Serial.begin(9600); Serial.println("En attente du dollar…"); } boucle vide () { { durée = pulseIn(billValidator, HIGH); //Commence à rechercher la longueur d'impulsion reçue de l'accepteur de billets si (durée > 12000) //Valeur qu'il doit dépasser pour valider en tant que dollar traité et authentique { // Compter dollar dollarCounter++; // Vérification de la compréhension Serial.print("Dollar détecté.\n Total: "); // Affiche le nouveau compte en dollars Serial.println(dollarCounter); //boucle pour attendre qu'un bouton soit enfoncé while (duration > 12000){ char key = keyboard.getKey(); // obtient le keyoad connecté et commence à voir lequel est pressé if (key != NO_KEY) { // recherchera la touche pressée Serial.println (key); //nous permet de savoir laquelle a été enfoncée dans le moniteur série } { if (key == '1') { //Si la touche 1 est enfoncée, fait ce qui suit: int keyPressed = key - '1'; myMotor8->step(580, AVANT, DOUBLE); // Démarre le moteur et tourne de 350 degrés vers l'avant. myMotor8->release(); // Libère le moteur de l'état de maintien en place. revenir; //Revient au début du code de la boucle }

if (key == '2') { //Si la touche 2 est enfoncée, fait ce qui suit: int keyPressed = key - '2'; myMotor7->step(400, AVANT, DOUBLE); // Démarre le moteur et tourne de 350 degrés vers l'avant. myMotor7->release(); // Libère le moteur de l'état de maintien en place. revenir; //Revient au début du code de boucle } if (key == '3') { //Si la touche 3 est enfoncée, fait ce qui suit: int keyPressed = key - '3'; myMotor6->step(400, AVANT, DOUBLE); // Démarre le moteur et tourne de 350 degrés vers l'avant. myMotor6->release(); // Libère le moteur de l'état de maintien en place. revenir; //Revient au début du code de boucle } if (key == '4') { //Si la touche 4 est enfoncée, fait ce qui suit: int keyPressed = key - '4'; myMotor5->step(180, FORWARD, DOUBLE); // Démarre le moteur et tourne de 350 degrés vers l'avant. myMotor5->release(); // Libère le moteur de l'état de maintien en place. revenir; //Revient au début du code de boucle } if (key == '5') { //Si la touche 5 est enfoncée, fait ce qui suit: int keyPressed = key - '5'; myMotor4->step (6900, AVANT, DOUBLE); // Démarre le moteur et tourne de 350 degrés vers l'avant. myMotor4->release(); // Libère le moteur de l'état de maintien en place. revenir; //Revient au début du code de la boucle } if (key == '6') { //Si la touche 6 est enfoncée, fait ce qui suit: int keyPressed = key - '6'; myMotor3->step(400, AVANT, DOUBLE); // Démarre le moteur et tourne de 350 degrés vers l'avant. monMoteur3->libération(); // Libère le moteur de l'état de maintien en place. revenir; //Revient au début du code de boucle } if (key == '7') { //Si la touche 7 est enfoncée, fait ce qui suit: int keyPressed = key - '7'; myMotor7->step(400, AVANT, DOUBLE); // Démarre le moteur et tourne de 350 degrés vers l'avant. myMotor7->release(); // Libère le moteur de l'état de maintien en place. revenir; //Revient au début du code de boucle } if (key == '8') { //Si la touche 8 est enfoncée, fait ce qui suit: int keyPressed = key - '8'; myMotor8->step(400, AVANT, DOUBLE); // Démarre le moteur et tourne de 350 degrés vers l'avant. myMotor8->release(); // Libère le moteur de l'état de maintien en place. revenir; //Revient au début du code de la boucle } } } } } } >>

Conseillé: