Motordriven rörlighet bildning anordning för småbarn (7 / 13 steg)

Steg 7: Elektronik: ladda upp koden

Ladda upp följande kod till Arduino Uno styrelsen. Du kan hitta instruktioner om hur du ställer in din arduino här:https://www.arduino.cc/en/Guide/HomePage

början av kod
CONST int DIR_A = 2, //Motor sköld A DIR pin
DIR_B = 4, //Motor sköld B DIR pin
PWM_A = 3, //Motor sköld en PWM stift
PWM_B = 5, //Motor sköld en PWM stift
KRUKA = A3, //Potentiometer pin
FRAMÅT = 8, //Forward pin
OMVÄND = 9, //Reverse pin
VÄNSTER = 11, //Left pin
HÖGER = 10, //Right pin
CURRENT_A = A1, //Current Sensor en pin
CURRENT_B = A0; Nuvarande Sensor B pin
int DIR, OLD_DIR; Controller-ingång och Input historia
booleska stop_all = false; Minska hastigheten 0
Deklarera variabler
int MAX_SPEED = 230, MIN_SPEED = 60.
flyta acc = 0;
flyta LEFT_SPEED = 0;
flyta RIGHT_SPEED = 0;
flyta COMP_A = 0;
flyta COMP_B = 0;
int LEFT_MOTOR_DIR = 0;
int RIGHT_MOTOR_DIR = 0;
Double TIME_TO_MAX_SPEED = 5000;
int dröjsmål = 100;
void setup() {
Definiera indata och utdata pins
pinMode (DIR_A, OUTPUT);
pinMode (DIR_B, OUTPUT);
pinMode (PWM_A, OUTPUT);
pinMode (PWM_B, OUTPUT);
pinMode (rätt, INPUT_PULLUP);
pinMode (vänster, INPUT_PULLUP);
pinMode (FORWARD, INPUT_PULLUP);
pinMode (bakåt, INPUT_PULLUP);
pinMode (KRUKA, indata);
pinMode (CURRENT_A, indata);
pinMode (CURRENT_B, indata);
Initierar seriell port för övervakning vid behov
Serial.BEGIN(9600);
DIR = (digitalRead(FORWARD) << 3)
+ (digitalRead(REVERSE) << 2)
+ (digitalRead(LEFT) << 1)
+ (digitalRead(RIGHT));
OLD_DIR = DIR;
Minska PWM frekvens för att minska motor gnälla
setPwmFrequency(3,1);
setPwmFrequency(5,1);
}
void loop() {
Läser den registeransvarige input
FRAM: B0111
OMVÄND: B1011
VÄNSTER: B1101
HÖGER: B1110
DIR = (digitalRead(FORWARD) << 3)
+ (digitalRead(REVERSE) << 2)
+ (digitalRead(LEFT) << 1)
+ (digitalRead(RIGHT));
LÄSER POTENTIOMETERN OCH MAPPAR DET TILL LÄGSTA OCH HÖGSTA HASTIGHET
int hastighet = map(analogRead(POT), 0, 1023, MIN_SPEED, MAX_SPEED);
LÄSER DEN NUVARANDE SENSORN FÖR ATT BALANSERA BELASTNINGEN GÅENDE IN I BÅDE MOTORER
Double I_A = (((double)analogRead(CURRENT_A)) * 5/1023.0) - 2,5) / 0.1;
Double I_B = (((double)analogRead(CURRENT_B)) * 5/1023.0) - 2,5) / 0.1;
OM INGA KNAPPAR NERE, STOPPA MOTORERNA
om (DIR == B1111) {
stop_all = sant;
}
om (stop_all) {
LEFT_SPEED = (LEFT_SPEED < = 0)? 0: LEFT_SPEED-(SPEED/TIME_TO_MAX_SPEED*DELAY*2);
RIGHT_SPEED = (RIGHT_SPEED < = 0)? 0: RIGHT_SPEED-(SPEED/TIME_TO_MAX_SPEED*DELAY*2);
}
om (LEFT_SPEED == 0 & & RIGHT_SPEED == 0 & & B1111) {
stop_all = false;
OLD_DIR = DIR;
}
OM MOTORERNA ÄR INAKTIVA, LYSSNA FÖR CONTROLLER INGÅNG
om (stop_all == false) {
om (DIR! = OLD_DIR & & digitalRead(FORWARD)! = B0) {
DIR = OLD_DIR;
}
Switch(Dir) {
fall B0111: //FORWARD
Nuvarande sensor ersättning
om (abs(I_A-I_B) > 0,1) {
om (I_A > I_B) {
COMP_A = (I_A-I_B) * HASTIGHET/TIME_TO_MAX_SPEED * FÖRSENING * 0,1;
COMP_B = (I_A-I_B) *-HASTIGHET/TIME_TO_MAX_SPEED * FÖRSENING * 0,1;
}
annat {
COMP_A = (I_A-I_B) *-HASTIGHET/TIME_TO_MAX_SPEED * FÖRSENING * 0,1;
COMP_B = (I_A-I_B) * HASTIGHET/TIME_TO_MAX_SPEED * FÖRSENING * 0,1;
}
}
annat {
COMP_A = 0;
COMP_B = 0;
}
beräkna acceleration
ACC = (SPEED-LEFT_SPEED) * 0,1;
ACC = (acc > = 6)? 6: acc;
ACC = (acc < = 1)? 1: acc;
Lägg till acceleration och ersättning till vänster och höger motors
LEFT_SPEED = LEFT_SPEED + acc + COMP_B;
RIGHT_SPEED = RIGHT_SPEED + acc + COMP_A;
LEFT_SPEED = (LEFT_SPEED > = hastighet)? HASTIGHET: LEFT_SPEED;
RIGHT_SPEED = (RIGHT_SPEED > = hastighet)? HASTIGHET: RIGHT_SPEED;
Ställa in motor riktningar, 1 = framåt, -1 = bakåt
LEFT_MOTOR_DIR = 1;
RIGHT_MOTOR_DIR = 1;
bryta;
fall B0101: //steer kvar när framåt
LEFT_SPEED = LEFT_SPEED * 0,9;
RIGHT_SPEED = RIGHT_SPEED;
bryta;
fall B0110: //steer höger när framåt
LEFT_SPEED = LEFT_SPEED;
RIGHT_SPEED = RIGHT_SPEED * 0,9;
bryta;
fall B1011: //REVERSE
Nuvarande sensor ersättning
om (abs(I_A-I_B) > 0,1) {
om (I_A > I_B) {
COMP_A = (I_A-I_B) * HASTIGHET/TIME_TO_MAX_SPEED * FÖRSENING * 0,1;
COMP_B = (I_A-I_B) *-HASTIGHET/TIME_TO_MAX_SPEED * FÖRSENING * 0,1;
}
annat {
COMP_A = (I_A-I_B) *-HASTIGHET/TIME_TO_MAX_SPEED * FÖRSENING * 0,1;
COMP_B = (I_A-I_B) * HASTIGHET/TIME_TO_MAX_SPEED * FÖRSENING * 0,1;
}
}
annat {
COMP_A = 0;
COMP_B = 0;
}
beräkna acceleration
ACC = (SPEED-LEFT_SPEED) * 0,1;
ACC = (acc > = 6)? 6: acc;
ACC = (acc < = 1)? 1: acc;
Lägg till acceleration och ersättning till vänster och höger motors
LEFT_SPEED = LEFT_SPEED + acc + COMP_B;
RIGHT_SPEED = RIGHT_SPEED + acc + COMP_A;
LEFT_SPEED = (LEFT_SPEED > = hastighet)? HASTIGHET: LEFT_SPEED;
RIGHT_SPEED = (RIGHT_SPEED > = hastighet)? HASTIGHET: RIGHT_SPEED;
Ställa in motor riktningar, 1 = framåt, -1 = bakåt
LEFT_MOTOR_DIR = -1;
RIGHT_MOTOR_DIR = -1;
bryta;
fall B1101: //LEFT
beräkna acceleration
ACC = (SPEED-LEFT_SPEED) * 0,1;
ACC = (acc > = 15)? 8: acc;
ACC = (acc < = 1)? 1: acc;
Lägg till acceleration och ersättning till vänster och höger motors
LEFT_SPEED = LEFT_SPEED + acc;
RIGHT_SPEED = RIGHT_SPEED + acc;
LEFT_SPEED = (LEFT_SPEED > = hastighet)? HASTIGHET: LEFT_SPEED;
RIGHT_SPEED = (RIGHT_SPEED > = hastighet)? HASTIGHET: RIGHT_SPEED;
Ställa in motor riktningar, 1 = framåt, -1 = bakåt
LEFT_MOTOR_DIR = -1;
RIGHT_MOTOR_DIR = 1;
bryta;
fall B1110: //RIGHT
beräkna acceleration
ACC = (SPEED-LEFT_SPEED) * 0,1;
ACC = (acc > = 15)? 8: acc;
ACC = (acc < = 1)? 1: acc;
Lägg till acceleration och ersättning till vänster och höger motors
LEFT_SPEED = LEFT_SPEED + acc;
RIGHT_SPEED = RIGHT_SPEED + acc;
LEFT_SPEED = (LEFT_SPEED > = hastighet)? HASTIGHET: LEFT_SPEED;
RIGHT_SPEED = (RIGHT_SPEED > = hastighet)? HASTIGHET: RIGHT_SPEED;
Ställa in motor riktningar, 1 = framåt, -1 = bakåt
LEFT_MOTOR_DIR = 1;
RIGHT_MOTOR_DIR = -1;
bryta;
}
}
Ställ in motor riktningar
om (RIGHT_MOTOR_DIR > 0) {
digitalWrite (DIR_A, låg);
}
annat {
digitalWrite (DIR_A, hög);
}
om (LEFT_MOTOR_DIR > 0) {
digitalWrite (DIR_B, låg);
}
annat {
digitalWrite (DIR_B, hög);
}
Ange varvtal
LEFT_SPEED = LEFT_SPEED < = 0? 0: LEFT_SPEED;
RIGHT_SPEED = RIGHT_SPEED < = 0? 0: RIGHT_SPEED;
analogWrite (PWM_A, RIGHT_SPEED);
analogWrite (PWM_B, LEFT_SPEED);
OLD_DIR = DIR;
Serial.Print(Speed);
Serial.Print("|");
Serial.Print("left:");
Serial.Print(LEFT_SPEED);
Serial.Print("|");
Serial.Print("Right:");
Serial.println(RIGHT_SPEED);
Delay(delay);
}
Anger frekvensen för PWM
void setPwmFrequency (int pin, int divisor) {
byte läge;
om (pin == 5 || pin == 6 || pin == 9 || pin == 10) {
Switch(divisor) {
fall 1:
läge = 0x01;
bryta;
mål 8:
läge = 0x02;
bryta;
fall 64:
läge = 0x03;
bryta;
fall 256:
läge = 0x04;
bryta;
fall 1024:
läge = 0x05;
bryta;
standard:
hemkomst.
}
om (pin == 5 || pin == 6) {
TCCR0B = TCCR0B & 0b11111000 | läge;
}
annat {
TCCR1B = TCCR1B & 0b11111000 | läge;
}
}
annars om (pin == 3 || pin == 11) {
Switch(divisor) {
fall 1:
läge = 0x01;
bryta;
mål 8:
läge = 0x02;
bryta;
fall 32:
läge = 0x03;
bryta;
fall 64:
läge = 0x04;
bryta;
fall 128:
läge = 0x05;
bryta;
fall 256:
läge = 0x06;
bryta;
fall 1024:
läge = 0x7;
bryta;
standard:
hemkomst.
}
TCCR2B = TCCR2B & 0b11111000 | läge;
}
}

slutet av koden

Se Steg
Relaterade Ämnen

Så du vill starta bergsklättring?

Bergsklättring är awesome är det mycket roligt att vara utmanande, bra övning och givande. Det kan vara en stor hobby också! Men kan det vara svårt om du inte vet vad du väntar eller vet någon som kan lära dig att komma igång. Här är några tips som h...

Expanderande-Lung på de billiga! Dyk vidare, djupare, längre på ett andetag.

Exapanding-Lung är en andning bildning anordning som säljs för $40. Detta är ett liknande verktyg för mindre än $10. Och enkelt kan anpassas till specifika mun storlekar och former.Här är vad du behöver:Ett munstycke från en gammal snorkel eller en e...

Hur man hoppa högre (öka din vertikala språng)

om du är en friidrottare som tävlar i ett team eller en individuell sport, du sannolikt beroende av främst benstyrka för att utmärka sig i din given sport. Basket, fotboll, volleyboll, fotboll, baseball... chanserna är du har spelat en eller flera av...

Förvandla din Crosstrainer i en VR maskin

Hej duhär är min första Tutorial på Instrucatables, jag visa dig hur enkelt du kan förvandla din crosstrainer, elliptical tränad eller stillastående cykel i en trevlig VR maskin som visar:HastighetKalorierAvståndetSe Video här:Först behöver du lite g...

En av ett slag anpassade rörlighet maskiner för funktionshindrade!

Min idé!En av ett slag anpassade rörlighet maskiner för funktionshindrade!Jag har utformat och byggt alla typer av maskiner i förflutnan.Jag konstruerade maskiner för Robot Wars och byggt över 30 elfordon och enheter. För närvarande jag konstruera oc...

Slutföra lägre kroppen rörlighet Warmup (vrister, höfter & knän)

Prova denna kompletta lägre kroppen rörlighet warmup att mjuka upp din höft, knä och fotled lederna för en säkrare och effektivare träning....

Hemlagad jerkstopper (laptop kabel lagring anordning)

min laptop adapterkabel var mycket lös och det var att vara urkopplad med minsta rörelse av laptop. Eftersom det är en gammal och skrymmande laptop jag inte vill bära runt det är batteri. Jag behövde något att hålla kontakten på plats.Efter googling...

DIY anordning för remote kontrollerande mörkar

Om du letar för att märkbart förbättra detaljer och stilen i ditt hem, bör du överväga bygga och installera DIY anordning för remote kontrollerande mörkarna.Det är super lätt och roligt att bygga och lätt kan installeras på alla befintliga icke autom...

Gör en elektronisk anordning på gatan (IR-penna)

ibland du inte har tillräckligt med material och utrymme för att göra någon instructables så du hålla läsande dem...Jag ville göra några mycket enkla instructables så att någon kan göra var som helst. Det är inte den mest imponerande instructable men...

Spionera anordning för Light Switch

vi ska göra en anordning som kan stänga av lampor helt utan ljud, perfekt för en spion eller en hemlig agent. Detta verktyg är mycket lätt att göra och är mycket användbar.Steg 1: Skaffa material Din endast kommer att behöva lite skum, ca 1 tum tjock...

Motordriven grus vakuum för akvarier

Har du någonsin dammsugas din tank och slut på vatten innan du får slut på crud? Jag kunde aldrig verkar få min tank ren utan att ta bort det mesta av vattnet. Jag tittade på batteridrivna dammsugare men de höga priser och dålig recensioner fick mig...

Knex roterande anordning för fastsättning delar

Hej alla läsare,Jag gjorde detta Instructable ursprungligen eftersom vi har haft många användningsområden för en långsam roterande anordning för limning saker för reparationer.Nu jag publicera detta "kompatibel eftersom jag hittade den gamla videon a...

Hur man gör en lyssnande anordning

jag kommer att visa dig hur man gör en lyssnande anordning från en walkie talkie.Steg 1: Vad du behöver Vad du behöver:Uppsättning av walkie talkiesMaskeringstejpGemPrivat samtalSteg 2: Köpa det Köp eller förvärva två kvalitet walkie talkiesSteg 3: T...

Gå Baby Go - Joystick kontrollerade driv anordning

vårt mål är en drivande enhet för barn med begränsad rörlighet.< iframe bredd = "560" höjd = "315" src = "http://www.youtube.com/embed/8IQsJvaMrvk" frameborder = "0" allowfullscreen >< / iframe >Steg 1:...

Anordning som underlättar att sätta på strumpor, byxor och skor

efter en knäoperation i sommar, jag var fast i ett rakt knä stödbandage för ca 2 månader. Det går inte att böja mitt knä, jag fann det svårt att utföra enkla uppgifter som att sätta på mina strumpor, skor och även mina byxor. Detta problem inspirerad...

Menar Arterial blodtryck övervakning anordning

Målet med detta projekt är att skapa en genomsnittlig arterial blodtryck övervakning anordning än kan automatiskt styrtryck manschetten och bestämma blodtrycket utan att kräva någon ytterligare användarindata. Metoden vi valt att använda i denna inst...

Air Vest (ryggsäck hetta skingra anordning)

när du bär ryggsäck under sommaren, värmen ofta inte kan skingras från ryggen lätt. Detta händer till backpackers när de vill resa långa avstånd eller studenter som går hemifrån till skolan, svett och värme gör ofta människor att känna sig extremt ob...

Borra motordriven borste för rengöring av KORGFLASKA

hur man skapar en borr drivs borste för rengöring hårt att nå platser.SlangklämmaSämskskinn / ChamoisDrill1/2 tums diameter trä pluggen (trä är ett bra samtal om du städning glas. En aluminium pluggen kunde fungera, men bara vara noga med att inte kn...

Hund-bildning leksak

min beagle visste inte hur man kan föra tennisboll tillbaka till mig när jag kastade den, så jag har kommit upp med en instructable att lära hundar att återvända en tennisboll. Och sedan dess har han kunnat gå tillbaka bollen till mig.VARNING! VAR NO...