Lage en radiostyrt bil med Arduino Uno. CxemCAR - Android bilkontroll via Bluetooth Slik kobler du Bluetooth til en radiostyrt bil

Det vi trenger:

1. Robotchassis, =$9,50
2. Motorfører, =$1,22
3. En sensor som vil oppdage en hindring, jeg bestemte meg for det mest populære og billigste alternativet = $0,94
Det er imidlertid ingen som plager deg med å bruke dyrere eller noe lignende
4. Montering av sensoren, ikke det beste, men et levedyktig alternativ. =$1,08
Som analoger: det er også den unnvikende gule, som det er blitt søkt mest på, men jeg har ikke funnet linken. Hvem skal se etter den, den ser ut som blå, men den har vanlige hull for en M3-skrue og 4 skruer for å feste en avstandsmåler.
5. Et arduino-kort som vil behandle data fra sensoren og gi en beslutning om hvor du skal gå videre. Jeg slo meg til ro med , da det mest praktiske for modellering i farten = $5,88
Dette brettet ble valgt på grunn av muligheten til å erstatte mikrokontrolleren i tilfelle fatal feil, slik at du kan kjøpe en versjon

Totalt brukte jeg rundt $19 på det grunnleggende.

!!! terminaler, kontakter, tang kan byttes ut

Jeg vil trenge det ovennevnte senere og mer enn en gang, det er ikke nødvendig å akselerere slik

Et par bilder for en matbit

Ledninger og terminaler


Stativ, bolter, muttere, skiver

montering

La oss gå videre til den morsomme delen - opprettelsen av Frankenstein!
Først av alt borer vi et hull i den blå braketten for M3-bolten, fordi jeg ikke fant noe annet monteringsalternativ


Vi legger avstandsmåleren på varmt lim.


Vi monterer chassiset og fester sensoren vår. For at den skulle ligge så lavt som mulig, måtte vi ikke feste den direkte til chassiset, men bruke et stativ for å senke den noen centimeter ned. Den nedre kanten av braketten var i flukt med motorene.

Vi fester motordriveren og kobler til motorene.



Vi tilpasser en powerbank i stedet for et batterirom.
For å gjøre dette lager vi to hull for M3-skruer for montering på chassiset, lodder to ledninger "+" og "-" til USB-en på brettet og bringer ledningene ut gjennom et annet boret hull. Dessverre hadde jeg ikke en passende bryter for hånden, så denne funksjonen vil bli utført ved å koble fra ledningene fra Arduino. Deretter fester vi denne tingen til chassiset.





Installer Arduino og koble til ledningene




Det er praktisk at batteriet lades via en strømbank.

Vi setter inn batteriet, flasher det (jeg brukte atmel studio 6-miljøet), snur det så det ikke renner bort, og tester hva som skjedde.

Ved første øyekast er alt i orden; hvis en hindring dukker opp, snur maskinen til siden, sjekker om det er en hindring, og hvis den oppdages igjen, svinger den i den andre retningen. Hva skjedde i praksis: den oppdager hindringer med et smell, svinger godt, har eksperimentelt innstilt nødvendige forsinkelser, men er praktisk talt ute av stand til å kjøre i rett linje på grunn av det bakre rattet. Mest sannsynlig kom jeg over et så "tett" alternativ, men på grunn av dette kjører bilen alltid diagonalt, en bagatell, men ubehagelig.

La oss oppsummere det

Til å begynne med bør de som bestemmer seg for å gjøre noe lignende ta hensyn til chassiset med fire motorer. Et slikt trinn vil i teorien eliminere muligheten for bevegelse i en bue, men kan legge til hodepine ved valg av motorfører. Men ikke forhast deg med å pille hjernen din, du kan forlate denne, alt skal fungere perfekt, strømmene passerer ende-til-ende - to motorer per kanal. Men en single-jar powerbank er definitivt ikke nok. Etter min mening er dette allerede en grunn til å ta en risiko. Du må også kjøpe skiver, fordi... Når det er festet til plast, kan det skje ubehagelige ting. Det ville også vært flott å skille strømforsyningen til arduinoen og motorene, eller bruke en stabilisator, eller i verste fall lodde i en stor kondensator, men dette er for ekte kjennere, det fungerer for meg som det er. I praksis holdt jeg prisen på rundt 2000 rubler, det kunne vært billigere, men dette var min øvelse for sinnet og min første erfaring med programmering (som er det alt ble startet for), jeg sparte ikke mye. Når jeg har tid, fester jeg radiokontrollen og bytter.

P.S. Problemet med å bevege seg i en bue ble løst ved å bytte ut motorene, takk for rådene. Når du kjøper et chassis, ikke skynd deg å bekrefte, test det først i aksjon. Det er ikke flere jambs, alt fungerer.

Og jobbe med ham.

Oppgradering av motorskjold

Det viste seg at produsentene av Motor Shield-modulen fratok sine kunder muligheten til å installere en annen modul på toppen av produktet deres. Tilsynelatende liker de å være på toppen eller bare klemte det normale kontaktpanelet.

Denne nyansen passer ikke meg i det hele tatt. Derfor bestemte jeg meg for å ta opp loddebolten og bringe motorskjoldet til en form som passer meg.


Jeg rev forsiktig ut de originale kontaktkontaktene og kastet dem.


Jeg installerte vanlige i stedet.


I denne formen har modulen blitt mye mer praktisk å bruke. Nå kan jeg koble Bluetooth-ledningene ordentlig til kontaktene, og ikke lodde dem tett til kontaktene på motorskjoldet.

Bluetooth-modul JY-MCU for Arduino


Selve JY-MCU Bluetooth-modulen er ganske liten. Leveringssettet inkluderer en tilkoblingskabel. Pinnetilordningene vises på baksiden.


Den kan drives fra en 3,6-6V strømkilde. Dette gir oss muligheten til å koble den direkte til Arduino uten å bruke regulator eller spenningsdeler.

Kode som brukes ved tilkobling til enheten: 1234.

Kobler Bluetooth JY-MCU til Arduino Mega 2560

Tilkoblingen er ganske enkel.

Offisielt koblingsskjema:

  • TXT på JY-MCU kobles til RX (0) på Arduino
  • Koble RXD på JY-MCU til TX (1) på Arduino

Med dette tilkoblingsalternativet må du slå av strømmen til Bluetooth-modulen hver gang før du laster inn skissen. Ikke glem dette.

Jeg er ikke fornøyd med dette alternativet, så jeg bestemte meg for å bruke diskrete porter med seriell støtte.

Uoffisielt koblingsskjema:

  • VCC på JY-MCU er koblet til +5V Arduino
  • Koble GND på JY-MCU til GND Arduino
  • TXT på JY-MCU koblet til diskret PIN 50 på Arduino
  • Koble RXD på JY-MCU til diskret PIN 51 på Arduino

Nå kan du laste opp skisser uten å slå av strømmen til Bluetooth-modulen.

For å sikre Bluetooth bestemte jeg meg for å bruke et Proto Shield-brett og et miniatyrloddefritt brødbrett. I fremtiden vil jeg koble annet utstyr, kontroller og skjermer til den.




Skisse for å kontrollere en robot på Arduino via Bluetooth via en Android-smarttelefon

I skissen min implementerte jeg følgende funksjoner:

  • Bevegelse fremover
  • Beveger seg bakover
  • Ta til venstre
  • Ta til høyre
  • Glatt venstresving når du beveger deg fremover
  • Glatt høyresving når du beveger deg fremover
  • Glatt venstresving når du beveger deg bakover
  • Glatt høyresving når du beveger deg bakover
  • Stoppe
  • Hastighetsinnstilling 0 %

    Hastighetsinnstilling 10 %

    Hastighetsinnstilling 20 %

    Hastighetsinnstilling 30 %

    Hastighetsinnstilling 40 %

    Hastighetsinnstilling 50 %

    Hastighetsinnstilling 60 %

    Hastighetsinnstilling 70 %

    Hastighetsinnstilling 80 %

    Hastighetsinnstilling 90 %

    Hastighetsinnstilling 100 %

Jeg brukte funksjoner i skissen for ikke å duplisere kode for lignende hendelser.

#inkludere // Koble til motorkontrollbiblioteket
#inkludere // Koble til biblioteket for servoer
#inkludere // Koble til biblioteket for å jobbe med seriell via diskrete porter

//Lag objekter for motorer
AF_DCMotor motor1(1); //kanal M1 på Motor Shield - bak til venstre
AF_DCMotor motor2(2); //kanal M2 på Motor Shield - bak høyre
AF_DCMotor motor3(3); //kanal M3 på Motor Shield - foran til venstre
AF_DCMotor motor4(4); //kanal M4 på Motor Shield - foran høyre

// Lag et objekt for servoen
Servo vsservo;

SoftwareSerial BTSerial(50, 51); // RX, TX

// Lag en variabel for Bluetooth-kommandoer
char vcmd;
// Lag variabler for å huske hastigheten til motorene
int vspdL, vspdR;
/* Lag en variabel hvis verdi vil redusere hastigheten under jevne svinger.
Gjeldende hastighet må være større enn denne verdien. Ellers vil ikke motorene i rotasjonsretningen rotere */
int vspd = 200;

void oppsett() (
// Still inn Bluetooth-dataoverføringshastigheten
BTSerial.begin(9600);
// Still inn dataoverføringshastigheten over kabelen
Serial.begin(9600);
// Velg pinnen som servoen er koblet til
vservo.attach(9); // eller 10, hvis den er koblet til den ytterste kontakten
// Roter servoen til 90 grader hver gang den slås på
vservo.write(90);
// Still inn maksimal rotasjonshastighet for motorene
vhastighet(255,255);
}

void loop() (
// Hvis det er data
if (BTSerial.available())
{
// Les kommandoene og legg dem inn i en variabel. char konverterer kommandotegnkoden til et tegn
vcmd = (char)BTSerial.read();
// Send en kommando til porten slik at de kan sjekkes i "Port Monitor"
Serial.println(vcmd);

// Fremover
if (vcmd == "F") (
vforward();
}
// Tilbake
if (vcmd == "B")
{
vbackward();
}
// Venstre
if (vcmd == "L")
{
vleft();
}
// Ikke sant
if (vcmd == "R")
{
vright();
}
// Rett og venstre
if (vcmd == "G")
{
vforwardleft();
}
// Rett og rett
if (vcmd == "I")
{
vforwardright();
}
// Tilbake og venstre
if (vcmd == "H")
{
vbackwardleft();
}
// Bak og høyre
if (vcmd == "J")
{
vbackwardright();
}
// Stoppe
if (vcmd == "S")
{
vrelease();
}
// Hastighet 0 %
if (vcmd == "0")
{
vhastighet(0,0);
}
// Hastighet 10 %
if (vcmd == "1")
{
vhastighet(25,25);
}
// Hastighet 20 %
if (vcmd == "2")
{
vhastighet(50,50);
}
// Hastighet 30 %
if (vcmd == "3")
{
vhastighet(75,75);
}
// Hastighet 40 %
if (vcmd == "4")
{
vspeed(100,100);
}
// Hastighet 50 %
if (vcmd == "5")
{
vhastighet(125,125);
}
// Hastighet 60 %
if (vcmd == "6")
{
vspeed(150,150);
}
// Hastighet 70 %
if (vcmd == "7")
{
vspeed(175,175);
}
// Hastighet 80 %
if (vcmd == "8")
{
vspeed(200 200);
}
// Hastighet 90 %
if (vcmd == "9")
{
vhastighet(225,225);
}
// Hastighet 100 %
if (vcmd == "q")
{
vhastighet(255,255);
}
}
}

// Fremover
void vforward() (
vspeed(vspdL,vspdR);
vforwardRL();
}

// Videresend for RL
void vforwardRL() (
motor1.kjør(FRAM);
motor2.kjør(FRAM);
motor3.kjør(FRAM);
motor4.kjør(FRAM);
}

// Tilbake
void vbackward() (
vspeed(vspdL,vspdR);
vbackwardRL();
}

// Tilbake til RL
void vbackwardRL() (
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}

// Venstre
void vleft() (
vspeed(vspdL,vspdR);
motor1.run(BACKWARD);
motor2.kjør(FRAM);
motor3.run(BACKWARD);
motor4.kjør(FRAM);
}

// Ikke sant
void vright() (
vspeed(vspdL,vspdR);
motor1.kjør(FRAM);
motor2.run(BACKWARD);
motor3.kjør(FRAM);
motor4.run(BACKWARD);
}

// Frem og venstre
void vforwardleft() (
if (vspdL > vspd) (
vspeed(vspdL-vspd,vspdR);
}
ellers
{
vspeed(0,vspdR);
}
vforwardRL();
}

// Frem og høyre
void vforwardright() (
if (vspdR > vspd) (
vspeed(vspdL,vspdR-vspd);
}
ellers
{
vhastighet(vspdL,0);
}
vforwardRL();
}

// Tilbake og venstre
void vbackwardleft() (
if (vspdL > vspd) (
vspeed(vspdL-vspd,vspdR);
}
ellers
{
vspeed(0,vspdR);
}
vbackwardRL();
}

// Bak og høyre
void vbackwardright() (
if (vspdR > vspd) (
vspeed(vspdL,vspdR-vspd);
}
ellers
{
vhastighet(vspdL,0);
}
vbackwardRL();
}

// Stoppe
void vrelease())(
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}

// Endre hastighet
void vspeed(int spdL,int spdR)(
if (spdL == spdR) (
vspdL=spdL;
vspdR=spdR;
}
motor1.settSpeed(spdL);
motor2.settSpeed(spdR);
motor3.settSpeed(spdL);
motor4.setSpeed(spdR);
}

Bluetooth RC Car-program - styrer en robotbil fra en Android-smarttelefon

Jeg installerte Bluetooth RC Car-programmet på smarttelefonen min. Etter min mening er dette den beste programvaren for å kontrollere en robotbil.


Programmet lar deg overføre kommandoer når du trykker på knapper eller svare på data fra akselerometeret i smarttelefonen din, justere bevegelseshastigheten med en glidebryter, slå på front- og baklysene, slå på og av lydsignalet, slå av og på nødsignalet.




Programmet krever Android versjon 2.3.3 eller høyere. Programstørrelsen er 3 megabyte.

Liste over kommandoer:

  • F – fremover
  • B – tilbake
  • L – venstre
  • R – høyre
  • G – rett og venstre
  • Jeg – rett og til høyre
  • H – tilbake og venstre
  • J – bak og høyre
  • S – stopp
  • W – frontlys på
  • w – frontlyset er av
  • U – baklys på
  • u – baklyset er av
  • V – lydsignalet er på
  • v – lydsignalet er slått av
  • X – nødsignal er på
  • x - nødsignalet er slått av
  • 0 – bevegelseshastighet 0 %
  • 1 – bevegelseshastighet 10 %
  • 2 – bevegelseshastighet 20 %
  • 3 – bevegelseshastighet 30 %
  • 4 – bevegelseshastighet 40 %
  • 5 – bevegelseshastighet 50 %
  • 6 – bevegelseshastighet 60 %
  • 7 – bevegelseshastighet 70 %
  • 8 – bevegelseshastighet 80 %
  • 9 – bevegelseshastighet 90 %
  • q – bevegelseshastighet 100 %

Som du kan se, er testområdet for kreativitet ganske bra. Jeg vil også legge til muligheten til å slå på høyre og venstre lys separat for front- og baklyktene.

Jeg har markert med fet skrift kommandoene som allerede støttes i skissen. Jeg skal bruke resten til et annet formål.

Prinsippet for å sende kommandoer: når du trykker på en knapp i programmet, overføres kommandoen via Bluetooth én gang, og når knappen slippes, sendes S-stopp-kommandoen umiddelbart.

Demonstrasjon av arbeid

Neste gang planlegger jeg å koble en ultralydavstandsmåler til roboten og implementere en algoritme for å unngå hindringer.

Etter å ha kjøpt et billig 7" kinesisk nettbrett og eksperimentert med interaksjon med Arduino via USB og Bluetooth, ønsket jeg å gjøre noe mer seriøst og nyttig for barna mine. Dermed ble ideen født om å lage en maskin styrt av akselerometeret til en Android-enhet og kommunikasjon via Bluetooth. Før det var jeg aldri interessert i robotikk eller RC-kontroll, men jeg hadde ønsket. Tre mål ble satt:

1. Lag en enhet som er så enkel som mulig for repeterbarhet, som enhver nybegynner radioamatør, IT-spesialist, programmerer eller husmor kan gjenta. De. et minimum av lodding, og (kan radioamatører tilgi meg), og hovedvekten bør være på ferdige, billige og viktigst tilgjengelige moduler som kan kjøpes uten problemer. Selv om selvfølgelig ingenting hindrer deg i å lodde ditt eget feilsøkingskort eller motordriver.
2. Prosjektet må være fullstendig åpen kildekode og multi-plattform. Som maskinvaredel, bruk alle populære og moderne maskinvare- og programvareplattformer: Arduino (Processing), STM32, MSP430, PIC, AVR, og kanskje til og med .
3. Utvikle kontrollalgoritmen helt selv fra bunnen av, uten å lese abstrude bøker om robotikk, og gjør det også så enkelt som mulig. Vel, i fremtiden vil det være mulig å forbedre ferdighetene dine ved å lese spesialisert litteratur og gjøre mer avansert ledelse.

Kjøretøyet (eller belteplattformen) styres ved å vippe Android-enheten. De. vippet forover - bilen går fremover, vippes til venstre - bilen svinger til venstre, bakover - bilen går bakover. Dessuten avhenger hastigheten på bevegelse eller rotasjon av graden av tilt på enheten. Følsomheten og tilt-verdien angis i Android-applikasjonsinnstillingene. Denne kontrollmetoden oppnås gjennom tilgang fra programmet til det innebygde akselerometeret (som nå er tilgjengelig i alle moderne Android-smarttelefoner og nettbrett).

En hybrid kontrollmetode er også implementert: gass - ved å bruke en glidebryter på skjermen, og snu modellen - ved å vri Android-enheten (som et virtuelt ratt). Det er en egen knapp for reversering.
Det finnes også en konvensjonell metode for kontroll fra knapper på skjermen, men den er mindre funksjonell og brukes hovedsakelig til feilsøking og testing av funksjonalitet.
I tillegg til alt har jeg for sportens skyld også implementert berøringskontroll, d.v.s. en sirkel vises på skjermen, og jo høyere du flytter markøren i den, jo raskere går bilen; flytt fingeren litt til venstre - bilen svinger.

Dataene behandles og overføres via en Bluetooth-kanal til maskinkontrolleren, som igjen styrer maskinens motorer gjennom motordriveren.

Komponenter

Så det første du trenger er hvilken som helst Android-enhet: smarttelefon, nettbrett, klokke, etc., helst med en tiltsensor (akselerometer) og Bluetooth (eller muligheten til å koble til en ekstern modul via USB OTG). Jeg brukte den kinesiske Ainol Aurora med en ekstern USB Bluetooth-flash-stasjon. Prisen på en slik enhet i dag er mindre enn $100.

2. Chassis til bilen

Du trenger også et hvilket som helst chassis med 2 eller 4 motorer. Dette kan enten være et chassis for DIY-prosjekter eller et chassis fra en gammel brukt radiostyrt bil.
Jeg kjøpte det ferdige chassiset på eBay. For de som ennå ikke er kjent med eBay-auksjonen, anbefaler jeg å lese denne artikkelen:. Jeg garanterer at du vil spare mye penger ved å kjøpe der, og ikke her fra forhandlere. Du kan også bruke andre kinesiske butikker: www.aliexpress.com, dx.com, etc. Å finne et chassis er ganske enkelt, bare skriv inn en av setningene i søkefeltet: Robot chassis, Robot platform, DIY Car chassis, etc. Prisen varierer fra 20$ til 60$.

Når du velger et chassis, vær oppmerksom på kraften og kraften til motorene, samt hastigheten til motorene og tilstedeværelsen av en girkasse. Selv om de fleste plattformer inneholder en standard 6V motor med girkasse.

For kontrollprinsippet beskrevet i dette prosjektet er en sporet plattform mest egnet, men siden... Jeg har det ikke ennå, jeg implementerte et prosjekt basert på en 4WD-plattform.

3. Maskinkontroller

Som jeg allerede har sagt, er prosjektet planlagt å være multi-plattform. For øyeblikket er CxemCAR-prosjektet implementert for følgende maskinvareplattformer:

  1. STM32
  2. Arduino
  3. .NET Micro Framework

Robotens "hjerner" krever ikke hastigheten til mikrokontrolleren og antall perifere enheter; det nødvendige minimumet som mikrokontrolleren må støtte er: 2 PWM og UART.

Hvis du aldri har jobbet med mikrokontrollere, anbefaler jeg deg å først sette sammen dette prosjektet på Arduino-kort, fordi... For det første er de ganske billige ($10-15), og for det andre er Internett og denne siden fulle av eksempler, manualer, etc. STM32- og MSP430-kontrollere er mer funksjonelle, men vil være vanskeligere å lære for en nybegynner. Vel, for programmerere vil du like et av alternativene for dette prosjektet på .NET Micro Framework, hvor Microsoft Visual C# Express brukes som et programmeringsmiljø. Men du må ta med i betraktningen at selve FEZ-brettene ikke er veldig vanlige, og å kjøpe dem er problematisk, selv om det er et .NET-alternativ for Arduino-formfaktor kalt Netduino.

4. Bluetooth-modul

En billig kinesisk UART-modul HC-06 ble brukt som en Bluetooth-modul. Egnede moduler er HC-03, HC-04, HC-05, HC-06, og faktisk hvilken som helst seriell Bluetooth. Det er bedre å ta det med ferdige pinner slik at du ikke trenger å lodde, fordi... avstanden mellom pinnene er veldig liten (se 1. på bildet nedenfor). Kostnaden for en slik modul på eBay er i gjennomsnitt $5-10.

Bluetooth-moduler og arbeid med dem i forhold til Arduino er godt beskrevet i. For andre kontrollere er alt nesten likt, med en beskrivelse av Bluetooth-kommunikasjon mellom STM32 og Android.

5. Motorfører

Som sjåfør brukte jeg en spesialisert L298N-brikke, som er en motordriver med dobbel bro og er designet for å kontrollere likestrøms- og trinnmotorer. På eBay selger de ferdige brett med alle nødvendige ledninger, prisen på brettet er $4-5 og det ser omtrent slik ut:

Koble til Arduino er beskrevet i tilstrekkelig detalj i. I vårt prosjekt, for å jevnt endre rotasjonshastigheten til motorene, vil vi bruke PWM (pulsbreddemodulasjon).

6. Andre komponenter

I tillegg til komponentene ovenfor trenger du:
- batterirom (4-5 AA batterier) eller batterier, du kan bruke for eksempel ferdige 7,4V Li-Po batteripakker
- tilkoblingsledninger
- strømbryteren
- krympeslange, klemmer, etc.

Alt dette er selvsagt valgfritt og kan erstattes med det du har for hånden, for eksempel i stedet for krympe, bruk elektrotape osv.

Som du kan se, er kostnaden for maskinen ikke så høy, hvis du bruker ditt eget chassis med motorer, vil det koste rundt $20-25 for alt; hvis du kjøper chassiset, vil det koste $45-60, avhengig av type chassis (siden prisklassen for dem er veldig bred).

Her er hva jeg fikk:


Prinsipp for operasjon

I Android-enheten genereres kommandoer for å flytte maskinen avhengig av tilt på smarttelefonen/nettbrettet, eller på knappen som trykkes. Alle beregninger gjøres i Android-applikasjonen, og PWM-verdiene for venstre og høyre motorer beregnes umiddelbart. Applikasjonen har fleksible innstillinger, for eksempel PWM-rekkevidde, helningsfølsomhet, minimums PWM-terskel osv. Kommandoer som:
L-255\rR-120\r
L - kommando for venstre motor, R - for høyre
minustegn betyr å rotere motoren for å bevege seg bakover
255 er PWM-nummeret, for Arduino er dette maksimal rotasjonshastighet
\r - slutten av kommandoen.
Med denne kommandoen vil maskinen bevege seg bakover og svinge litt til høyre, fordi den høyre motoren vil rotere langsommere enn den venstre.

L255\rR-255\r
Med denne kommandoen vil venstre motor rotere fremover og høyre motor vil rotere bakover, noe som vil få maskinen til å rotere rundt sin akse mot klokken.

H1\r
En kommando for å slå på en ekstra kanal, som du for eksempel kan koble til frontlykter, et lydsignal, etc. Som et eksempel vises bare én ekstra kanal, men programvaren kan enkelt endres for å aktivere flere tilleggskanaler.

Kommandosymbolene L, R og H kan stilles inn i Android-applikasjonsinnstillingene.

Kontrollerprogrammet gir en timer som slår av motorene hvis den siste kommandoen ble mottatt for mer enn n-sekunder siden. Innstillingen for antall sekunder er lagret i EEPROM-minnet til kontrolleren og kan endres fra Android-enheten. Rekkevidden for denne innstillingen er fra 0,1 sek til 99,9 sek. Innstillingen kan også deaktiveres helt. Men hvis tilkoblingen blir brutt, vil maskinen kjøre til strømmen slås av.
Kommandoer er gitt for å fungere med mikrokontrollerminnet Fr- lese verdier og Fw- registrere verdier.

Elektronisk fylling

Blokkdiagrammet til CxemCAR er presentert nedenfor:

Som du kan se er en Bluetooth-modul og en motordriver koblet til kontrolleren (Arduino, STM32, etc.), som igjen kobler sammen 2 eller 4 motorer av en Bluetooth-styrt modell. Diagrammet viser én utgang av en ekstra kanal (slå på et lydsignal, frontlykter osv.), men ved å redigere programmet litt kan antallet ekstra kanaler enkelt økes.

Jobber med Android-applikasjonen

Android-applikasjonen ble skrevet i Eclipse-miljøet. Du kan laste ned alle prosjektkildene og prosjektet for Eclipse nedenfor. Jeg er ingen ekspert på Java-programmering og dette er min første applikasjon for Android, så noen steder er ikke koden helt vellykket. Det var utviklingen av Android-applikasjonen som tok mesteparten av tiden under utviklingen av dette prosjektet. Android-versjonen må være minst 3.0, jeg skrev og testet alt for et nettbrett med versjon 4.0.3.

Søknaden inneholder flere aktiviteter. Hovedaktiviteten er startskjermbildet med knapper for å starte ulike kontrollmoduser og innstillinger:

Det er 3 kontrollmoduser for Bluetooth-modellen:

Akselerometer kontroll- hovedmetoden for kontroll. Bevegelsen til Bluetooth-modellen styres ved å vippe Android-enheten (nettbrett, telefon, etc.)
Virtuelt ratt- hybrid kontroll. Gass - ved å bruke glidebryteren, svinger - ved å snu enheten. Revers er en egen knapp på skjermen.
Knappkontroll- applikasjonsskjermen viser 4 kontrollknapper: fremover, bakover, venstre og høyre. Når du trykker på «forover»-knappen går bilen fremover så lenge du holder knappen inne, når du trykker «bakover» skjer det samme, men den går bakover. Når du trykker på venstre eller høyre knapp, roterer maskinen rundt sin akse i den ene eller den andre retningen. I dette tilfellet er hastighetsverdien fast (standard er maksimal hastighet), men du kan endre denne parameteren i innstillingene.
Kontroll ved berøring– Jeg oppdaget denne kontrollmetoden i spillet DeathRally og bestemte meg for sportens skyld for å gjenta den. For å være ærlig var det ikke veldig praktisk å lære, men kanskje det vil være nyttig for noen. Det tegnes en sirkel på skjermen, innenfor hvilken kontrollprosessen foregår. Beveg fingeren opp i forhold til midten - bilen går fremover, litt til venstre - bilen begynner å svinge til venstre. Når det gjelder denne kontrollmetoden, er det en ytterligere idé for forbedring ved bruk av et kompass, dvs. bruk sirkelen ikke som en hastighets- og svingkontroller, men bruk den til å angi bevegelsesretningen.

Applikasjon innstillinger

Skjermbilde av Android-applikasjonsinnstillinger CxemCar versjon 1.0:

Det er en liten forklaring for hver innstilling nedenfor, så jeg tror det ikke bør være noen spørsmål om formålet. Jeg vil imidlertid dvele ved noen av dem mer detaljert.

Dreiepunkt for motor (X-akse)

Når Android-enheten vippes til venstre eller høyre, bremser programmet motoren som enheten vippes mot, dvs. dreiing utføres. Men når tiltverdien når vendepunktet som er spesifisert i innstillingene, begynner motoren å rotere i den andre retningen. Hvis du vipper enheten til siden så mye som mulig, vil den ene motoren rotere med maksimal hastighet i én retning, og den andre i den andre, og følgelig vil maskinen snurre rundt sin akse på plass.

MAC-adresse

For å opprette en forbindelse med Bluetooth-modulen til maskinen, må du angi MAC-adressen i applikasjonsinnstillingene. Du må først konfigurere enhetsparing i innstillingene til Android-enheten din. For å gjøre dette, gå til Innstillinger -> Bluetooth og klikk "Søk etter enheter", telefonen finner vår Bluetooth-modul, klikk på den og skriv inn passordet (vanligvis 1234).

Du kan finne ut Bluetooth-adressen til modulen fra en applikasjon, for eksempel Bluetooth-terminal. For å gjøre dette, klikk "Koble til en enhet - Sikker" nederst og klikk på "Skann etter enheter"-knappen i vinduet som vises. Programvaren skanner Bluetooth-enheter og viser MAC-adressene deres:

Denne MAC-adressen må angis i innstillingene til CxemCAR-applikasjonen.

Jeg vil ikke beskrive selve Android-programvaren, fordi... det er ganske tungvint, og hvis du har spørsmål om det, vennligst kontakt støttetråden for dette prosjektet på forumet.

Plattformmontering

Som jeg sa ovenfor, valgte jeg Pirate-4WD-chassiset fra produsenten DFRobot (SKU:ROB0003) som plattform. Dette er et av de mest populære chassisene, her er beskrivelsen og monteringsvideo. Selv om alt er intuitivt og monteringen er veldig enkel.

Etter at bunnen av chassiset med motorene er satt sammen, lodder vi ledningene og merker motorene i tilfelle:

Det øverste bildet viser tydelig at venstre og høyre motor ikke er justert i forhold til hverandre på grunn av den dårlige designen til den kinesiske designen, og på grunn av dette skled hjulene litt når de beveget seg. Derfor var det nødvendig med en liten modifikasjon, for dette kuttet jeg ut avstandsstykker fra plast og satte dem inn mellom motorene.

Det ble litt bedre, men det var fortsatt en liten grad av bevegelse ved hjulene. Men som ytterligere tester viste, påvirket ikke dette i stor grad kjøreytelsen til plattformen. Derfor gikk jeg ikke dypere inn i å modifisere chassiset og lot det være som det er med stag.

Neste trinn er å installere hjulene. De passet veldig tett på skaftet, noen steder måtte de til og med kuttes med en kutter.

Vi kobler ledningene fra 4 motorer til L298N-motordriverkortet, de 2 venstre motorene er ganske enkelt parallellkoblede, det samme gjelder for de høyre.

For å kunne se statusen til Bluetooth-tilkoblingen, har HC-06-modulen (og andre også) muligheten til å koble til en status-LED. Jeg bestemte meg for å koble den til og vise den på et fremtredende sted. For å gjøre dette brukte jeg en 470 ohm strømbegrensningsmotstand og varmekrympeslange.

Vi kobler eller lodder alle nødvendige ledninger til Bluetooth-modulen, i tillegg til LED, er disse strøm, GND, TX og RX. Se dokumentasjonen for Bluetooth-modulen. For ikke å lide med lodding, anbefaler jeg deg å umiddelbart ta en modul med loddede pinner (se bildet ovenfor). Og det er bedre å ta HC-03/HC-05-moduler.

Jeg brukte HC-06-modulen, som jeg hadde før. Koblingsskjemaet er som følger:

Når den er loddet, ser modulen slik ut:

Jeg plasserte den også i et varmekrympeslange med stor diameter.

For å drive motorene brukte jeg et batterirom med 5 AA-celler, dvs. Motorens forsyningsspenning var 7,5 volt. LiPo og andre batterier kan brukes. For å feste batterirommet, boret jeg to hull i chassisdekselet og festet det med to bolter.

Historien om programvareendringer for Android:
Versjon 1.1 (datert 28. januar 2013) - endringer i cBluetooth-klassen for en mer stabil Bluetooth-tilkobling. Nå trenger du ikke oppgi en kode for sammenkobling (kobling av enheter)
Versjon 1.2 (fra 15.02.2013) - cBluetooth-klassen er lagt til for å etablere en forbindelse med enheten (nyttig for feilsøking). Endringer i Handler-klassen (alle feil med statisk er fikset). En ny type kontroll er implementert - "virtuelt ratt".
Versjon 1.3 (datert 20.07.2013) - mindre endringer i aktiviteten. Retting av en feil med koordinatinversjon på smarttelefoner

I denne artikkelen skal vi se på å koble til og kontrollere Arduino via bluetooth.

Den mye brukte HC-06 vil bli brukt som en Bluetooth-modul.

I vårt prosjekt vil vi skru av og på LED-en koblet til port 13 via bluetooth.

La oss starte med å skrive en applikasjon for en Android-smarttelefon. Søknaden vil bli skrevet i et praktisk og enkelt programmeringsmiljø, App Inventor. Programmer vil bli kompilert online.

Følg lenken http://ai2.appinventor.mit.edu/. Der vil du bli bedt om å logge på en Google-konto, som du må opprette hvis du ikke allerede har en.

Etter pålogging vil du bli ført til programmet hvor du kan opprette et prosjekt ved å klikke på "start nytt prosjekt". Du må angi et prosjektnavn. La oss kalle det led_control.

Et tomt programvindu åpnes.

Her vil vi plassere de nødvendige komponentene. Velg ListPicker fra vinduet til venstre og slipp det inn i prosjektet.

For ListPicker-komponenten i vinduet til høyre, finn tekstegenskapen og endre "Text for ListPicker1" til "Velg en BT-enhet."

Åpne Layout-fanen i vinduet til venstre, plasser HorizontalArrangement-komponenten i applikasjonen, endre dens Width-egenskap til "Fill parent". Legg til 2 knapper til det horisontale arrangementet, sett Width-egenskapen til hver av dem til "Fyll overordnet". Det skal se slik ut:

La oss endre etikettene på knappene: den første vil si LED PÅ, den andre vil si LED AV.

Nedenfor vil vi legge til en etikett og fjerne teksten.

Det gjenstår å legge til en komponent som organiserer dataoverføring via Bluetooth. Åpne fanen Connectivity og plasser BluetoothClient i prosjektet. Denne komponenten vises ikke på telefonskjermen, men under den, fordi det er ikke visuelt.

Nå kan du begynne å skrive programmet. I øvre høyre del av programmet, velg Blocks-modus.

Her vil det bli satt sammen et program fra grafiske blokker. Til venstre klikker du på ListPicker1-komponenten og velger ListPicker1.BeforePicking.

Klikk på ListPicker1 igjen og velg sett ListPicker1.Elements til

Plasser den som på skjermbildet.

Dette gir oss en liste over sammenkoblede Bluetooth-enheter. La oss nå koble til den valgte enheten. Skriv blokken som i skjermbildet nedenfor.

Den rosa blokken merket Connected er den første blokken i Tekst-fanen. Skriv inn Connected i den tomme boksen.

La oss nå skrive en knappbehandler. Når du klikker på den første knappen, vil teksten «led_on» bli sendt, og når du klikker på den andre, vil «led_off» bli sendt. Inskripsjonen i Label1 vil også endres.

Alt som gjenstår er å laste ned prosjektet til smarttelefonen din. Klikk Bygg og velg en nedlastingsmetode.

For det første alternativet trenger du Internett og en QR-kodeleser. Klikk og vent til prosjektet er satt sammen og QR-koden er generert, åpne deretter QR-kodeleseren på smarttelefonen og les koden. Alt som gjenstår er å laste ned og installere filen.

I det andre alternativet vil prosjektet i .apk-format lagres på datamaskinen din, og du kan laste det ned til smarttelefonen din på en hvilken som helst praktisk måte (for eksempel via USB).

La oss nå starte med Arduino-programmet.

Datamottak og overføring utføres gjennom COM-porten, så vi vil bruke Serial. Vi vil motta signaler tegn for tegn, danne en streng og deretter sammenligne den genererte strengen med kommandoene led_on og led_off.

Arduino

String val = ""; void setup() ( Serial.begin(9600); pinMode(13, OUTPUT); ) void loop() ( while (Serial.available()) ( //while data arrives char c = Serial.read(); // les dem val += c; //og lag en strengforsinkelse(3); ) if (val != "") ( Serial.println(val); ) if (val == "led_on") ( digitalWrite(13, HIGH ); ) else if (val == "led_off") ( digitalWrite(13, LOW); ) val = ""; )

String val = "" ;

void oppsett() (

Seriell. begynne(9600);

pinMode(13, OUTPUT);

void loop() (

while (Serial . tilgjengelig () ) ( //mens data kommer

char c = Seriell . lese(); //Les dem

val += c; //og lag en streng

forsinkelse(3);

}

Last opp koden til Arduino.

Nå kan du koble til HC-06 Bluetooth-modulen. Det kobles veldig enkelt:

Vcc 5v (3,3 v mulig)

HVIS DU PRØVER Å LASTE PROGRAMMET I ARDUINO MED MODULEN TILKOBLET, VIL DU KOMME UT EN FEIL, FORDI BÅDE MODULEN OG PROGRAMMET BRUKER RX- OG TX-PORTENE!

Sett strøm til Arduinoen. LED-en på Bluetooth-modulen skal blinke, dette betyr at den venter på tilkobling. Ta smarttelefonen din, finn bluetooth i innstillingene, slå den på og begynn å søke. Finn enheten som heter hc-06 og koble til den. Det fungerer kanskje ikke første gang. Etter vellykket sammenkobling én gang, kan du starte programmet på smarttelefonen din.

Klikk først på "Velg BT-enhet" og velg modulen fra de sammenkoblede enhetene. Deretter trykker du på LED på og av-knappene. Hvis alt er gjort riktig, vil alt fungere.

Vi laget en veldig enkel applikasjon ved hjelp av Bluetooth, uten design eller til og med å sjekke om vi er koblet til modulen eller ikke. I de følgende leksjonene skal vi lage mer komplekse applikasjoner og bli bedre kjent med App Inventor.