Სარჩევი:

Arduino: Pinball მანქანა: 8 ნაბიჯი (სურათებით)
Arduino: Pinball მანქანა: 8 ნაბიჯი (სურათებით)

ვიდეო: Arduino: Pinball მანქანა: 8 ნაბიჯი (სურათებით)

ვიდეო: Arduino: Pinball მანქანა: 8 ნაბიჯი (სურათებით)
ვიდეო: CS50 2014 - Week 7 2024, ნოემბერი
Anonim
Image
Image

რადგან მე ყოველთვის მიყვარდა პინბოლის მანქანები და ელექტრონიკა, გადავწყვიტე ავაშენო ჩემი საკუთარი პინბოლის მანქანა. მე ავირჩიე Arduino პროგრამირებისა და ელექტრონიკისთვის, რადგან ეს არის ძალიან ხელმისაწვდომი პლატფორმა, რომელიც არის როგორც კომპაქტური, ასევე მარტივი.

ამ სახელმძღვანელოში მე ავუხსნი ჩემს განვითარების პროცესს, ასე რომ, ალბათ ერთ თქვენგანს აღფრთოვანებულს შეეძლო რაიმე მსგავსი შეექმნა.

ნაბიჯი 1: საქმის აგება

საქმის მშენებლობა
საქმის მშენებლობა

დავიწყოთ პინბოლის აპარატით. საკმაოდ მარტივი კონსტრუქცია გავაკეთე. მე დავინახე ქვედა ფირფიტა და გამოვიყენე 4 პატარა ხის სვეტი კუთხეებში კედლის ნაჭრების დასაკავშირებლად. თქვენი საქმის ზომა თქვენი არჩევანია, მე ავირჩიე ის უფრო პატარა გამეხადა, ვიდრე ორიგინალური პინბოლის მანქანა, რადგან არ ვგეგმავდი რაიმე სუპერ სანახაობრივი დამატებების დამატებას სივრცის შესავსებად. მე ორივე ხრახნი და წებო გამოვიყენე, რათა საქმე მაქსიმალურად გამყარებულიყო. უკანა ნაწილში მე გავხსენი ორი ხვრელი იატაკის ნაჭერში ორი ფეხისთვის, რაც პინბოლის მანქანას ხატისებრ დახრილობას მისცემს. ისევ და ისევ, ფეხების სიმაღლე თქვენზეა დამოკიდებული. რაც უფრო მაღალი გახდებით ფეხები, მით უფრო სწრაფად გადატრიალდება ბურთი (ქვევით).

ნაბიჯი 2: ფლიპერის მექანიკის მშენებლობა

ფლიპერის მექანიკის მშენებლობა
ფლიპერის მექანიკის მშენებლობა

რადგან მინდოდა ამ პროექტის ღირებულების შეზღუდვა, მე გადავწყვიტე ელექტრონული ნაცვლად გამეკეთებინა სრულად მექანიკური ფლიპერები. თუ თქვენ დაინტერესებული ხართ ელექტრონული ფლიპერებით, შეგიძლიათ გამოიყენოთ კონსტრუქცია, რომელიც გარკვეულწილად ერთი და იგივეა, მაგრამ მასთან დაკავშირებული ეგრეთწოდებული "სოლენოიდით" (სოლენოიდები, რომლებსაც აქვთ საკმარისი ძალა ფლიპერების გასაკონტროლებლად, ჩემთვის ძალიან ძვირი ღირდა).

დავიწყე ბოლოში ორი ხვრელის გაბურღვით ორივე ფლიპერის საყრდენი წერტილისთვის. მე გავაღე ხვრელები (ჩემი აზრით) ერთმანეთთან ძალიან ახლოს და ამან საბოლოოდ თამაში ძალიან ადვილი გახადა. ასე რომ ფრთხილად იყავით, რომ ფლიპერები ერთმანეთთან ძალიან ახლოს არ განათავსოთ, თუ არ გინდათ მარტივი თამაშის სტილი.

მე ასევე გავაღე ორი ხვრელი ორივე მხარეს კედლებში პარალელურად ფლიპერის ხვრელების. ეს ხვრელები უნდა იქნას გამოყენებული ორი მბრუნავი ღილაკისთვის.

მე გამოვიყენე ზამბარები ფლიპერების დასაბრუნებლად პირვანდელ მდგომარეობაში და გავაკეთე მბრუნავი კონსტრუქცია ფლიპერებსა და ღილაკებს შორის, რათა გადატრიალებულიყო ღილაკების დაჭერისას. ზამბარები ფლიპერების უკან დახევისგან რომ შევაჩერო, ორი ხრახნი მოვათავსე, რომ ფლიპერები პირვანდელ მდგომარეობაში შეენარჩუნებინათ.

ნაბიჯი 3: კედლების განთავსება

კედლების განთავსება
კედლების განთავსება

რამოდენიმე კედელი მოვათავსე პინბოლის გადასატანად ფლიპერებისკენ. მათი დამზადება ძალიან მარტივია. უბრალოდ გააკეთეთ 3 ხვრელი ქეისის ქვედა ნაწილში და ჩაყარეთ სამი ხის ქინძისთავი. გადაიტანეთ რეზინის ბენდი ქინძისთავების გარშემო და თქვენ მზად ხართ.

ნაბიჯი 4: ქულების ბლოკების დამატება

ქულების ბლოკების დამატება
ქულების ბლოკების დამატება
ქულების ბლოკების დამატება
ქულების ბლოკების დამატება

ანგარიშის ბლოკები პინბოლის აპარატის ერთ -ერთი ყველაზე მნიშვნელოვანი ნაწილია, ასე რომ დარწმუნდით, რომ სწორად აკეთებთ ამ ნაწილს. მე გავაკეთე სამი ქულა ბლოკი ჩემი პინბოლის აპარატისთვის, მაგრამ ისევ ეს ყველაფერი შენზეა დამოკიდებული.

ცოცხის ჯოხის პატარა ნაჭერი დავიხარე და სპილენძის მავთულები შემოვიხვიე. არდუინო ამძლავრებს ამ სპილენძის მავთულს მუდმივად 5 ვ. ბურთთან უკეთესი კონტაქტისთვის ოთხი კალმის ზამბარა გვერდით გავამაგრე.

ქულის ბლოკირების გზა არის ის, რომ ბურთი ასრულებს წრეს, რომელიც იწვევს არდუინოს შეყვანის პინს. ასე რომ, რაც მე გავაკეთე იყო ლენტი ალუმინის კილიტა ქვედა შემთხვევაში (არ ეხება COPPER) და მავთულის კილიტა მდე pin Arduino. როდესაც ბურთი მოხვდება როგორც სპილენძზე, ასევე ალუმინზე, წრე დასრულებულია და არდუინო მიიღებს სიგნალს.

ალუმინის ფოლგის გამოყენებით დავაკავშირე ყველა ქულა, მაგრამ გახსოვდეთ, რომ წებოვანი მხარე ელექტროენერგიას არ ატარებს.

ნაბიჯი 5: თამაშის დამატება კონტაქტზე

თამაშის დამატება კონტაქტზე
თამაშის დამატება კონტაქტზე

პინბოლის აპარატის ბოლოში, ფლიპერებს შორის, დავამატე თამაში კონტაქტზე. როდესაც ბურთი მოხვდება ამ კონტაქტში, მოთამაშე დაკარგავს ბურთს. კონსტრუქცია, რომელიც მე გავაკეთე, იგივეა, რაც ქულების ბლოკები. მხოლოდ აქ გამოვიყენე ორი ხრახნი, და ისევ ალუმინის ფოლგის ნაჭერი ბოლოში.

ნაბიჯი 6: საკაბელო ხვრელების გაბურღვა

საკაბელო ხვრელების გაბურღვა
საკაბელო ხვრელების გაბურღვა
საკაბელო ხვრელების გაბურღვა
საკაბელო ხვრელების გაბურღვა
საკაბელო ხვრელების გაბურღვა
საკაბელო ხვრელების გაბურღვა

სანამ არდუინოს ყველაფრის გაყვანილობას დავიწყებთ, ჯერ კაბელების რამდენიმე ხვრელი უნდა გავაღოთ. ალუმინის კილიტის ორივე ნაჭერზე გავაღე ხვრელი, ასე რომ ერთი ხვრელი ალუმინის კილიტაში ქულების ბლოკებთან ახლოს და ერთი ხვრელი ალუმინის ფოლგაში თამაშის მახლობლად კონტაქტის დროს.

გარდა ამისა, მე ასევე გავაღე ხვრელი მარცხენა ქვედა ნაწილში, კედლებს შორის, კაბელისთვის, რომელიც მიემართება დამატებითი ბურთის კარი სერვოში.

ასევე უნდა იყოს ხვრელი კაბელისთვის, რომელიც დაკავშირებულია LCD– თან ბოლოში.

ნაბიჯი 7: ყველაფრის გაყვანილობა

ყველაფრის გაყვანილობა
ყველაფრის გაყვანილობა
ყველაფრის გაყვანილობა
ყველაფრის გაყვანილობა

მე გავაკეთე ეს სქემა, რომ მქონდეს უკეთესი მიმოხილვა, თუ სად უნდა წასულიყო ყველა კაბელი. ჯვრები არის წერტილები, სადაც კაბელები ერთმანეთთან არის დაკავშირებული. შევეცადე მაქსიმალურად გამეკერა, რომ ყველაფერი ცოტა უფრო სტაბილური და საიმედო ყოფილიყო. გაყვანილობას გარკვეული დრო დასჭირდება, მაგრამ ამის დასრულების შემდეგ თქვენ თითქმის იქ ხართ!

ნაბიჯი 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 ქულა = 0; int მაღალი ქულა = 500; bool highscoreReached = ყალბი; int ბურთები = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = ყალბი;

// გაუშვით ეს კოდი ერთხელ პირველ ჩარჩოზე

void setup () {// დააყენეთ pinMode იმ ქინძისთავებისთვის, რომელსაც ჩვენ ვიყენებთ pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// LCD– ის ინიციალიზაცია სიგანისა და სიმაღლის მიცემით

lcd. დასაწყისი (16, 2);

// მიამაგრეთ ბურთის კარიბჭის სერვო შესაბამისი პინზე

ballGateServo.attach (ballGateServoPin);

// დააბრუნეთ კარიბჭის სერვო საწყის პოზიციაზე

ballGateServo.write (0); }

// გაუშვით ეს კოდი თითოეულ ჩარჩოში

void loop () {// დააფიქსირეთ pin შეყვანის თამაშები gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// დაამატეთ ქულა, თუ შეყვანა მიიღება

if (scoreState) {ტონი (speakerPin, 1000); ანგარიში += 10; } else {noTone (4); }

// გამოაკელით ბურთებს, თუ სათამაშო ორმო გააქტიურებულია

if (gameoverState და! gameoverTriggered) {ბურთები -= 1; gameoverTriggered = ჭეშმარიტი; gameoverTimer = gameoverTimerDuration; }

// დაიწყეთ გეიმვერის ქრონომეტრი, როგორც კი ბურთი არ შეეხება სათამაშო კონტაქტს

თუ (! gameoverState) {if (gameoverTimer> = 1) {gameoverTimer -= 1; } else {gameoverTriggered = ყალბი; }}

// თვალის დახუჭვა gameover ტექსტი LCD და აღადგინოთ ანგარიში და ბურთები

if (ბურთები <= 0) {lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); დაგვიანება (250); lcd.print ("GAME OVER"); lcd.setCursor (0, 1); lcd.print ("ცადე ისევ?"); დაგვიანება (250); } lcd.clear (); ანგარიში = 0; ballGateServo.write (0); highscoreReached = ყალბი; ბურთები = 3; }

თუ (ანგარიში> უმაღლესი ქულა და! მაღალი ქულა მიაღწია) {

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 (ანგარიში> უმაღლესი ქულა) {highscore = ანგარიში; }

// კურსორის დაყენება 0 ხაზზე

lcd.setCursor (0, 0); // დაბეჭდე მიმდინარე (მაღალი) ქულა lcd if (ქულა <= 0) {lcd.print ("უმაღლესი ქულა:" + სიმებიანი (მაღალი ქულა) + ""); } else {lcd.print ("ქულა:" + სიმებიანი (ქულა) + ""); }

// კურსორის დაყენება 1 ხაზზე

lcd.setCursor (0, 1);

// დაბეჭდეთ მიმდინარე რაოდენობის ბურთები lcd– ზე

lcd.print ("ბურთები:" + სიმებიანი (ბურთები)); }

გირჩევთ: