Բովանդակություն:

$ 1 Arduino- ի վրա հիմնված ավտոմատ `8 քայլ
$ 1 Arduino- ի վրա հիմնված ավտոմատ `8 քայլ

Video: $ 1 Arduino- ի վրա հիմնված ավտոմատ `8 քայլ

Video: $ 1 Arduino- ի վրա հիմնված ավտոմատ `8 քայլ
Video: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, Հուլիսի
Anonim
Image
Image
Պատյան
Պատյան

Մենք մեր գաղափարը ստացել ենք մեր ինժեներական ուսուցչից. Մենք բոլորս կարծում էինք, որ լավ գաղափար կլիներ մեր դասի համար վաճառող մեքենա ունենալ, և նա ասաց. «Լավ, պատրաստիր»: Պարզվեց, որ վաճառող մեքենան կլինի հիանալի ավագ նախագիծ, և երբ ավարտվի, այն կգործի որպես դրամահավաք մեր ինժեներական ծրագրի համար:

Այն կոչվում է $ 1 ավտոմատ ոչ թե այն պատճառով, որ դրա պատրաստումն արժե $ 1, այլ պարզապես այն պատճառով, որ հաշիվ ընդունողն ավելի հին մոդել է, որը վերցնում է ընդամենը 1 ԱՄՆ դոլարի հաշիվներ:)

Քայլ 1: Չափանիշներ

Մենք ցանկանում էինք վաճառքի մեքենա, որը տեղավորվելու էր գրասեղանի վերևում և չափազանց բարձր չէր: Մենք վերցրեցինք սեղանի լայնության չափերը `համոզվելու համար, որ սեղանից կախված ավտոմատը չունենք:

Քայլ 2: պատյան

Պատյան
Պատյան
Պատյան
Պատյան
Պատյան
Պատյան

Մենք պատրաստեցինք մեր տուփը 19 դյույմ լայնությամբ 17 դյույմ երկարությամբ և 25 դյույմ բարձրությամբ: Մենք օգտագործեցինք CNC մեքենա `մեր փայտը կտրելու համար: Մենք օգտագործեցինք solidworks ՝ դեմքերը ձևավորելու համար, այնուհետև դրանք փոխակերպեցինք մեր CNC ծրագրաշարի գծագրման ֆայլերի տեսակների: Մենք եզրերը հղկեցինք, այնուհետև դրանք պտուտակեցինք 1 ¼ »-ով: Մենք ամրացրեցինք առջևի վահանակը ծխնով և օգտագործեցինք «պտուտակներ», որպեսզի պտուտակները մյուս կողմից չանցնեն: Մենք նաև օգտագործեցինք ակրիլային ապակի, որը մենք կտրեցինք դարակների և առջևի վահանակի համար:

Քայլ 3: Էլեկտրոնիկա

Էլեկտրոնիկա
Էլեկտրոնիկա
Էլեկտրոնիկա
Էլեկտրոնիկա
Էլեկտրոնիկա
Էլեկտրոնիկա
Էլեկտրոնիկա
Էլեկտրոնիկա

Արդուինո

Մենք օգտագործեցինք Arduino Mega 2560 տախտակ: Մենք նաև օգտագործեցինք Adafruit Motor Boards- ը, որպեսզի նրանք կարողանան գործարկել քայլող շարժիչները: Մենք ադաֆրուտի մեջ ավելացրեցինք քորոցներ, որպեսզի նրանք իրար միանան: Դրանք տեղադրվեցին մեկը մյուսի վրա: Յուրաքանչյուրը կարող է աշխատել 2 շարժիչով: Բացի այդ, նշեք, որ թռիչքը պետք է միացված լինի:

Սեղանի սնուցման աղբյուր

Bestek ATX էլեկտրամատակարարում ՝ ադապտորի միջոցով, էներգիան միացնելու համար: Ադապտորը sparkfun.com- ից է և ապահովում է տարբեր լարման:

Coils մեջ Motors

Մենք պատրաստեցինք solidworks մոդելներ `շարժիչը պահելու, կծիկը բռնելու և պարույրը դարակի երկայնքով ուղղորդելու համար: Մենք ebay- ից հասել էինք մեր կծիկներին և դրանք կտրում էինք չափերի: Մենք նաև ստիպված եղանք թեքել դրանցից 3 -ը, քանի որ ուղիղ ծայրերով 6 -ը չստացանք կծիկի ամրացմանը միանալու համար: Հետո մենք դրանք 3D տպեցինք և ամրացրեցինք դրանք կծիկին և շարժիչին: Այն stepper շարժիչները, որոնք մենք ունեինք, տեղադրեցինք լեռան մեջ: Այն կպահեր շարժիչը և կծիկը կառաջնորդեր ուղիղ ճանապարհով:

LCD և ստեղնաշար

Մենք օգտագործել ենք Arduino ստեղնաշար և LCD էկրան, որոնք միացված են հոսանքի աղբյուրի էներգիայի մատակարարման ադապտերի 5 Վ լարման և այնուհետև նույն Arduino տախտակին:

Հաղորդալարեր

Խորհուրդ ենք տալիս օգտագործել 18 չափիչ լարեր: Մեր դեպքում մենք ստիպված էինք փոխզիջման գնալ ՝ օգտագործելով տարբեր չափիչներ, քանի որ 18 չափիչ սարքը մեզ սպառեց

LED ժապավեն

Մեքենան լուսավորելու համար մենք օգտագործեցինք LED շերտ: Մենք այն միացրեցինք հոսանքի աղբյուրի ադապտերի 12 Վ լարման: Մեր կողմից օգտագործված LED շերտը բարեբախտաբար ուներ + և - որը հեշտացրեց այն միացնելու գործընթացը:

Քայլ 4: Bill Acceptor

Bill Acceptor
Bill Acceptor
Bill Acceptor
Bill Acceptor
Bill Acceptor
Bill Acceptor
Bill Acceptor
Bill Acceptor

Մենք որպես օրինագիծ ընդունող օգտագործեցինք Coinco BA30B: Այն պետք է ուղղակիորեն միացված լիներ պատին ՝ որպես էներգիայի աղբյուր: Մենք այն համակցեցինք atx էլեկտրամատակարարման 24 պինային ադապտերի հետ `միացնելու և ավելի հեշտ լարերը թույլ տալու համար: Մեր հետևած պինետները գտնվում են հետևյալ հղման մեջ.

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

Մեր դեպքում, մենք պետք է սար ստեղծեինք, որպեսզի բարձրացնեինք հաշիվների ընդունիչը, քանի որ հակառակ դեպքում այն շատ ցածր կլիներ մեր պատյանների համար:

Քայլ 5: Փորձարկում

Փորձարկեք պատյանից դուրս գտնվող էլեկտրոնիկան ՝ ապահովելու համար, որ բաղադրիչներն աշխատում են: Ariseանկացած խնդիր, որը ծագում է, պետք է լուծվի նախքան պատյանում դրանք տեղադրելը:

Քայլ 6: Էլեկտրոնիկա պատյանին

Երբ ստուգեք էլեկտրոնիկան և գոհ կլինեք դրանց արդյունքներից, սկսեք դրանք տեղադրել ձեր պատյանում: Կարգավորեք մետաղալարերի երկարությունները այնպես, որ դրանք հարմարավետ տեղավորվեն ներսում:

Քայլ 7: Վերջնական փորձարկում

Պատյանում դնելուց հետո ամեն ինչ նորից փորձարկեք: Եթե ամեն ինչ աշխատում է այնպես, ինչպես սպասում էիք, շնորհավորում ենք: Դուք վաճառքի մեքենա եք պատրաստել:

Քայլ 8: Arduino կոդ + հղումներ

Ներլցումներ:

Arduino կոդ

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

SolidWorks թղթապանակ `մաս ֆայլերով և հավաքով

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

Եթե հղման հետ ինչ -որ բան պատահի, ահա arduino կոդը ամբողջությամբ ցուցադրված է: Arduino կոդ <<

#ներառել #ներառել #ներառել "Arduino.h" #ներառել #ներառել #ներառել "օգտակար/Adafruit_MS_PWMServoDriver.h" #ներառել

const int stepsPerRevolution = 200; const բայթ ROWS = 4; // չորս տող const բայթ COLS = 3; // երեք սյունակ նշելու ստեղներ [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; բայթ rowPins [ROWS] = {5, 6, 7, 8}; // միանալ ստեղնաշարի բայթ colPins- ի տողերի pinouts- ին [COLS] = {2, 3, 4}; // միանալ ստեղնաշարի սյունակի ստեղնաշարերին Ստեղնաշարի ստեղնաշար = Ստեղնախումբ (makeKeymap (ստեղներ), 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); // Թվային կապում, որը lcd- ն միացված է // հաստատուններ // // քորոց օրինագծի վավերացնողի վարկի համար (-) տող const int billValidator = 22;

// փոփոխականներ /

/ զարկերակի տևողության գրանցում (միլիվայրկյաններ) չստորագրված երկար տևողություն;

// պահելով ընդհանուր դոլարները, որոնք գրանցված են int dollarCounter = 0; void setup () {lcd.begin (16, 1); // սահմանել lcd տեքստի կոորդինատները lcd.print («Տեղադրեք միայն $ 1»); // Սահմանել տեքստը Serial.begin (9600); // Նախնականացնել սերիական նավահանգիստները հաղորդակցության համար: Serial.println («Stepper test!»); // Սերիական մոնիտորի մեջ մուտքագրեք Stepper Test, որպեսզի իմանանք, թե որ stepper շարժիչը սեղմված է: AFMS1. սկսել (); AFMS2.begin (); AFMS3.begin (); AFMS4.begin (); myMotor1-> setSpeed (100); // Սահմանել շարժիչի արագությունը, որով նրանք կաշխատեն myMotor2-> setSpeed (100); myMotor3-> setSpeed (100); myMotor4-> setSpeed (100); myMotor5-> setSpeed (100); myMotor6-> setSpeed (100); myMotor7-> setSpeed (100); myMotor8-> setSpeed (100); // Պին կարգավորումներ հաշիվների վավերացման և կոճակի pinMode- ի համար (billValidator, INPUT); // Կարգավորում է կիսագլուխը

// Նախնականացնել հաղորդակցման սերիական նավահանգիստները: Serial.begin (9600); Serial.println («Սպասում է դոլարին…»); } void loop () {{duration = pulseIn (billValidator, HIGH); // Սկսում է փնտրել օրինագծի ընդունիչից ստացված զարկերակի երկարությունը, եթե (տևողությունը> 12000) // որի արժեքը պետք է գերազանցի, որպեսզի հաստատվի որպես վերամշակված և իսկական դոլար {// Count dollar dollarCounter ++; // Ստուգում է Serial.print ըմբռնման համար («Դոլարը հայտնաբերվեց: / n Ընդամենը ՝»); // dollarուցադրել դոլարի նոր հաշվարկ Serial.println (dollarCounter); // հանգույց ՝ սպասելու համար, մինչև որ կոճակը սեղմվի (տևողությունը> 12000) {char key = keypad.getKey (); // միանում է ստեղնաշարը և սկսում տեսնել, թե որն է սեղմված, եթե (key! = NO_KEY) {// որոնելու է սեղմված բանալին Serial.println (key); // մեզ տեղեկացնում է, թե որն է սեղմված սերիական մոնիտորի վրա} {if (key == '1') {// Եթե Key 1 սեղմված է, անում է հետևյալը. int keyPressed = key - '1'; myMotor8-> քայլ (580, ԱՌԱARD, ԿՐԿՆԱԿ); // Սկսում է Շարժիչը և պտտվում 350 աստիճանով դեպի առաջ: myMotor8-> թողարկում (); // Ազատում է շարժիչը ինքն իրեն տեղում պահելու վիճակից: վերադարձ; // Վերադառնում է հանգույցի սկզբի սկզբին}

if (key == '2') {// Եթե Key 2 սեղմված է, անում է հետևյալը. int keyPressed = key - '2'; myMotor7-> քայլ (400, ԱՌԱARD, ԿՐԿՆԱԿ); // Սկսում է Շարժիչը և պտտվում 350 աստիճանով դեպի առաջ: myMotor7-> թողարկում (); // Ազատում է շարժիչը ինքն իրեն տեղում պահելու վիճակից: վերադարձ; // Վերադառնում է օղակի կոդի սկզբին} if (key == '3') {// Եթե Key 3 -ը սեղմված է, անում է հետևյալը. Int keyPressed = key - '3'; myMotor6-> քայլ (400, ԱՌԱARD, ԿՐԿՆԱԿ); // Սկսում է Շարժիչը և պտտվում 350 աստիճանով դեպի առաջ: myMotor6-> թողարկում (); // Ազատում է շարժիչը ինքն իրեն տեղում պահելու վիճակից: վերադարձ; // Վերադառնում է օղակի կոդի սկիզբ} if (key == '4') {// Եթե Key 4 սեղմված է, անում է հետևյալը. Int keyPressed = key - '4'; myMotor5-> քայլ (180, ԱՌԱARD, ԿՐԿՆԱԿ); // Սկսում է Շարժիչը և պտտվում 350 աստիճանով դեպի առաջ: myMotor5-> թողարկում (); // Ազատում է շարժիչը ինքն իրեն տեղում պահելու վիճակից: վերադարձ; // Վերադառնում է օղակի կոդի սկզբին} if (key == '5') {// Եթե Key 5 սեղմված է, անում է հետևյալը. Int keyPressed = key - '5'; myMotor4-> քայլ (6900, ԱՌԱARD, ԿՐԿՆԱԿ); // Սկսում է Շարժիչը և պտտվում 350 աստիճանով դեպի առաջ: myMotor4-> թողարկում (); // Ազատում է շարժիչը ինքն իրեն տեղում պահելու վիճակից: վերադարձ; // Վերադառնում է հանգույցի սկզբին} if (key == '6') {// Եթե Key 6 -ը սեղմված է, անում է հետևյալը. Int keyPressed = key - '6'; myMotor3-> քայլ (400, ԱՌԱARD, ԿՐԿՆԱԿ); // Սկսում է Շարժիչը և պտտվում 350 աստիճանով դեպի առաջ: myMotor3-> թողարկում (); // Ազատում է շարժիչը ինքն իրեն տեղում պահելու վիճակից: վերադարձ; // Վերադառնում է օղակի կոդի սկզբին} if (key == '7') {// Եթե 7 -րդ բանալին սեղմված է, անում է հետևյալը. Int keyPressed = key - '7'; myMotor7-> քայլ (400, ԱՌԱARD, ԿՐԿՆԱԿ); // Սկսում է Շարժիչը և պտտվում 350 աստիճանով դեպի առաջ: myMotor7-> թողարկում (); // Ազատում է շարժիչը ինքն իրեն տեղում պահելու վիճակից: վերադարձ; // Վերադառնում է օղակի կոդի սկզբին} if (key == '8') {// Եթե ստեղնը 8 սեղմված է, անում է հետևյալը. Int keyPressed = key - '8'; myMotor8-> քայլ (400, ԱՌԱARD, ԿՐԿՆԱԿ); // Սկսում է Շարժիչը և պտտվում 350 աստիճանով դեպի առաջ: myMotor8-> թողարկում (); // Ազատում է շարժիչը ինքն իրեն տեղում պահելու վիճակից: վերադարձ; // Վերադառնում է օղակի կոդի սկզբին}}}}}} >>

Խորհուրդ ենք տալիս: