Motor Driver med 555 Timer IC (9 / 9 steg)
Steg 9: Mest borterst: Bluetooth, kontrolleras av Android-telefon
Se min tidigare bluetooth panzer utan kamera. Den styrs av Android-telefon. Fyra 555 Timer ICs kör dess dubbla dc-motorer. Förvänta dig inte hastigheten :D
Ansluta till diagrammet ovan och ladda upp denna skiss:
/*
Chienline @ 2014
Kontrollera en Arduino bil/tank med en Android-telefon via Bluetooth-anslutning.
Android-programvara: Arduino Bluetooth RC bil av Andi.Co [i PlayStore].
Vissa koder ändras från officiella koder för att få det fungerar med min DIY Motor Driver.
*/
char dataIn = s '; Karaktär/Data från telefonen. S = stopp;
int LCPin = 2; 555 pinut 5 vänster Motor
int LTPin = 3; 555 pinut 2 vänster Motor
int RCPin = 4; 555 pinut 5 rätt Motor
int RTPin = 5; 555 pinut 2 höger Motor
int pinfrontLights = 6; PIN-kod som aktiverar framför lamporna.
int pinbackLights = 7. PIN-kod som aktiverar tillbaka lamporna.
char avgörande; Används i funktionen check, butiker karaktären fick från telefonen.
röding det; Används i funktionen loop, butiker karaktären fick från telefonen.
int hastighet = 0; Lagrar hastighet baserat på karaktären skickas av telefonen.
void setup()
{
Serial.BEGIN(9600); Initiera seriell kommunikation med Bluetooth-modul på 9600 baud.
pinMode (LCPin, OUTPUT);
pinMode (LTPin, OUTPUT);
pinMode (RCPin, OUTPUT);
pinMode (RTPin, OUTPUT);
pinMode (pinfrontLights, produktionen);
pinMode (pinbackLights, produktionen);
Stoppa båda motorer på makt upp.
stopMotors();
}
void loop()
{
det = check();
medan (det == 'F') //if inkommande data är en F, gå framåt
{
moveForward();
det = check();
}
medan (det == 'B') //if inkommande data är a B, flytta tillbaka
{
moveBackward();
det = check();
}
medan (det == "L") //if inkommande data är en L, flytta hjul till vänster
{
moveLeftForward();
det = check();
}
medan (det == 'R') //if inkommande data är en R, flytta hjul höger
{
moveRightForward();
det = check();
}
medan (det == 'I') //if inkommande data är ett jag, sväng höger fram
{
moveRightForward();
det = check();
}
medan (det == "J") //if inkommande data är en J, vända tillbaka
{
moveRightBackward();
det = check();
}
medan (det == "G") //if inkommande data är ett G, sväng vänster fram
{
moveLeftForward();
det = check();
}
medan (det == "H") //if inkommande data är en H, sväng vänster tillbaka
{
moveLeftBackward();
det = check();
}
medan (det == s ') //if inkommande data är en S, sluta
{
stopMotors();
det = check();
}
Främre lampor och ljus tillbaka på/av är cool, men för att starta har inte koppla dem till min krets.
Men jag lämnar upptäckt i koden för vidare användning.
medan (det == 'U') //if inkommande data är ett U, slå på främre lampor
{
digitalWrite (pinfrontLights, hög);
det = check();
}
medan (det == 'u') //if inkommande data är ett u, stänga av främre lampor
{
digitalWrite (pinfrontLights, låg);
det = check();
}
medan (det == 'W') //if inkommande data är en W, vända tillbaka lampor
{
digitalWrite (pinbackLights, hög);
det = check();
}
medan (det == 'w') //if inkommande data är en w, stänga av tillbaka lampor
{
digitalWrite (pinbackLights, låg);
det = check();
}
}
int check()
{
om (Serial.available() > 0) //Check för data på de seriella linjerna.
{
dataIn = Serial.read(); Få karaktär skickas av telefonen och lagra den i "dataIn".
Serial.println(dataIn); denna linje är för felsökning med hjälp av Arduino seriell monitor.
om (dataIn == "F")
{
Determinant = "F";
}
annars om (dataIn == "B")
{
Determinant = "B";
}
annars om (dataIn == 'L')
{
Determinant = 'L';
}
annars om (dataIn == "R")
{
Determinant = "R";
}
annars om (dataIn == "I")
{
Determinant = "I";
}
annars om (dataIn == "J")
{
Determinant = "J";
}
annars om (dataIn == "G")
{
Determinant = "G";
}
annars om (dataIn == "H")
{
Determinant = 'H';
}
annars om (dataIn == 'S ")
{
Determinant = s ';
}
//-----------------------------
Standard DC motorer är inte tillräckligt snabbt för att spela med hastighet.
Du kan ställa in hastigheten med 555 Trigger Pin med analogWrite();
Jag slår vad om du inte vill göra din tank långsammare än dess högsta hastighet med hjälp av standard DC motorer.
/*-----------------------------
annars om (dataIn == '0') //velocity = 0 - 9, q = toppfart.
{
hastighet = 20; värde = 0 - 255; "velocity" behöver inte återlämnas.
}
-------------------------------*/
annars om (dataIn == "U")
{
Determinant = 'U';
}
annars om (dataIn == "u")
{
Determinant = 'u';
}
annars om (dataIn == "W")
{
Determinant = 'W';
}
annars om (dataIn == "w")
{
Determinant = 'w';
}
}
returnera avgörande;
}
Dessa riktning funktioner är utformade för 555 Motor Driver
Du måste ändra dem för att passa din andra motor förare.
void moveForward() {
digitalWrite (LCPin, hög);
digitalWrite (LTPin, hög); L-Forward
digitalWrite (RCPin, hög);
digitalWrite (RTPin, hög); R-Forward
}
void moveBackward() {
digitalWrite (LCPin, hög);
digitalWrite (LTPin, låg); L-bakåt
digitalWrite (RCPin, hög);
digitalWrite (RTPin, låg); R-bakåt
}
void stopMotors() {
digitalWrite (LCPin, låg);
digitalWrite (LTPin, hög); L-Stop
digitalWrite (RCPin, låg);
digitalWrite (RTPin, hög); R-Stop
}
void moveLeftForward() {
digitalWrite (LCPin, hög);
digitalWrite (LTPin, låg); vänstra hjulet bakåt
digitalWrite (RCPin, hög);
digitalWrite (RTPin, hög); höger hjul fram
}
void moveRightForward() {
digitalWrite (RCPin, hög);
digitalWrite (RTPin, låg); höger hjul bakåt
digitalWrite (LCPin, hög);
digitalWrite (LTPin, hög); vänstra hjulet framåt
}
void moveLeftBackward() {
digitalWrite (LCPin, hög);
digitalWrite (LTPin, hög); vänstra hjulet framåt
digitalWrite (RCPin, hög);
digitalWrite (RTPin, låg); höger hjul bakåt
}
void moveRightBackward() {
digitalWrite (LCPin, hög);
digitalWrite (LTPin, låg); vänstra hjulet bakåt
digitalWrite (RCPin, hög);
digitalWrite (RTPin, hög); höger hjul fram
}