Kitty Candy Cannon

29 (polubienia)
5832 (odsłony)
Ten produkt jest dostępny tylko jeśli posiadasz konto w serwisie My Mini Factory
×
Kolor:

Wprowadzenie Po pierwsze, jestem nowicjuszem zarówno w CAD, jak i Arduino. Ten projekt był dla mnie okazją do nauczenia się obu tych rzeczy. Jak widać na poniższych filmach, Harry jest tak samo podekscytowany jak ja, że w końcu widzę to działające. Koty... Odpalenie testowe 1 Odpalenie testowe 2 Instrukcje W załączniku znajduje się plik pdf z instrukcją budowy, próbowałem też dołączyć spakowane pliki z dokumentami freecad, ale nie udało mi się ich przesłać. Znajdź tę rzecz na thingiverse, jeśli chcesz źródłowe pliki cad :) Działko Działko ma magazynek mieszczący 9 cukierków. Po naciśnięciu przycisku serwomechanizm popycha magazynek do przodu, upuszczając cukierek na spust. Następnie przesuwa się do losowej pozycji poziomej i pionowej. W tej pozycji silnik obraca oś, popychając spust do tyłu, aż wystrzeli. Po wystrzale wraca do pierwotnej pozycji. Wszystkie pliki stl są umieszczone w taki sposób, w jaki powinny być wydrukowane ze względu na wytrzymałość, szczegółowość itp. Starałem się zminimalizować potrzebę stosowania podpór, ale niektóre części muszą je mieć, a kilka wyższych części potrzebuje ronda, aby przylegać do płyty konstrukcyjnej. Podstawa Reloadera ma podpory zawarte w pliku stl, więc będziesz musiał dodać tylko rondo dla tej części. Wystarczy je odłamać po zakończeniu drukowania. Sprzęt Oprócz wydrukowanych części będziesz potrzebować: ⦁ Arduino + przewody⦁ Osłona silnika/serwomechanizmu⦁ Płytka prototypowa⦁ Pojemnik na baterie Lego 8881⦁ Silnik Lego 88003 L-Silnik⦁ Przedłużacz Lego 8886 (aby nie przecinać oryginalnego przewodu)⦁ 2 x mikro serwomechanizmy (800g)⦁ 1 x standardowy serwomechanizm (>4kg)⦁ 4 x uchwyt na baterie AA⦁ Przewód do serwomechanizmów⦁ Gumka (do magazynka)⦁ 2 nakrętki i śruby 4 mm (do zawiasu armaty)⦁ 10 baterii AA⦁ Klej Kod Arduino #include #include unsigned int buttonPin = 13;Button startStop(buttonPin);unsigned int motorPwm = 3;unsigned int motorDirection = 2;// Servo settingsServo vertical;unsigned int verticalPrevious;unsigned int verticalServoPin = 6;unsigned int verticalMin = 10;unsigned int verticalMax = 35;Servo horizontal;unsigned int horizontalPrevious;unsigned int horizontalServoPin = 5;unsigned int horizontalReset = 90;unsigned int horizontalMin = 10;unsigned int horizontalMax = 90;Servo reload;unsigned int reloadServoPin = 9;unsigned int reloadStart = 47;unsigned int reloadEnd = 5;void setup(){ startStop.begin(); pinMode(motorPwm, OUTPUT); pinMode(motorDirection, OUTPUT); // Attach and move servos to starting position horizontalPrevious = horizontalReset; verticalPrevious = verticalMin; vertical.attach(verticalServoPin); moveServo(vertical, verticalMin, verticalMin, 15); horizontal.attach(horizontalServoPin); moveServo(horizontal, horizontalPrevious, horizontalPrevious, 15); reload.attach(reloadServoPin); moveServo(reload, reloadStart, reloadStart, 15);}void loop(){ if (startStop.pressed()) { repositionAndFire(); }}void repositionAndFire(){ reloadCannon(); verticalPrevious = moveServoRandom(vertical, verticalMin, verticalMax, verticalPrevious, 15); horizontalPrevious = moveServoRandom(horizontal, horizontalMin, horizontalMax, horizontalPrevious, 5); fireCannon(); resetPosition();}void resetPosition(){ moveServo(vertical, verticalPrevious, verticalMin, 15); moveServo(horizontal, horizontalPrevious, horizontalReset, 15);}void reloadCannon(){ moveServo(reload, reloadStart, reloadEnd, 5); delay(1500); moveServo(reload, reloadEnd, reloadStart, 10);}void moveServo(Servo servo, int oldPosition, int newPosition, int speed){ moveServoWithDelay(servo, oldPosition, newPosition, speed);}int moveServoRandom(Servo servo, int start, int end, int oldPosition, int speed){ unsigned int newPosition = random(start, end); moveServoWithDelay(servo, oldPosition, newPosition, speed); delay(1000); return newPosition;}void moveServoWithDelay(servo servo, int oldPosition, int newPosition, int speed){ newPosition = mapPosition(newPosition); oldPosition = mapPosition(oldPosition); if (oldPosition <= newPosition) { for (; oldPosition <= newPosition; oldPosition++) { servo.write(oldPosition); delay(speed); } } else { for (; oldPosition >= newPosition; oldPosition--) { servo.write(oldPosition); delay(speed); } }}void fireCannon(){ // Uruchom silnik, aby odciągnąć sprężynę i wystrzelić digitalWrite(motorDirection, LOW); analogWrite(motorPwm, 255); // Około jeden obrót koła spustowego delay(4100); analogWrite(motorPwm, 0); }int mapPosition(int position){ return map(position, 0, 180, 0, 254); }

Autor:
cmseter

Opinie

Ten model nie ma recenzji. Chcesz być pierwszym recenzentem? Najpierw musisz wydrukować model.