Arduino Nanoプラットフォーム上のGPSを使用したRC Auto





私のアイデア:電源を切るときにラジコンの最高速度と記憶を調べるには、速度を上げるときにヘッドライトをオンにする、回転するときにターンシグナルをオンにする、ブレーキをかけるときにブレーキライトをオンにする、駐車時にサイドライトをオンにする、マシンのボタンを押すときにライトを点滅させる(最大速度リセットボタン) 。



構成で使用されるマシン:



タスクはタイプライターで行うことです:

  1. すべてのライトとボタンを設定する
  2. Arduino機器をインストールする
  3. Arduinoでプログラムをダウンロードする
  4. プログラム設定


ライトの設置。 RCカーフラッシュライトシステムキットから、ワイヤー付きの既製のLEDを取り出しました。





ヘッドライト(これらも寸法です)と方向指示器の取り付け





Arduino NanoおよびGPS機器の設置、両面テープとネジですべてを保護





ネジで固定されたリアウィンドウへのLCDの取り付け



組み立てに必要なもの:

Arduino Nano、価格は200 r。

GPS受信機、価格は900 r。

LED、100 rからの価格。 /白色LED、3個 (ヘッドライトとリバース)、赤2個。 (ブレーキ)、オレンジ2個 (ウインカー)

ワイヤ、価格は100 r。

LCDおよびI2C、価格は200 r。

ボタンと抵抗器、価格は100 r。 /ボタン(速度リセットおよび点滅ライト)および10 kOhm抵抗



プロジェクト価格は1600ルーブルでした。



1. Arduino Nano







2. LCD 1602およびI2C





LCD





LCDの背面とそれにはんだ付けされたI2Cモジュール



3. GPS-GY-NEO-6MV2(GPS受信機)





GPS受信機



arduinoのプログラムをコンピューターにインストールし、スケッチをarduinoにアップロードします。



十分なライブラリがない場合は、LiquidCrystal_I2C.h、EEPROM.h、Wire.h、SoftwareSerial.h、TinyGPS.hをダウンロードしてコンピューターにインストールする必要があります。



スケッチ自体:

スケッチ
#include <EEPROM.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); //I2C: SDA pin A4 / SCL pin A5 /VCC pin +3,3V /GND pin GND

#include <SoftwareSerial.h>

#include <TinyGPS.h>

TinyGPS gps;

SoftwareSerial ss(4, 3); // GPS: RX pin D4, TX pin D3, VCC pin +5V ,GND pin GND

static void smartdelay(unsigned long ms);

static void print_float(float val, float invalid, int len, int prec);

static void print_int(unsigned long val, unsigned long invalid, int len);

static void print_date(TinyGPS &gps);

float flat, flon; //

unsigned long fix_age, time, date, speed, course; //

int value;

int value2;

int pin = 7; // D7

int pins = 8; // D8

int pin1 = 11;// : D11

int pin2 = 12;// : D12

int pin3 = 10;// : D10

int pin4 = 9;// : D9

int pin6 = 6;// : D6

unsigned long duration1;// 1372 , 1834 ,973

unsigned long duration2;// 1834 , 973

int pin7 = 2;// : pin D2

int pin8 = 13;// pin D13

const int buttonPin = 5; // () , pin D5

int buttonState = 0; //

void setup()

{

pinMode(pin, INPUT);

pinMode(pin1, OUTPUT);

pinMode(pin2, OUTPUT);

pinMode(pins, INPUT);

pinMode(pin3, OUTPUT);

pinMode(pin4, OUTPUT);

pinMode(pin6, OUTPUT);

pinMode(pin7, OUTPUT);

pinMode(pin8, OUTPUT);

pinMode(buttonPin, INPUT); // , ,

Serial.begin(115200); //

ss.begin(9600); //gps

Serial.println("RRRR777");

lcd.init(); //

lcd.clear();

lcd.backlight();

lcd.setCursor(0, 0);

lcd.print("RRRR777 2015");

lcd.setCursor(0, 1);

lcd.print(" GPS RCavto");

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500); //

digitalWrite(pin8, HIGH); //

digitalWrite(pin7, LOW); //

delay(500); //

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500); //

digitalWrite(pin8, HIGH); //

digitalWrite(pin7, LOW); //

delay(500); //

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500); //

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500); //

digitalWrite(pin8, HIGH); //

digitalWrite(pin7, LOW); //

delay(500); //

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500); //

digitalWrite(pin8, HIGH); //

digitalWrite(pin7, LOW); //

delay(500); //

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500);

digitalWrite(pin7, LOW); //

digitalWrite(pin8, LOW); //

delay(500); //

lcd.clear();

delay(500);

}

void loop()

{

duration1 = pulseIn(pin, HIGH);

duration2 = pulseIn(pins, HIGH);

if ((duration1 > 1500) && (duration1 < 2000))

{digitalWrite(pin1, HIGH); // LEFT

delay(250); //

digitalWrite(pin1, LOW); //

}

if ((duration1 < 1300) && (duration1 > 800))

{digitalWrite(pin2, HIGH); // RIGHT

delay(250); //

digitalWrite(pin2, LOW); //

}

if ((duration2 > 1480) && (duration2 < 2000))//

{ analogWrite(pin4, 20); //

analogWrite(pin3, 255); //

delay(500); //

}

if ((duration2 < 1480) && (duration2 > 800)) //

{analogWrite(pin4, 255); //

analogWrite(pin3, 20); // +*

digitalWrite(pin6, LOW); //

delay(50);

}

if ((duration2 < 1400) && (duration2 > 800))//

{//digitalWrite(pin4, LOW); //

digitalWrite(pin6, HIGH); //

delay(500); //

}

float flat, flon;

unsigned long age, date, time, chars = 0;

unsigned short sentences = 0, failed = 0;

float h = gps.f_speed_kmph(); // speed in km/hr

int h1 = (h-(int)h)*100;

Serial.println(h);

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(" Mersedes GT3"); //

lcd.setCursor(0, 1);

lcd.print("S=");

lcd.print(h);

lcd.setCursor(8, 1);

lcd.print("MS=");

value = EEPROM.read(0); //

value2 = EEPROM.read(1);

lcd.print(value);

lcd.print(".");

lcd.print(value2);

buttonState = digitalRead(buttonPin);//

if (buttonState == HIGH)// LOW) ///

{

EEPROM.write (0,0);

EEPROM.write (1,0);

lcd.setCursor(8, 1);

lcd.print("MS=RESET");

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500); //

digitalWrite(pin8, HIGH); //

digitalWrite(pin7, LOW); //

delay(500); //

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500); //

digitalWrite(pin8, HIGH); //

digitalWrite(pin7, LOW); //

delay(500);

lcd.setCursor(0, 1);

lcd.print("Rusticktigr777@mail.ru");

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500); //

digitalWrite(pin8, HIGH); //

digitalWrite(pin7, LOW); //

delay(500); //

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500); //

digitalWrite(pin8, HIGH); //

digitalWrite(pin7, LOW); //

delay(500); //

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500);

digitalWrite(pin8, HIGH); //

digitalWrite(pin7, LOW); //

delay(500); //

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500); //

digitalWrite(pin8, HIGH); //

digitalWrite(pin7, LOW); //

delay(500); //

digitalWrite(pin7, HIGH); //

digitalWrite(pin8, LOW); //

delay(500);

digitalWrite(pin7, LOW); //

digitalWrite(pin8, LOW); //

}

if (h > value)//RECORD

{

EEPROM.write (0,h);

EEPROM.write (1,h1);

}

smartdelay(500);

}

static void smartdelay(unsigned long ms)

{

unsigned long start = millis();

do

{

while (ss.available())

gps.encode(ss.read());

} while (millis() - start < ms);

}

static void print_float(float val, float invalid, int len, int prec)

{

if (val == invalid)

{

while (len-- > 1)

Serial.print('*');

Serial.print(' ');

}

else

{

Serial.print(val, prec);

int vi = abs((int)val);

int flen = prec + (val < 0.0 ? 2 : 1); // . and -

flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;

for (int i=flen; i<len; ++i)

Serial.print(' ');

}

smartdelay(0);

}

static void print_int(unsigned long val, unsigned long invalid, int len)

{

char sz[32];

if (val == invalid)

strcpy(sz, "*******");

else

sprintf(sz, "%ld", val);

sz[len] = 0;

for (int i=strlen(sz); i<len; ++i)

sz[i] = ' ';

if (len > 0)

sz[len-1] = ' ';

Serial.print(sz);

smartdelay(0);

}

static void print_date(TinyGPS &gps)

{

int year;

byte month, day, hour, minute, second, hundredths;

unsigned long age;

gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);

if (age == TinyGPS::GPS_INVALID_AGE)

Serial.print("********** ******** ");

else

{

char sz[32];

sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",

month, day, year, hour, minute, second);

Serial.print(sz);

}

print_int(age, TinyGPS::GPS_INVALID_AGE, 5);

smartdelay(0);

}









Arduinoへのワイヤの接続:

ワイヤー
I2C:SDAピンA4 / SCLピンA5 / VCCピン+ 3.3V / GNDピンGND(最大輝度とバックライトを設定)

GPS:RXピンD4、TXピンD3、VCCピン+ 5V、GNDピンGND

リセットボタン(通常は開いているボタン):1つのVCCピン+ 5Vピン、ピンD5の別のピン、ピンD5の抵抗、ピンGND

LED:ヘッドライト(寸法)ピンD9の白い「+」

LED:テールライト(寸法)ピンD10の赤い「+」

LED:ピンD6の反転白「+」

LED:ヘッドライト(寸法)ピンD9の白い「+」

LED:ピンD11のオレンジ色の「+」を左に

LED:ピンD12の右オレンジ「+」を回します

LED:ピンD2の赤い「+」点滅

LED:ピンD13のフラッシャーブルー「+」

ピンGNDのすべてのLED「-」



サーボターンの入力からピンD7のターンシグナル用のワイヤを接続します(通常、3本のワイヤが白ではんだ付けされ、ワイヤをピンD7に出力します。赤-パワープラス、黒-パワーマイナス、レシーバーに接続)。



エンジンサーボの入力から移動用のワイヤをピンD8に接続します(3本のワイヤ:通常は白で、はんだ付けし、ワイヤをピンD8に出力します。赤-パワープラス、黒-パワーマイナス、レシーバーに接続します)。



Arduinoの電力は、「+」バッテリーからVINピンに直接供給されます(7.2Vで)。 バッテリー「-」から直接ArduinoのGND共通線。





設定:コーナリングまたは移動時に正しく動作しない場合は、コンピューターのプログラムを介して値を独自に変更します:データが処理されておらず、GPSの緑色のLEDが点灯している場合、行のif((durationX> XXXX)&&(durationX <XXXXX)) / RX RXピンD4、TXピンD3を交換する必要がある場合があります



PSアイデアは、プログラミングを知っているシンプルなものであることが判明しました。また、エンジンの温度とエンジンに関する通知をこのマシンに追加し、時間、タコメーター、ビデオカメラをMercedes-Benz GT3に追加できます。



皆さんに幸運を!



All Articles