Как стать автором
Обновить

Комментарии 18

Видео давай. И какая скорость то в итоге?
Исходник под спойлером жесть, да и сама статья аля инстрактэблс, вот список компонентов, вот код, дерзайте. А вопросов больше чем ответов, да без видео как-то не айс.
Для чего тут GPS? Просто отобразить координаты на LCD? Если да, то смысл?
узнать максимальную скорость в радиоуправляемой машинке

Так и какая?
По-моему GPS для цели узнать скорость машинки плохо подходит. Слишком большая погрешность.
Почему не поставить датчик оборотов?
А что за модуль I2C?
То есть, я понимаю, что он делает, а называется как?
СКЕТЧ

Форматирование, не не слышал.
Модуль спутниковой навигации GPS6MV2 отрабатывает нормально, моя максимальная зафиксированная скорость 38 км/ч.
Модуль I2C нужен для подключения LCD.
Скетч:
www.pvsm.ru/pesochnitsa/95717
Нужна минимум одна фоточка внутренностей машины!

4 провода соединяют со схемой (+,-, контакт от поворотов, контакт от движения)



Изолента не синяя, не будет работать…
Намного точнее и энергоэффективнее будет датчик скорости вращения на основе эффекта Холла.
Скетч без GPS(только световые эффекты):
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
// питание «+» на pin VIN (в моем 7,2в).
// Для всех Светодиодов «-» на pin GND

void setup()
{
pinMode(pin, INPUT);
pinMode(pins, INPUT);
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pins, INPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin6, OUTPUT);
Serial.begin(115200); //для отладки
Serial.println(«RRRR777»);
}
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); // ждем секунду
}
}

Скетч: GPS и световые эффекты:

#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);
}
Монтажная схема RC Авто c GPS:
Подключение кнопки к Ардуино Nano:
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории