Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Kiedy dostałem swoją drukarkę 3D, zacząłem się zastanawiać, co mogę z nią zrobić. Dużo rzeczy drukowałem, ale chciałem wykonać całą konstrukcję za pomocą druku 3D. Potem pomyślałem o zrobieniu robota zwierzęcego. Moim pierwszym pomysłem było zrobienie psa lub pająka, ale wiele osób już zrobiło psy i pająki. Myślałem o czymś innym, a potem pomyślałem o wężu. Zaprojektowałem całego węża w fusion360 i wyglądał niesamowicie, więc zamówiłem niezbędne części i zbudowałem jeden. Myślę, że wynik jest świetny. Na powyższym filmie możesz zobaczyć, jak to zrobiłem lub możesz o tym przeczytać poniżej.
Krok 1: Części
Oto, czego będziemy potrzebować:
- 8 mikrosilników serwo
- Niektóre części drukowane w 3D
- Śruby
- Akumulator li-po 3,7 V
- Część do wykonania PCB (atmega328 SMD, kondensator 100nF, kondensator 470μF, rezystor 1,2k, trochę goldpinów). Bardzo ważne jest wykonanie PCB do tego projektu, ponieważ po podłączeniu wszystkiego na płytce stykowej Twój wąż nie będzie mógł się poruszać.
Krok 2: Modele 3D
Powyżej możesz zobaczyć wizualizację tego węża. Pliki (.stl) można pobrać tutaj lub na mój thingiverse. Kilka informacji o ustawieniach drukowania:
Do drukowania segmentów i głowicy polecam dodać tratwę. Podpory nie są potrzebne do wszystkich obiektów. Wypełnienie nie jest tak ważne, ponieważ wszystkie modele są bardzo cienkie i mają prawie same obwody, ale ja używam 20%.
Potrzebujesz:
8x wąż_segment
1x głowa węża
1x wąż_z powrotem
Krok 3: PCB
Poniżej znajdziesz pliki eagle (.sch i.brd) wystarczy je pobrać otwórz w eagle przejdź do widoku tablicy kliknij ctrl + p i wydrukuj. Jeśli nie wiesz, jak zrobić PCB, możesz o tym przeczytać tutaj:
www.instructables.com/id/PCB-making-guide/
Na schemacie jest napisane że mikrokontroler to atmega8 ale to atmega328 ma taki sam pinout ale w eagle nie ma atmega328.
Krok 4: Montaż
Po wydrukowaniu wszystkich części możesz je ze sobą złożyć. Włożyć serwo w jeden z segmentów, przykręcić do segmentu śrubą M2, a następnie przykręcić kolejny segment do ramienia serwomechanizmu. Jeśli nie wiesz, jak to złożyć, możesz obejrzeć wideo.
Krok 5: Połączenie
Na zdjęciu powyżej widać gdzie i co podłączyć. Zaznaczyłem też gdzie jest pin MISO, MOSI i SCK potrzebny jest ten pin do wypalenia bootloadera. Więcej o nagrywaniu bootloadera można przeczytać na oficjalnej stronie arduino tutaj:
www.arduino.cc/en/Tutorial/ArduinoToBreadboard
Do wypalenia potrzebny jest programator lub inny arduino. Po wypaleniu możesz go zaprogramować za pomocą konwertera USB-UART lub tego samego programatora, którego używasz do wypalania bootloadera.
Po wgraniu programu można podłączyć serwo do płytki. Ostatni serwo (na końcu węża) to serwo 1, a serwo 8 jest najbliżej głowy węża.
Na płytce nie ma żadnego stabilizatora więc max napięcie jakie można do niego podłączyć to 5V.
Atmega jak i serwosilniki będą współpracować z Li-Po 3,7V i polecam go używać do tego projektu, ponieważ jest bardzo mały i bardzo mocny. Możesz go znaleźć w starej zabawce RC (znalazłem ją w starym helikopterze RC).
Do płytki dodałem piny RX i TX do programowania, ale także do przyszłej rozbudowy, można tu podłączyć czujniki lub np. moduł bluetooth.
Krok 6: Program
Program wykorzystuje bibliotekę oprogramowania serwo do sterowania 8 serwami jednocześnie. To po prostu zwiększanie i zmniejszanie pozycji serwa z niewielkim przesunięciem w celu imitowania fali. Dzięki temu ruchowi wygląda jak robak, ale porusza się też sprawniej.
Jeśli chcesz, możesz zmienić opóźnienie na końcu pętli. To opóźnienie kontroli prędkości węża. Więc jeśli podasz mniejszą wartość, będzie poruszać się szybciej, wyższa wartość = poruszać się wolniej. Dałem 6, bo to najwyższa prędkość, przy której wąż się nie przewraca. Ale możesz z tym poeksperymentować.
Możesz także zmienić maksymalną i minimalną wartość, aby zwiększyć ruchy.
#włączać
OprogramowanieServo servo1, servo2, servo3, servo4, servo5, servo6, servo7, servo8;
int b_pos, c_pos, d_pos, e_pos; Polecenie tekstowe; różnica wewnętrzna = 30; kąt wewnętrzny1 = 90; kąt wewnętrzny2 = 150;
int ser1 = 30;
int ser2 = 70; int ser3 = 110; wewn ser4 = 150;
int minimum = 40;
int maksimum = 170;
bool increment_ser1 = prawda;
bool increment_ser2 = prawda; bool increment_ser3 = prawda; bool increment_ser4 = prawda;
bool increment_ser5 = prawda;
int ser5 = 90;
bool increment_ser6 = prawda;
int ser6 = 90;
pusta konfiguracja () {
Serial.początek(9600); servo1.attach(3); servo2.attach(5); serwo3.attach(6); servo4.attach(9); serwo5.attach(10); serwo6.attach(11); servo7.attach(12); serwo8.attach(13);
servo1.write(90);
servo2.write(130); servo3.write(90); servo4.write(100); servo5.write(90); servo6.write(90); servo7.write(90); servo8.write(90);
}
pusta pętla () {
Naprzód(); SoftwareServo::odśwież(); }
nieważne do przodu () {
jeśli (serwer_przyrostu1){
ser1++; }inny{ ser1--; }
jeśli (maksymalnie ser1){
increment_ser1 = fałsz; }
servo1.write(ser1);
jeśli (serwer_przyrostu2){
ser2++; }inny{ ser2--; }
jeśli (maksymalnie ser2){
increment_ser2 = fałsz; }
servo3.write(ser2);
jeśli (serwer_przyrostu3){
ser3++; }inny{ ser3--; }
jeśli (maksymalnie ser3){
increment_ser3 = fałsz; }
servo5.write(ser3);
jeśli (serwer_przyrostu4){
ser4++; }inny{ ser4--; }
jeśli (maksymalnie ser4){
increment_ser4 = fałsz; }
servo7.write(ser4);
opóźnienie(6);
}
Krok 7: Wniosek
Myślę, że ten robot wygląda bardzo dobrze. Chciałem zrobić robota węża, ale w końcu zrobiłem coś, co wygląda podobnie do robaka. Ale działa bardzo ładnie. Jeśli masz jakieś pytania zostaw komentarz lub napisz do mnie: [email protected]
o tym robocie możesz przeczytać również tutaj na mojej stronie (po polsku):
nikodembartnik.pl/post.php?id=3
Robot ten zdobył pierwszą nagrodę na Festiwalu Robotów w Chorzowie w kategorii freestyle.
II nagroda w Konkursie Robotyki 2016