Enkel 18dof Hexapod, Arduino nano (eventuellt med pololu maestro) (12 / 13 steg)

Steg 12:18 Servo kod



Se "12 servo" för anteckningar om hur du justerar konstanterna. Koden är på
https://github.com/nouyang/18-servo-hexapod/blob/master/pololu_aug17-2012.pde.

Förklaring:
Dokumentationen till http://www.pololu.com/docs/0J40/5.e

a. BYTE är en parameter som anger basen (format) till oss http://www.arduino.cc/en/Serial/Print

b. mål är ett positivt heltal mindre än 8192 (det kan skrivas i binära notation med 14 eller färre siffror)
t.ex. 6000, eller i binär: 01011101110000

c. 0x7F är 01111111 i binär, som infinity nollor till vänster, så "&" ing (bitvis AND) det döljer ut alla siffror i målet (när målet skrivs i binärt) utom de senast 7 siffrorna (endast 1 och 1 == 1. alla andra kombinationer == 0)
01011101110000
& 00000001111111
= 00000001110000

d. höger Skift operatör, skiftar sista sju siffror (nummer 7 till 13) i målet bort i tomma rymden och så nu de "nya" senast sju siffrorna var ursprungligen bits #0-6 (se färgkodade pololu doc). Mask med 0x7F igen, bara för att vara säker.
01011101110000, >> 7 till:
00000000101110, sedan:
& 00000001111111
= 00000000101110

Den största skillnaden från standardkoden är att jag mappade värden så att jag kunde tanklöst port koden från arduino-"Servo.write ()" - stil till pololu-"settarget ()" - stil.

void settarget (unsigned char servo, unsigned int mål)
{
Target = karta (mål, 0, 180, 2400, 9500);

Min kod, upp på github, är också kopierade nedan:
======================
#include < SoftwareSerial.h >
#define txPin 2
#define rxPin 3

#define TIBIA 25
#define dröjsmål 150

#define CW 70
#define CCW 105

#define upp 92
#define ner 125

// ~~~~~~~~~~~~~~~~~~~~ //

#define A_COX 1
#define A_FEM 2
#define A_TIB 3

#define B_COX 4
#define B_FEM 5
#define B_TIB 6

#define C_COX 7
#define C_FEM 8
#define C_TIB 9

#define D_COX 10
#define D_FEM 11
#define D_TIB 12
#define E_COX 13
#define E_FEM 14
#define E_TIB 15

#define F_COX 16
#define F_FEM 17
#define F_TIB 18

int numtimes = 3;

SoftwareSerial mySerial (rxPin, txPin);

void setup() / / kör en gång, när skissen startar
{
mySerial.begin(9600);
Delay(1000);
}
void loop()
{
för (int jag = 0; jag < = 4; i ++) {
walkfwd();
}
för (int j = 0; j < = 4; j ++) {
walkbwd();
}
för (int k = 0; k < = 2; k ++) {
turnleft();
}
för (int l = 0; l < = 2; l ++) {
turnright();
}
}

void tibia() {
settarget (A_TIB, TIBIA);
settarget (B_TIB, TIBIA);
settarget (C_TIB, TIBIA);
settarget (D_TIB, TIBIA);
settarget (E_TIB, TIBIA);
settarget (F_TIB, TIBIA);
}

// ~~~~~~~~~~fwd~~~~~~~~~~ //

void f1() {
[COXA] ändrat
settarget (A_COX, CW);
settarget (C_COX, CW);
settarget (E_COX, CCW);

settarget (D_COX, CW);
settarget (F_COX, CW);
settarget (B_COX, CCW);

Delay(delay);
}

void f2() {
[LÅRBENET] ändrat
settarget (A_FEM, ned);
settarget (C_FEM, ned);
settarget (E_FEM, ned);

settarget (D_FEM, UP);
settarget (F_FEM, UP);
settarget (B_FEM, UP);

Delay(delay);
}

void f3() {
[COXA] ändrat
settarget (A_COX, CCW);
settarget (C_COX, CCW);
settarget (E_COX, CW);

settarget (D_COX, CCW);
settarget (F_COX, CCW);
settarget (B_COX, CW);

Delay(delay);
}

void f4() {
[LÅRBENET] ändrat
settarget (A_FEM, UP);
settarget (C_FEM, UP);
settarget (E_FEM, UP);

settarget (D_FEM, ned);
settarget (F_FEM, ned);
settarget (B_FEM, ned);

Delay(delay);
}

// ~~~~~~~~~bwd~~~~~~~~~~~ //

void b1() {
[COXA] ändrat
settarget (A_COX, CCW);
settarget (C_COX, CCW);
settarget (E_COX, CW);

settarget (D_COX, CCW);
settarget (F_COX, CCW);
settarget (B_COX, CW);

Delay(delay);
}

void b2() {
[LÅRBENET] ändrat
settarget (A_FEM, ned);
settarget (C_FEM, ned);
settarget (E_FEM, ned);

settarget (D_FEM, UP);
settarget (F_FEM, UP);
settarget (B_FEM, UP);

Delay(delay);
}

void b3() {
[COXA] ändrat
settarget (A_COX, CW);
settarget (C_COX, CW);
settarget (E_COX, CCW);

settarget (D_COX, CW);
settarget (F_COX, CW);
settarget (B_COX, CCW);

Delay(delay);
}

void b4() {
[LÅRBENET] ändrat
settarget (A_FEM, UP);
settarget (C_FEM, UP);
settarget (E_FEM, UP);

settarget (D_FEM, ned);
settarget (F_FEM, ned);
settarget (B_FEM, ned);

Delay(delay);
}

// ~~~~~~~~~left~~~~~~~~~~~ //

void l1() {
[COXA] ändrat
settarget (A_COX, CCW);
settarget (C_COX, CCW);
settarget (E_COX, CCW);

settarget (D_COX, CW);
settarget (F_COX, CW);
settarget (B_COX, CW);

Delay(delay);
}

void l2() {
[LÅRBENET] ändrat
settarget (A_FEM, ned);
settarget (C_FEM, ned);
settarget (E_FEM, ned);

settarget (D_FEM, UP);
settarget (F_FEM, UP);
settarget (B_FEM, UP);

Delay(delay);
}

void l3() {
[COXA] ändrat
settarget (A_COX, CW);
settarget (C_COX, CW);
settarget (E_COX, CW);

settarget (D_COX, CCW);
settarget (F_COX, CCW);
settarget (B_COX, CCW);

Delay(delay);
}

void l4() {
[LÅRBENET] ändrat
settarget (A_FEM, UP);
settarget (C_FEM, UP);
settarget (E_FEM, UP);

settarget (D_FEM, ned);
settarget (F_FEM, ned);
settarget (B_FEM, ned);

Delay(delay);
}

// ~~~~~~~~~right~~~~~~~~~~~ //

void r1() {
[COXA] ändrat
settarget (A_COX, CW);
settarget (C_COX, CW);
settarget (E_COX, CW);

settarget (D_COX, CCW);
settarget (F_COX, CCW);
settarget (B_COX, CCW);

Delay(delay);
}

void r2() {
[LÅRBENET] ändrat
settarget (A_FEM, ned);
settarget (C_FEM, ned);
settarget (E_FEM, ned);

settarget (D_FEM, UP);
settarget (F_FEM, UP);
settarget (B_FEM, UP);

Delay(delay);
}

void r3() {
[COXA] ändrat
settarget (A_COX, CCW);
settarget (C_COX, CCW);
settarget (E_COX, CCW);

settarget (D_COX, CW);
settarget (F_COX, CW);
settarget (B_COX, CW);

Delay(delay);
}

void r4() {
[LÅRBENET] ändrat
settarget (A_FEM, UP);
settarget (C_FEM, UP);
settarget (E_FEM, UP);

settarget (D_FEM, ned);
settarget (F_FEM, ned);
settarget (B_FEM, ned);

Delay(delay);
}

// ~~~~~~~~~~~~~~~~~~~~ //

void walkbwd() {
Tibia();
B1();
B2();
B3();
B4();
}
void walkfwd() {
Tibia();
F1();
F2();
F3();
F4();
}

void turnleft() {
Tibia();
L1();
L2();
L3();
L4();
}

void turnright() {
Tibia();
R1();
R2();
R3();
R4();
}

// ~~~~~~~~~~~~~~~~~~~~ //

Skicka ett ange målet kommando till Maestro.
Målet är i enheter av kvartalet mikrosekunder, så normala intervall är 4000 till 8000.
void settarget (unsigned char servo, unsigned int mål)
{
Target = karta (mål, 0, 180, 2400, 9500);
mySerial.write(0xAA); Starta byte
mySerial.write(0x0C); enhets-id
mySerial.write(0x04); kommandonummer
mySerial.write(servo); servo nummer
mySerial.write (target & 0x7F);
mySerial.write ((mål >> 7) & 0x7F);
}

Se Steg
Relaterade Ämnen

Arduino Nano med DHT11, RTC DS1307 och LCD 16 x 2

Hej. Detta är min första Instructable, så jag hoppas det är OK.Detta är mitt Arduino Nano projekt med LCD med I2C board, RTC DS1307 och DHT11 sensor.För detta projekt jag använde Arduino Nano, RTC DS1307 klockan styrelsen, DHT11 givarkort, 16 x 2 LCD...

Arduino Nano med DHT sensor & OLED

I den här guiden beskriver jag hur man använder en DHT-sensor på en Arduino Nano och OLED-skärm.Steg 1: IntroHejMitt namn är Nick Hendriks och jag bor i Nederländerna. Jag har ingen erfarenhet med Arduino eller de komponenter som används, men jag vil...

Arduino Nano: Enkel SSD1306 I2C OLED Analog Display med Visuino

OLED-displayer är några av de coolaste och mest avancerade moduler som du kan använda i din Arduino projekt. De kommer i liten formfaktorn, och har mycket låg strömförbrukning samtidigt som den levererar ljusa levande färger. Några av de billigaste o...

Hexapod Arduino Pololu Maestro Servo Controll

Nach dem mein erster Versuch mit einem Hexapod, daran gescheitert war das die servon zu schwach waren jetzt ein neuer Versuch mit mit 10 Kg servon aus HK.Ausserdem habe ich mich für ein neuen Sevocontroller von Pololu entschieden. Steg 1: Material -...

Liten footprint Arduino Nano med USB-laddning krets (Li-Ion eller LIPO) som kan stänga av sig själv (mjuk spärren power)

När jag började min första Arduino projekt, insåg jag att jag behövde använda ett litet format Arduino så att jag kan bifoga den i min enhet. Att vara ny på Arduino, visste inte jag att alla de utmaningar som jag skulle ha med batteri förvaltning!Eft...

Arduino Nano: Debouncing och växla knappen med Visuino

Knapparna är ansluten till Arduino kan enkelt användas som på/av Vippbrytare. Tyvärr tenderar knapparna att skapa studsande buller när de ansluta/koppla bort, att göra funktionen växla otillförlitliga. Ljudet kan dämpas med en teknik som kallas Debou...

Arduino Nano med WIZ550io = lätt Internet

Jag älskar den Arduino Nano - det är en fin kompakt men ändå fullt fungerande version av Arduino Uno. Men när jag gick för att ansluta den till internet försvunnit alla det snyggt och prydligt litenhet under stora full storlek ethernet shield jag had...

DIY varm dryck Monitor - med hjälp av DS18B20 och Arduino Nano

Min flickvän har alltid ett problem att hon bränner sin tunga när hon smakar varma drycker. Då började jag tänka, kanske jag kunde skapa en enhet som förhindrar hennes brinnande tungan, så hon kan dricka sitt te och det har alltid perfekt och ville t...

Arduino Nano: Barometertryck och BMP180 temperaturgivare med Visuino

BMP180 är mycket populära kombinerade temperatur och barometriskt tryck Arduino sensorer. De kan användas för väderstationer, samt att mäta höjd.I detta Instructable, ska jag visa dig hur lätt det är att programmera Arduino att använda dem, med Visui...

Arduino Nano: Ansluta foto brytaren (slitsade Optocoupler) med Visuino

Slitsade Optocouplers (Foto vakuumbrytarna) är mycket användbara sensorer, ofta ingår i Arduino projekt att upptäcka position av rörliga föremål, mäta hastighet på rotation eller linjär rörelse, ofta händelser, och många andra.De är enkla att använda...

Arduino Nano: Temperatur och fuktighet DHT11/DHT21/DHT22 Sensormodul med Visuino

DTH11 / DTH21 / DTH22 och AM2301är mycket populära kombinerade temperatur och luftfuktighet Arduino sensorer.I detta Instructable, ska jag visa dig hur lätt det är att programmera Arduino att använda dem, med Visuino - en enkel att använda grafiska u...

RS485 Seriell kommunikation mellan Arduino Mega och Arduino Nano med Visuino

Ibland måste vi ansluta Arduino styrelser ligger långt bort från varandra. RS485 är ett mycket bekvämt sätt att ansluta styrelser med bara 2 kablar, och kan arbeta för ett avstånd på 1200 m (4000 ft). Det gör också flera styrelser kan enkelt anslutas...

Arduino Nano: Ultraljud Ranger(Ping) med Visuino

Vi alla vill veta hur långt Santa är julen här, och vad passar bättre för detta än Arduino med Ultraljud Ranger.I detta Instructable kommer jag visa dig hur lätt det är att ansluta Ultrasonic Sensor till Arduino och styra med hjälp av Visuino - en en...

Arduino Nano och Visuino: kontrollera servon med Joystick

Styra servon ansluten till Arduino med Joystick är mycket vanlig uppgift. Med hjälp av Visuino, en enkel att använda grafiska utvecklingsmiljön för Arduino, har att uppnå detta aldrig varit enklare!Observera att anteckningen på några av bilderna i de...

Arduino Nano och Visuino: styr Servo med Rotary Encoder

Det finns en hel del Instructables på hur man styr Servo med potentiometer, men ibland är det bra att styra med en Rotary Encoder. I detta Instructable kommer jag visa dig hur lätt det är att genomföra detta med hjälp av Visuino - en enkel att använd...

Arduino Nano: Invertera knappen med Visuino

Knappar och digitala växlar är en av de mest ofta använd sensorerna med Arduino. De är också enkelt att ansluta och använda från koden. Ibland emellertid knappen eller växeln ger Sant när vi behöver falskaoch False när vi behöver Sant. För att kompen...

Arduino Nano med Ethernet Shield

Jag köpte nyligen en Arduino Ethernet shield utformad för Arduino Uno och trodde jag kunde bara enkelt ansluta den till min befintliga Arduino Nano. Jag hade fel!Jag kunde inte hitta mycket information om hur du gör detta, förutom att vissa dokument...

Arduino Nano: Med Pull-Up Resistor med Visuino

En av de mest underutnyttjade funktionerna av Arduino är Pull-Up motstånd av Digital stiften. Vi vet alla att de är där, och ändå glömmer vi att vi kan använda dem, och hålla lägga yttre motstånd när de inte behövs. I detta Instructable kommer jag vi...

Arduino Nano: Bitmapp animation i SSD1306 I2C OLED uppvisning med Visuino

OLED-displayer är några av de coolaste och mest avancerade moduler som du kan använda i din Arduino projekt. Jag har redan gjort ett projekt som visar dig hur du kan skriva ut analoga värden på OLED-displayen. Nästan genast någon postat frågar hur ma...