Turinys:

1 USD „Arduino“pardavimo automatas: 8 žingsniai
1 USD „Arduino“pardavimo automatas: 8 žingsniai

Video: 1 USD „Arduino“pardavimo automatas: 8 žingsniai

Video: 1 USD „Arduino“pardavimo automatas: 8 žingsniai
Video: УПРАВЛЕНИЕ СКОРОСТЬЮ DREMEL С ЦЕПЕЙ ДИММЕРА. РЕМОНТ DREMEL 2024, Lapkritis
Anonim
Image
Image
Korpusas
Korpusas

Idėją gavome iš savo inžinerijos mokytojo - visi manėme, kad būtų gera idėja turėti savo klasei skirtą automatą, ir jis pasakė - „šaunu, pasigamink“. Paaiškėjo, kad pardavimo automatas būtų puikus vyresnysis projektas ir, kai jis bus baigtas, veiktų kaip mūsų inžinerinės programos lėšų rinkėjas.

Jis vadinamas 1 USD pardavimo automatu ne dėl to, kad jo pagaminimas kainuoja 1 USD, o tiesiog dėl to, kad sąskaitų priėmėjas yra senesnis modelis, kuris priima tik 1 USD sąskaitas:)

1 žingsnis: kriterijai

Mes norėjome pardavimo automato, kuris tilptų ant stalo ir nebūtų per aukštas. Mes paėmėme stalo pločio matmenis, kad įsitikintume, ar neturime prie stalo kabančio pardavimo automato.

2 žingsnis: korpusas

Korpusas
Korpusas
Korpusas
Korpusas
Korpusas
Korpusas

Mes padarėme savo dėžę 19 colių pločio ir 17 colių ilgio ir 25 colių aukščio. Mes pjaustėme medieną CNC staklėmis. Mes panaudojome „solidworks“veidams suprojektuoti, o tada konvertavome juos į piešimo failų tipus mūsų CNC programinei įrangai. Mes nušlifavome kraštus ir įsukome juos 1 ¼ “. Priekinį skydelį pritvirtinome vyriais ir naudojome screws “varžtus, kad varžtai nepatektų į kitą pusę. Mes taip pat naudojome akrilinį stiklą, kurį supjaustėme lentynoms ir priekiniam skydeliui.

3 žingsnis: Elektronika

Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika

Arduino

Mes naudojome „Arduino Mega 2560“plokštę. Mes taip pat naudojome „Adafruit“variklių plokštes, kad jos galėtų paleisti žingsninius variklius. Prie adafruit pridėjome smeigtukus, kad jie galėtų sujungti vienas kitą. Jie buvo uždėti vienas ant kito. Kiekvienas gali paleisti 2 variklius. Taip pat atkreipkite dėmesį, kad trumpiklis turi būti prijungtas.

Stalinio kompiuterio maitinimo šaltinis

„Bestek ATX“maitinimas naudojant adapterį, kad maitinimas būtų įjungtas. Adapteris yra iš sparkfun.com ir teikia įvairią įtampą.

Susisuka į variklius

Mes sukūrėme „solidworks“modelius, kad galėtume laikyti variklį, patraukti ritę ir nukreipti ritę išilgai lentynos. Mes buvome pasiekę savo ritinius iš „ebay“ir supjaustėme juos pagal dydį. Mes taip pat turėjome sulenkti 3 iš jų, nes negavome 6 su tiesiais galais, kad galėtume prisijungti prie ritės laikiklio. Tada mes juos atspausdinome 3D ir pritvirtinome prie ritės ir variklio. Žingsninius variklius, kuriuos turėjome, įdėjome į laikiklį. Jis laikytų variklį ir nukreiptų ritę tiesiu keliu.

LCD ir klaviatūra

Mes naudojome „Arduino“klaviatūrą ir skystųjų kristalų ekraną, prijungtą prie 5 V maitinimo šaltinio maitinimo adapterio maitinimo šaltinio, o tada į tą pačią „Arduino“plokštę

Laidai

Rekomenduojame naudoti 18 gabaritų laidus. Mūsų atveju teko daryti kompromisus naudojant įvairius matuoklius, nes pritrūko 18 matuoklių

LED juostelė

Mašinai apšviesti naudojome LED juostelę. Mes prijungėme jį prie maitinimo adapterio 12 V laido. Laimei, mūsų naudojama LED juostelė turėjo + ir - tai palengvino jos prijungimo procesą.

4 žingsnis: sąskaitų priėmėjas

Sąskaitos priėmėjas
Sąskaitos priėmėjas
Sąskaitos priėmėjas
Sąskaitos priėmėjas
Sąskaitos priėmėjas
Sąskaitos priėmėjas
Sąskaitos priėmėjas
Sąskaitos priėmėjas

Mes naudojome „Coinco BA30B“kaip sąskaitų priėmėją. Jis turėjo būti prijungtas tiesiai prie sienos kaip maitinimo šaltinis. Mes sujungėme jį su 24 kontaktų adapteriu iš atx maitinimo šaltinio, kad prijungtume ir palengvintume laidų prijungimą. „Pinouts“, kuriuos sekėme, rasite šioje nuorodoje:

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

Mūsų atveju mes turėjome sukurti laikiklį, kad pakeltume sąskaitų priėmėją, nes priešingu atveju jis būtų per mažas mūsų korpusui.

5 žingsnis: bandymas

Pirmiausia patikrinkite elektroniką už korpuso ribų, kad įsitikintumėte, jog komponentai veikia. Visos kilusios problemos turi būti išspręstos prieš dedant jas į korpuso vidų.

6 žingsnis: elektronika į korpusą

Kai išbandysite elektroniką ir būsite patenkinti jų rezultatais, pradėkite juos dėti į korpusą. Sureguliuokite laidų ilgį taip, kad jie patogiai tilptų viduje.

7 žingsnis: galutinis bandymas

Įdėję į korpusą, dar kartą viską išbandykite. Jei viskas veikia taip, kaip tikėjotės, sveikiname! Jūs padarėte pardavimo automatą.

8 žingsnis: „Arduino“kodas + nuorodos

Atsisiuntimai:

Arduino kodas

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

„SolidWorks“aplankas su dalių failais ir surinkimu

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

Jei tuo atveju kažkas nutiko su nuoroda, čia yra visiškai rodomas arduino kodas. Arduino kodas <<

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

const int stepsPerRevolution = 200; const baitas ROWS = 4; // keturios eilutės const baitas COLS = 3; // trijų stulpelių simbolių klavišai [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; baitų rowPins [ROWS] = {5, 6, 7, 8}; // prisijungti prie klaviatūros eilučių baitų colPins [COLS] = {2, 3, 4}; // prisijungti prie klaviatūros stulpelių kontaktų Klaviatūros klaviatūra = klaviatūra (makeKeymap (klavišai), rowPins, colPins, ROWS, COLS); Adafruit_MotorShield AFMS1 = Adafruit_MotorShield (); Adafruit_StepperMotor *myMotor1 = AFMS1.getStepper (-200, 1); Adafruit_StepperMotor *myMotor2 = 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 *myMotor5 = AFMS3.getStepper (-200, 1); Adafruit_StepperMotor *myMotor6 = AFMS3.getStepper (-200, 2); Adafruit_MotorShield AFMS4 = Adafruit_MotorShield (0x63); Adafruit_StepperMotor *myMotor7 = AFMS4.getStepper (-200, 1); Adafruit_StepperMotor *myMotor8 = AFMS4.getStepper (-200, 2); „LiquidCrystal lcd“(1, 11, 9, 10, 12, 13); // Skaitmeniniai kaiščiai, prie kurių LCD yra prijungtas prie // Konstantos // // pin sąskaitos patvirtintojo kredito (-) eilutės const int billValidator = 22;

// Kintamieji /

/ įrašant impulsų trukmę (milisekundes), nepasirašytą ilgą laiką;

// laikydami visus įrašytus dolerius int dollarCounter = 0; void setup () {lcd.begin (16, 1); // nustatyti LCD teksto koordinates lcd.print ("Įterpti tik $ 1"); // Nustatyti tekstą Serial.begin (9600); // Inicijuoti nuoseklius prievadus ryšiui. Serial.println ("Stepper testas!"); // Įveskite Stepper Test serijiniame monitoriuje, kad žinotume, kuris žingsninis variklis yra paspaustas. AFMS1.begin (); AFMS2.begin (); AFMS3.pradėti (); AFMS4.begin (); myMotor1-> setSpeed (100); // Nustatykite variklio greitį, kuriuo jie veiks myMotor2-> setSpeed (100); myMotor3-> setSpeed (100); myMotor4-> setSpeed (100); myMotor5-> setSpeed (100); myMotor6-> setSpeed (100); myMotor7-> setSpeed (100); myMotor8-> setSpeed (100); // Sąskaitų patvirtinimo priemonės ir mygtuko pinMode nustatymai (billValidator, INPUT); // Nustato bilietinį receptorių

// Inicijuoti nuoseklius prievadus ryšiui. Serial.begin (9600); Serial.println ("Laukiama dolerio …"); } void loop () {{duration = pulseIn (billValidator, HIGH); // Pradeda ieškoti impulsų ilgio, gauto iš sąskaitos priėmėjo, jei (trukmė> 12000) // Vertę, kurią ji turi viršyti, kad ji būtų patvirtinta kaip apdorotas ir autentiškas doleris {// Count dollar dollarCounter ++; // Tikrinama, ar suprantama Serial.print ("Aptiktas doleris. / N Iš viso:"); // Rodyti naujų dolerių skaičių Serial.println (dollarCounter); // kilpa, kad palauktum, kol bus paspaustas mygtukas, kol (trukmė> 12000) {char key = keypad.getKey (); // prijungia raktų apkrovą ir pradeda matyti, kuris iš jų paspaudžiamas, jei (klavišas! = NO_KEY) {// ieškos klavišo paspaudimo Serial.println (raktas); // praneša mums, kuris iš jų buvo paspaustas serijiniame monitoriuje} {{if (key == '1') {// Jei paspaudžiamas 1 klavišas, tai daroma taip: int keyPressed = key - '1'; myMotor8-> žingsnis (580, Į priekį, DUPLAS); // Paleidžia variklį ir sukasi 350 laipsnių į priekį. myMotor8-> release (); // Išleidžia variklį iš padėties, kai ji laikosi vietoje. grįžti; // Grįžta į ciklo kodo pradžią}

if (key == '2') {// Jei paspaudžiamas 2 klavišas, tai daroma taip: int keyPressed = klavišas - '2'; myMotor7-> žingsnis (400, Į priekį, DUPLAS); // Paleidžia variklį ir sukasi 350 laipsnių į priekį. myMotor7-> release (); // Išleidžia variklį iš padėties, kai ji laikosi vietoje. grįžti; // Grįžta į ciklo kodo pradžią}, jei (klavišas == '3') {// Jei paspaudžiamas 3 klavišas, tai daroma taip: int keyPressed = key - '3'; myMotor6-> žingsnis (400, Į priekį, DUPLAS); // Paleidžia variklį ir sukasi 350 laipsnių į priekį. myMotor6-> release (); // Išleidžia variklį iš padėties, kai ji laikosi vietoje. grįžti; // Grįžta į ciklo kodo pradžią}, jei (klavišas == '4') {// Jei paspaudžiamas 4 klavišas, tai daroma taip: int keyPressed = key - '4'; myMotor5-> žingsnis (180, Į priekį, DUPLAS); // Paleidžia variklį ir sukasi 350 laipsnių į priekį. myMotor5-> release (); // Atleidžia variklį iš padėties, kai jis laikosi vietoje. grįžti; // Grįžta į ciklo kodo pradžią}, jei (klavišas == '5') {// Jei paspaudžiamas 5 klavišas, tai daroma taip: int keyPressed = key - '5'; myMotor4-> žingsnis (6900, Į priekį, DUPLAS); // Paleidžia variklį ir sukasi 350 laipsnių į priekį. myMotor4-> release (); // Atleidžia variklį iš padėties, kai jis laikosi vietoje. grįžti; // Grįžta į ciklo kodo pradžią}, jei (klavišas == '6') {// Jei paspaudžiamas 6 klavišas, tai daroma taip: int keyPressed = key - '6'; myMotor3-> žingsnis (400, Į priekį, DUPLAS); // Paleidžia variklį ir sukasi 350 laipsnių į priekį. myMotor3-> release (); // Atleidžia variklį iš padėties, kai jis laikosi vietoje. grįžti; // Grįžta į ciklo kodo pradžią}, jei (klavišas == '7') {// Jei paspaudžiamas 7 klavišas, tai daroma taip: int keyPressed = key - '7'; myMotor7-> žingsnis (400, Į priekį, DUPLAS); // Paleidžia variklį ir sukasi 350 laipsnių į priekį. myMotor7-> release (); // Atleidžia variklį iš padėties, kai jis laikosi vietoje. grįžti; // Grįžta į ciklo kodo pradžią}, jei (klavišas == '8') {// Jei paspaudžiamas klavišas 8, tai daroma taip: int keyPressed = key - '8'; myMotor8-> žingsnis (400, Į priekį, DUPLAS); // Paleidžia variklį ir sukasi 350 laipsnių į priekį. myMotor8-> release (); // Atleidžia variklį iš padėties, kai jis laikosi vietoje. grįžti; // Grįžta į ciklo kodo pradžią}}}}}} >>

Rekomenduojamas: