Мазмуну:

$ 1 Arduino негизделген автомат: 8 кадам
$ 1 Arduino негизделген автомат: 8 кадам

Video: $ 1 Arduino негизделген автомат: 8 кадам

Video: $ 1 Arduino негизделген автомат: 8 кадам
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Ноябрь
Anonim
Image
Image
Корпус
Корпус

Биз өзүбүздүн идеябызды инженердик мугалимибизден алдык - баарыбыз классыбыз үчүн автоматтын болушун жакшы деп ойлогонбуз жана ал: "сонун, жаса" деди. Көрсө, соода автоматы улуу улук долбоор болмокчу жана ал бүткөндө биздин инженердик программабыз үчүн каражат чогултуучу болуп иштей турган болду.

Ал 1 долларлык автомат деп аталат, анткени аны жасоо 1 доллар турат, бирок жөн гана векселди кабыл алуучу эски модель болгондуктан, болгону 1 долларлык векселдерди алат:)

1 -кадам: Критерийлер

Биз столдун үстүнө отурган жана өтө узун эмес автоматты кааладык. Биз столдун үстүндө илинип турган автомат жок экенине ынануу үчүн столдун туурасынын өлчөмдөрүн алдык.

2 -кадам: Корпус

Корпус
Корпус
Корпус
Корпус
Корпус
Корпус

Биз кутучабызды 19 дюйм узундукта 17 дюймга 25 дюймга узарттык. Биз жыгачты кесүү үчүн CNC машинасын колдондук. Биз беттерди долбоорлоо үчүн катуу жумуштарды колдондук, анан аларды CNC программабыз үчүн файлдардын түрлөрүнө айландырдык. Биз четтерин тегиздеп, анан 1 ¼ менен бурап койдук ». Биз алдыңкы панелди илгич менен бекитип, бурамалар башка тарапка өтпөшү үчүн ¼ “бурамаларын колдондук. Биз ошондой эле текчелер жана алдыңкы панель үчүн кесип алган Акрил айнекти колдондук.

3 -кадам: Электроника

Электроника
Электроника
Электроника
Электроника
Электроника
Электроника
Электроника
Электроника

Arduino

Биз Arduino Mega 2560 тактасын колдондук. Биз ошондой эле Adafruit мотор такталарын колдонгонбуз, алар тепкичтүү моторлорду иштетиши үчүн. Бири -бирине туташуусу үчүн биз адафрутка төөнөгүчтөрдү коштук. Аларды бири -биринин үстүнө салышты. Ар бири 2 моторду иштете алат. Ошондой эле, секиргич туташтырылышы керек экенин эске алыңыз.

Иш столунун энергия менен камсыздалышы

Bestek ATX Электр энергиясы менен камсыз кылуу үчүн адаптер колдонулат. Адаптер sparkfun.com сайтынан алынган жана ар кандай чыңалууларды камсыздайт.

Моторго айланат

Биз моторду кармап туруу, катушка кармоо жана катушканы текче бою жетектөө үчүн solidworks моделдерин жасадык. Биз ebayден катуштарыбызга жетип, аларды өлчөмүнө чейин кесип салдык. Катушкага туташуу үчүн түз учтары менен 6 ала албаганыбыз үчүн, биз алардын 3үн бүгүшүбүз керек болчу. Андан кийин биз аларды 3D басып чыгардык жана аларды катушка жана моторго бекиттик. Бизде болгон тепкич моторлор, биз тоого салып койдук. Бул моторду кармап, катушка түз жолдо баратат.

LCD жана баскычтоп

Биз Arduino клавиатурасын жана ЖК экранын кубат үчүн адаптердеги 5В коргошунга, анан ошол эле Arduino тактасына туташтырдык.

Электр өткөргүчтөрү

Биз 18 калибрлүү зымдарды колдонууну сунуштайбыз. Бизде 18 өлчөөчү түгөнгөндүктөн ар кандай өлчөгүчтөрдү колдонуу менен компромисске барууга туура келди

LED Strip

Биз машинаны жарыктандыруу үчүн LED тилкесин колдондук. Биз аны электр менен камсыздоо адаптериндеги 12В коргошунга туташтырдык. Биз колдонгон LED тилкесинде + жана - бар, бул аны туташтыруу процессин жеңилдетти.

4 -кадам: Билл кабыл алуучу

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

Биз эсепти кабыл алуучу катары Coinco BA30B колдондук. Ал электр булагы катары түз эле дубалга туташтырылышы керек болчу. Биз аны 24-пин адаптери менен бириктирип, электр тогуна туташтырып, зымдарды оңой өткөрүүгө мүмкүнчүлүк бердик. Биз ээрчиген pinouts төмөнкү шилтемеде:

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

Биздин учурда, биз мыйзам долбоорунун акцепторун көтөрүү үчүн тетикти түзүшүбүз керек болчу, антпесе бул биздин корпусубуз үчүн өтө төмөн болмок.

5 -кадам: Тестирлөө

Компоненттердин иштешин камсыз кылуу үчүн алгач электрониканы корпустун сыртында сынап көрүңүз. Пайда болгон бардык маселелер аларды корпустун ичине жайгаштыруудан мурун чечилиши керек.

6 -кадам: Электроника корпусуна

Электрониканы сынап көрүп, анын жыйынтыгына канааттанган соң, аларды корпусуна салып баштаңыз. Зымдын узундугун ичине ыңгайлуу кылып тууралаңыз.

7 -кадам: Акыркы тестирлөө

Корпуска салынгандан кийин, бардыгын кайра сынап көрүңүз. Эгерде баары сиз күткөндөй болсо, куттуктайм! Сиз автомат саттыңыз.

8 -кадам: Arduino Code + Шилтемелер

Жүктөөлөр:

Arduino коду

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

SolidWorks Папкасы файлдары жана чогултуусу менен

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

Шилтемеге бир нерсе болгон учурда, бул жерде ардуино коду толугу менен көрсөтүлөт. Arduino коду <<

#кошуу #кошуу #кошуу "Arduino.h" #кошуу #кошуу #кошуу "утилита/Adafruit_MS_PWMServoDriver.h" #кошуу

const int stepsPerRevolution = 200; const байт ROWS = 4; // төрт катар const байт COLS = 3; // үч мамыча char баскычтары [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; байт rowPins [ROWS] = {5, 6, 7, 8}; // клавиатуранын байт colPins'инин катарына туташуу [COLS] = {2, 3, 4}; // клавиатуранын мамыча түйүндөрүнө туташуу Баскычтоп баскычы = Баскычтоп (makeKeymap (key), 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); // Digital Pins 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ди териңиз, ошондо биз кайсы мотор басылганын билебиз. AFMS1.begin (); 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 Бардыгы:"); // Доллардын жаңы санын көрсөтүү Serial.println (dollarCounter); // цикл (качан узактыгы> 12000) {char key = keypad.getKey (); // клавиатураны туташтырат жана кайсы басылганын көрө баштайт, эгерде (key! = NO_KEY) {// басылган баскычты издей турган Serial.println (key); // сериялык монитордо} {if (key == '1') {// 1 баскычы басылганда, төмөнкүлөрдү аткарат: int keyPressed = key - '1'; myMotor8-> кадам (580, АЛГА, КОШ); // Моторду иштетет жана алдыга карай 350 градуска айланат. myMotor8-> release (); // Моторду өзүн кармап турган абалынан бошотот. кайтуу; // Циклдин башына кайтат}

if (key == '2') {// 2 -баскыч басылса, төмөнкүлөрдү аткарат: int keyPressed = key - '2'; myMotor7-> кадам (400, АЛГА, КОШ); // Моторду иштетет жана алдыга карай 350 градуска айланат. myMotor7-> release (); // Моторду өзүн кармап турган абалынан бошотот. кайтуу; // Цикл кодунун башына кайтат} if (key == '3') {// 3 -баскыч басылса, төмөнкүлөрдү аткарат: int keyPressed = key - '3'; myMotor6-> кадам (400, АЛГА, КОШ); // Моторду иштетет жана алдыга карай 350 градуска айланат. myMotor6-> release (); // Моторду өзүн кармап турган абалынан бошотот. кайтуу; // цикл кодунун башына кайтат} if (key == '4') {// 4 -баскыч басылса, төмөнкүлөрдү аткарат: int keyPressed = key - '4'; myMotor5-> кадам (180, АЛГА, КОШ); // Моторду иштетет жана алдыга карай 350 градуска айланат. myMotor5-> release (); // Моторду өзүн кармап турган абалынан бошотот. кайтуу; // цикл кодунун башына кайтат} if (key == '5') {// 5 -баскыч басылса, төмөнкүлөрдү аткарат: int keyPressed = key - '5'; myMotor4-> кадам (6900, АЛГА, КОШ); // Моторду иштетет жана алдыга карай 350 градуска айланат. myMotor4-> release (); // Моторду өзүн кармап турган абалынан бошотот. кайтуу; // цикл кодунун башына кайтат} if (key == '6') {// 6 -баскыч басылса, төмөнкүлөрдү аткарат: int keyPressed = key - '6'; myMotor3-> кадам (400, АЛГА, КОШ); // Моторду иштетет жана алдыга карай 350 градуска айланат. myMotor3-> release (); // Моторду өзүн кармап турган абалынан бошотот. кайтуу; // цикл кодунун башына кайтат} if (key == '7') {// 7 -баскыч басылса, төмөнкүлөрдү аткарат: int keyPressed = key - '7'; myMotor7-> кадам (400, АЛГА, КОШ); // Моторду иштетет жана алдыга карай 350 градуска айланат. myMotor7-> release (); // Моторду өзүн кармап турган абалынан бошотот. кайтуу; // Цикл кодунун башына кайтат} if (key == '8') {// 8 -баскыч басылса, төмөнкүлөрдү аткарат: int keyPressed = key - '8'; myMotor8-> кадам (400, АЛГА, КОШ); // Моторду иштетет жана алдыга карай 350 градуска айланат. myMotor8-> release (); // Моторду өзүн кармап турган абалынан бошотот. кайтуу; // Циклдин башына кайтат}}}}}} >>

Сунушталууда: