Мазмуну:

Arduino: Pinball Machine: 8 кадам (Сүрөттөр менен)
Arduino: Pinball Machine: 8 кадам (Сүрөттөр менен)

Video: Arduino: Pinball Machine: 8 кадам (Сүрөттөр менен)

Video: Arduino: Pinball Machine: 8 кадам (Сүрөттөр менен)
Video: Ал кууп чыкты! ~ Голландиялык иммигранттардын таштап кеткен үйү 2024, Июнь
Anonim
Image
Image

Мен дайыма pinball машиналарын жана электрониканы жакшы көргөндүктөн, мен өзүмдүн пинбол машинамды жасоону чечтим. Мен Arduinoну программалоо жана электроника үчүн тандап алдым, анткени бул абдан жеткиликтүү платформа, ал компакт жана колдонууга оңой.

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

1 -кадам: Ишти куруу

Ишти куруу
Ишти куруу

Пинбол машинасынын корпусунан баштайлы. Мен абдан жөнөкөй курулуш жасадым. Мен астыңкы табакты кыркып, бурчтардагы 4 кичинекей жыгач мамыны дубалдын бөлүктөрүн туташтыруу үчүн колдондум. Капчыгыңыздын өлчөмү - бул сиздин жеке тандооңуз, мен аны оригиналдуу пинбол машинасынан бир аз кичирээк кылууну чечтим, анткени мен боштукту толтуруу үчүн кандайдыр бир супер укмуштуудай кошумча кошууну пландаштырган эмесмин. Корпусту мүмкүн болушунча туруктуу кылуу үчүн бурамалар менен клейлерди колдондум. Арткы жагында мен эки буту үчүн полдун бөлүгүндө эки тешик бургуладым, бул пинбол машинасына эң сонун жантыкты берет. Дагы, буттардын бийиктиги сизден көз каранды. Бутуңузду канчалык бийик кылсаңыз, топ ошончолук ылдам айланат (ылдый).

2 -кадам: Flipper механикасын куруу

Flipper Механикти куруу
Flipper Механикти куруу

Мен бул долбоордун баасын чектегим келгендиктен, электрондук эмес, толугу менен механикалык сүзгүчтөрдү жасоону чечтим. Эгерде сизди электрондук сүзгүчтөр кызыктырса, анда бир аз окшош конструкцияны колдонсоңуз болот, бирок ага "соленоид" деп аталган туташтырылган (фланецтерди башкаруу үчүн жетиштүү күчкө ээ соленоиддер мен үчүн өтө кымбат болчу).

Мен эки флиппердин айлануу чекити үчүн астынкы эки тешикти буруудан баштадым. Мен тешиктерди бурдум (менин оюмча) бири -бирине өтө жакын, бул оюндун акырында бир аз жеңил болушуна алып келди. Андыктан, оюндун оңой стилин каалабасаңыз, сүзгүчтөрдү бири -бирине өтө жакын коюудан сак болуңуз.

Мен дагы каптал дубалдарында эки тешикти сүзгүч тешиктерге параллель кылып бургуладым. Бул тешиктер эки флиппер баскычы үчүн колдонулушу керек.

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

3 -кадам: Дубалдарды коюу

Дубалдарды жайгаштыруу
Дубалдарды жайгаштыруу

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

4 -кадам: Эсептөө блокторун кошуу

Эсептөө блокторун кошуу
Эсептөө блокторун кошуу
Эсептөө блокторун кошуу
Эсептөө блокторун кошуу

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

Мен шыпыргынын кичинекей бөлүгүн кырып, жез зымды ороп алдым. Arduino бул жез зымын дайыма 5В менен иштетет. Мен топ менен жакшыраак байланышуу үчүн төрт калем пружинаны капталга lehdim.

Эсептин блокторунун иштөө жолу, бул топ Arduinoго кирүүчү пинге алып баруучу схеманы бүтүрөт. Ошентип, мен корпустун ылдый жагындагы алюминий фольганы скотч менен (жезге тийгизбей) жана фольганы Arduinoдогу пинге чейин байладым. Топ жезге да, алюминийге да тийгенде, схема бүтүп, Arduino сигнал алат.

Мен бардык блокторду алюминий фольга менен бириктирдим, бирок жабышчаак тарап электр өткөрбөсүн унутпаңыз.

5 -кадам: Байланыш аркылуу Оюн кошуу

Байланыш аркылуу Оюн кошуу
Байланыш аркылуу Оюн кошуу

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

6 -кадам: Кабелдик тешиктерди бургулоо

Кабелдик тешиктерди бургулоо
Кабелдик тешиктерди бургулоо
Кабелдик тешиктерди бургулоо
Кабелдик тешиктерди бургулоо
Кабелдик тешиктерди бургулоо
Кабелдик тешиктерди бургулоо

Баарын Arduinoго чейин өткөрө баштоодон мурун, кабелдер үчүн бир нече тешик жасашыбыз керек. Мен алюминий фольгасынын эки бөлүгүн тең тешип чыктым, андыктан алюминий фольгада бир тешик блокторго жакын, ал эми алюминий фольгада оюндун жанында бир тешик бар.

Мындан тышкары, мен дагы сол жактын түбүндө, дубалдардын ортосунда, кошумча шар дарбазасы Servoго алып баруучу кабель үчүн тешик жасадым.

Төмөндө ЖКга туташкан кабель үчүн тешик да болушу керек.

7 -кадам: Баарын зымга өткөрүү

Wiring Up Up
Wiring Up Up
Wiring Up Up
Wiring Up Up

Мен бул схеманы бардык кабелдер кайда кетиши керек экенин жакшыраак карап чыгуу үчүн жасадым. Кресттер - бул кабелдер туташкан чекиттер. Бардыгын бир аз туруктуу жана ишенимдүү кылуу үчүн мүмкүн болушунча көбүрөөк ширетүүгө аракет кылдым. Электр өткөргүчтөрү бир аз убакытты талап кылат, бирок бул бүткөндөн кийин сиз дээрлик жетип калдыңыз!

8 -кадам: Кодду жүктөө

Пинбол машинаңыздын иштеши үчүн төмөнкү кодду Arduinoго жүктөңүз!

// LCD үчүн китепкананы кошуу

#кошуу #кошуу

// lcd маалымат казыктарын баштоо

LiquidCrystal lcd (7, 8, 9, 10, 11, 12);

// Серво түзүңүз

Servo ballGateServo;

// Биз колдонгон казыктар үчүн өзгөрмөлөрдү түзүңүз

int gameoverPin = 6; int scorePin = 5; int speakerPin = 4; int ballGateServoPin = 3;

// Пинбол машинасы үчүн ойноо өзгөрмөлөрүн баштоо

int score = 0; int highscore = 500; bool highscoreReached = false; int balls = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// бул кодду биринчи алкакта бир жолу иштетүү

void setup () {// Биз колдонуп жаткан pinMode үчүн pinMode орнотуу (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// туурасын жана бийиктигин берүү менен LCDди баштаңыз

lcd.begin (16, 2);

// Топтун дарбазасынын сервосун тиешелүү пинге бекит

ballGateServo.attach (ballGateServoPin);

// Дарбаза сервосун баштапкы абалга келтирүү

ballGateServo.write (0); }

// Бул кодду ар бир кадрда иштетүү

void loop () {// пин оюптерин int gameoverState = digitalRead (gameoverPin) басып алыңыз; int scoreState = digitalRead (scorePin);

// Кирүү алынган болсо, баллга кошуңуз

if (scoreState) {тон (SpeakerPin, 1000); балл += 10; } else {noTone (4); }

// Ойнотуу чуңкуру иштетилсе, топтордон алып салуу

if (gameoverState and! gameoverTriggered) {шарлар -= 1; gameoverTriggered = true; gameoverTimer = gameoverTimerDuration; }

// Топ оюн үстүндөгү байланышка тийбей калса эле, оюн таймерин баштаңыз

if (! gameoverState) {if (gameoverTimer> = 1) {gameoverTimer -= 1; } else {gameoverTriggered = false; }}

// Оюн үстүндөгү текстти LCDге ирмеп, эсеби менен шарларды баштапкы абалга келтирүү

if (шарлар <= 0) {lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); кечигүү (250); lcd.print ("ОЮН БУТТУ"); lcd.setCursor (0, 1); lcd.print ("Кайталап көрөсүңбү?"); кечигүү (250); } lcd.clear (); балл = 0; ballGateServo.write (0); highscoreReached = жалган; шарлар = 3; }

if (score> highscore and! highscoreReached) {

lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); кечигүү (250); lcd.print ("NEW HIGHSCORE"); lcd.setCursor (0, 1); lcd.print ("Күтүлбөгөн өлүм!"); кечигүү (250); } lcd.clear (); шарлар = 1; ballGateServo.write (120); жогорку упай = упай; highscoreReached = чындык; }

// Учурдагы упай жогору болсо, жогорку упайларды жаңыртыңыз

if (score> highscore) {highscore = score; }

// Курсорду 0 сапка коюңуз

lcd.setCursor (0, 0); // Учурдагы (жогорку) баллды lcdге басып чыгарыңыз, эгерде (балл <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } else {lcd.print ("Score:" + String (score) + ""); }

// Курсорду 1 -сапка коюңуз

lcd.setCursor (0, 1);

// Топтордун учурдагы суммасын lcdге басып чыгаруу

lcd.print ("Balls:" + String (шарлар)); }

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