Billig Robot med Arduino

jag ville lära mig elektronik, Arduino programmering, och lödning så jag tänkte att jag skulle plocka en av Randys projekt och kopiera den.

Jag slutade med en annan motor konfiguration. Min front motor pekar ner och vänder lite kvartalet växel som vänder sedan framhjulen. Detta betydde att ingen av Randys kod var tillämplig på mitt projekt.

Jag började titta in i något icky världen av Arduino programmering. Det är alla globala variabler och enda fil projekt. Jag fann det svårt att förstå många av exempel som finns tillgängliga online, inte för att de var särskilt svåra begrepp, men eftersom de var så dåliga exempel på programmering som känner av min raffinerade kunde inte vettigt av det.

Också lämnar den Arduino programmeringsmiljön mycket att önska. Som leder mig till utmärkt embedXcode projektetsom möjligt för mig att använda XCode i stället.

När jag hade en trevlig miljö börjat jag titta på bättre sätt att skriva kod för Arduino. Visar sig hela är bara C++, som jag vet gott om. MotorControl klassen jag skrev, som utnyttjar en DasPing klass, är båda nedan.

Städa upp koden så här aktiverat min slutliga Arduino skiss se ut som följande:

#include "Arduino.h"

#include "DasPing.h"
#include "MotorControl.h"

MotorControl * mc;

void setup() {
Serial.BEGIN(9600);
MC = nya MotorControl (7, 100, 125);
MC -> setUp();
}

void loop() {
MC -> checkDistance();
om (mc -> avstånd > 12 || mc -> avstånd == 0) {
MC -> straighten();
MC -> framåt (mc -> getBaseSpeed());
} annat {
MC -> right();
MC -> backward();
}
}

Du kan se roboten det faktiska beteende. Abstrahera klasserna MotorControl och DasPing, för att kontrollera rörelser och vettigt avstånd respektive aktiverat mig att arbeta med mycket roligare problemet med att en robot till liv.

Den grundläggande beteende visas i denna video kommer från ca 10 rader med kod, när du abstrakt ut allt du inte behöver oroa dig.

Här är MotorControl och DasPing klassdefinitioner, följt av sina respektive genomförandet filer.

MotorControl.h

//
MotorControl.h
//
//
Skapad av David Worley på 1/1/13.
//
//

#ifndef ___MotorControl__
#define ___MotorControl__

#include "Arduino.h"
#include "DasPing.h"

klass MotorControl
{
offentlig:
MotorControl (int pingPin, int defaultDelay, int baseSpeed);
void setUp();

int avstånd;

int getBaseSpeed();
void setBaseSpeed (int baseSpeed);
utan laga kraft framåt (int goSpeed);
void backward();
void left();
void right();
void stop();
void checkDistance();

void easeToBaseSpeed();
void slowFromBaseSpeed();

void straighten();
skyddad:
int _baseSpeed;
int _turnSpeed; för att kontrollera tur motorn
int _distance;
int _defaultDelay;
DasPing * _pinger;

motor 1, vrida
int _brake1;
int _direction1;
int _speed1;

motor 2, fram & vända
int _brake2;
int _direction2;
int _speed2;
};

#endif / * defined(___MotorControl__) * /

MotorControl.cpp

//
MotorControl.cpp
//
En klass för att styra en viss motor konfiguration
använda Arduino motor skölden och en Parallax Ping sensor.
//
Skapad av David Worley på 1/1/13.
//
//

#include "MotorControl.h"

MotorControl::MotorControl (int pingPin, int defaultDelay, int baseSpeed)
{
Serial.println ("MotorControl init.");
_pinger = ny DasPing(pingPin);
This -> checkDistance();

_defaultDelay = defaultDelay;
This -> setBaseSpeed(baseSpeed);

eftersom vi använder en särskild konfiguration, vet vi
Vad värden som ska användas utifrån dokumentationen till motor sköld
_brake1 = 9;
_direction1 = 12;
_speed1 = 3;

_brake2 = 8;
_direction2 = 13.
_speed2 = 11;

_turnSpeed = 255; set till max för tur motorn
}

void MotorControl::setUp()
{
Serial.println ("MotorControl installationen.").
upprätta motor riktning pins
pinMode (_direction1, produktionen);
pinMode (_direction2, produktionen);

bromsar
pinMode (_brake1, produktionen);
pinMode (_brake2, produktionen);

digitalWrite (_brake1, hög);
digitalWrite (_brake2, hög);
}

void MotorControl::forward (int goSpeed)
{
digitalWrite (_brake2, låg);
digitalWrite (_direction2, låg);

analogWrite (_speed2, goSpeed);

Delay(_defaultDelay);
}

void MotorControl::backward()
{
digitalWrite (_brake2, låg);
digitalWrite (_direction2, hög);

analogWrite (_speed2, 155); tillbaka upp i hög hastighet

Delay(_defaultDelay);
}

void MotorControl::left()
{
digitalWrite (_brake2, låg);
digitalWrite (_direction2, hög);
analogWrite (_speed2, _turnSpeed);

Delay(_defaultDelay);
}

void MotorControl::right()
{
digitalWrite (_brake1, låg);
digitalWrite (_direction1, låg);
analogWrite (_speed1, _turnSpeed);
}

void MotorControl::stop()
{
digitalWrite (_brake1, hög);
digitalWrite (_brake2, hög);

analogWrite (_speed1, 0);
analogWrite (_speed2, 0);

Delay(_defaultDelay);
}

void MotorControl::straighten()
{
digitalWrite (_brake1, hög);
analogWrite (_speed1, 0);
}

void MotorControl::checkDistance()
{
_pinger -> pingDistance();
_distance = _pinger -> distance();
avståndet = _distance;
}

int MotorControl::getBaseSpeed()
{
återvända _baseSpeed;
}
void MotorControl::setBaseSpeed (int baseSpeed)
{
_baseSpeed = baseSpeed;
}

void MotorControl::easeToBaseSpeed()
{
för (int jag = 0; jag < = _baseSpeed; i ++) {
Forward(i);
Delay(100); varje 1/10th av en sekund, påskynda
}
}

void MotorControl::slowFromBaseSpeed()
{
för (int jag = _baseSpeed; jag > = 0; jag = i - 10) {
Forward(i);
Delay(50);
}
Detta -> stop();
}

DasPing.h

//
DasPing.h
//
//
Skapad av David Worley på 1/2/13.
//
//

#ifndef ___DasPing__
#define ___DasPing__

#include "Arduino.h"

klass DasPing
{
offentlig:
DasPing (int pingPin);
void pingDistance();
int distance();
skyddad:
int _distance;
int _pin;
int microsecondsToInches (lång mikrosekunder);
};

#endif / * defined(___DasPing__) * /

DasPing.cpp

//
DasPing.cpp
//
En klass för att kontrollera Parallax Ping sensor
//
Skapad av David Worley på 1/2/13.
//
//

#include "DasPing.h"

DasPing::DasPing (int pingPin)
{
_distance = 0;
_pin = pingPin;
}

void DasPing::pingDistance()
{
int varaktighet;

PING))) utlöses av en hög puls av 2 eller fler mikrosekunder.
Ge en kort låg puls förhand för att säkerställa en ren hög puls:
pinMode (_pin, produktionen);
digitalWrite (_pin, låg);
delayMicroseconds(2);
digitalWrite (_pin, hög);
delayMicroseconds(5);
digitalWrite (_pin, låg);

Samma PIN-koden används för att läsa signalen från PING))): en hög
puls vars längd är tid (i mikrosekunder) från den sändande
ping till mottagning av dess eko av ett objekt.
pinMode (_pin, ingång);
längd = pulseIn (_pin, hög);

konvertera tiden till ett avstånd
_distance = denna -> microsecondsToInches(duration);
}

int DasPing::distance()
{
återvända _distance;
}

int DasPing::microsecondsToInches (lång mikrosekunder)
{
Enligt Parallaxs datablad för PING))), det finns
73.746 mikrosekunder per tum (dvs. ljud resor på 1130 fot per
det andra). Detta ger vägsträcka som ping, utgående
och tillbaka, så vi delar med 2 att få distansera av hindret.
Se: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
återvända mikrosekunder/74/2;
}

Relaterade Ämnen

Grundläggande raden efter Robot med Arduino

09/07/2015Det har varit några år eftersom vi Ursprungligen postat denna grundläggande linje följande Robot med Arduino handledning, och det verkar så många människor tyckte att det bra att vi ska skicka en uppdatering som löper nuvarande Arduino bibl...

Hur man gör en mobiltelefon och dator kontrolleras 3D tryckta Robot med Arduino - IoBot.

Om du letar efter ett sätt att kontrollera en Arduino baserade enheter, kommer att denna anvisning Visa dig hur man gör det genom att bygga enkla robot.IoBot kan styras med mobil och dator ansökan via LAN eller USB-kabel. Programmet körs på Android,...

Billig robot med inbyggd kod redaktör (PS/2 tangentbord koden input, EEPROM lagring)

Hej! Detta är min första Instructable :)Denna robot är unik eftersom det tillåter dig att redigera koden, helt enkelt genom att ansluta ett tangentbord och använda ombord, på skärmen kod redaktör! Programmeringsspråk som används är enkelt och lätt. D...

Bygga din Internet kontrollerad Video-Streaming Robot med Arduino och Raspberry Pi

< the Instructable och koden är redo. Njut! Lämna en kommentar med du feedback! >Jag är (aka LiquidCrystalDisplay / Itay), en 14 år gammal student från Israel lärande i Max Shein Junior High School för avancerad vetenskap och matematik. Jag gör dett...

Avlägsen kontrollerade robot med Arduino och T.V. remote

Denna fjärrkontroll bil kan flyttas runt med praktiskt taget alla slags remote såsom TV, AC etc.Det använder sig av det faktum att fjärrkontrollen avger IR(infrared).Den här egenskapen är gjord använda av med hjälp av en IR-mottagare, vilket är en my...

Hinder att undvika Robot med arduino

HINDER - ATT UNDVIKA ROBOTEtt hinder att undvika ROBOT är en som kan undvika ett hinder med hjälp av ultraljud sensor och gå i sin egen väg. Med en skärbräda bifogas roboten kan du spela roliga inom en kort tid. En sådan är vad vi ska diskutera här....

2WD röst kontrollerat Robot med Arduino och BitVoicer Server

I detta Instructable ska jag visa hur man bygger en 2WD röststyrd robot. Även om jag kontrollera endast DC motorer om du vill flytta roboten, samma tillvägagångssätt kan användas till röststyrning stegmotorer och servomotorer, så om du planerar att b...

Realtid ansikte spårning Robot med Arduino och Matlab

Realtid ansiktsspårning avser uppgiften att lokalisera ansikten i en videoström och spårning hittas eller igenkända ansikten. Numera finns det många verkliga tillämpningar av ansiktsavkänning och andra tekniker för bildbehandling. Det finns många alg...

Kontrollera en Roomba robot med Arduino och Android

(Om du gillar detta Instructable, glöm inte att rösta på den - ovan: högra hörnet flaggan. Det tävlar på AUTOMATION tävling. Tack så mycket! ;-)Som en av robotteknik tävling 2016 vinnarna här på Instructables fick jag som pris en iRobot Roomba Create...

Gör en Robot med Arduino för nybörjare

Steg 1: Material som behövs Tamiya spår och rullar in församling ($7,95 på Pololu)Tamiya 70168 dubbla växellåda Kit ($9,25 på Pololu)L298N dubbla H Bridge ($3,65 på Amazon och kan vara mycket lägre på ebay)4AA batterihållare (används från trasig elek...

Gest kontroll car(robot) med Arduino och Android(bluetooth)

Hej folk,Här är ett intressant projekt för alla er kreativa hjärnor ute. Vi ska bygga en android-telefon kontrollerade RC bil.Inget kunde vara mer fascinerande än avlägsen kontrollerade bilar. Denna använder en Bluetooth för kommunikation och acceler...

Extremt enkel linje efter Robot med Arduino

I detta Instructable ska vi bygga en enkel allmän linje efter arduinobot. Det kommer att finnas ett stort utrymme för kreativitet i detta Instructable.Roboten, i denna tutorial, drivs av 4 AA-batterier och är kunna följa svart eltejp av en vit yta.St...

Gör en självbalanserande Robot med Arduino UNO

Själv balansera Robot är mycket intressant. Många vänner runt omkring oss försökte göra en, men de encounted en hel del chanllenges bland annat bristen på strukturerna som lätt-till-montering, de lämpliga elektroniska kretsarna och program. Så jag be...

SainSmart InstaBots upprätt Rover (själv balansera Robot med Arduino)

Upprätt Rover är en självbalanserande robot som ritades av SainSmart. De verkligen gjort det enkelt. Som ni ser, finns det bara 8 ledningar på robot och 8 ledningar på handkontrollen. Så låt oss ta reda på hur det fungerar!DELAR I RUTAN3 x Potentiome...

Hur man har kul med Arduino (och bli en nörd i processen)

vill du tjäna din geek-kort - pronto? Låter komma igång! Denna guide börjar du på sökvägen till den mörka sidan med hjälp av öppen källkod Arduino utveckling och prototyping plattformen. Det kommer att introducera dig till mikrokontroller, komma igån...

Super enkel och billig Arduino stötfångaren robot med 28BYJ-48 steppers

I den här videon kommer jag visa dig hur man bygger din första arduino robot, eller någon i den ordning såklart, men om du inte har gjort en robot innan då denna robot är ett bra ställe att börja, det är verkligen enkelt att förstå codewise (endast 3...

Billiga 4WD invända att undvika Robot med fyra IR närhet sensorer...

Detta är en billig grundläggande fyra motorer, fyra sensorer, programmerbara 8051 objekt att undvika robot med breadboad. Denna robot kan också användas som en linje efter robot bara ändra programmet. Jag installerade två batterier för mer makt, men...

Arduino Uno och Visuino: kontrollera Smart Car Robot med Joystick och L298N motorn förarens

Smart Car anger i kombination med L298N Motor drivrutinsmoduler, erbjuder en av de enklaste sätten att göra roboten bilar. L298N Motor Driver modul är lätt att kontrollera med Arduino, och med hjälp av Visuino kan du programmera din bil i sekunder.I...

2-wheel Self Balancing Robot med hjälp av Arduino och MPU6050

2-Wheel Self Balancing Robot med hjälp av Arduino och MPU6050.Använda Arduino som controller och sensor MPU6050 för att styra balansen. Bara lägga till en enkel seriell Bluetooth-modul och använda en Bluetooth Serial Controller APP för Android-telefo...