Difference between revisions of "S20: Tesla Model RC"
(→Hardware Design) |
(→Technical Challenges) |
||
Line 778: | Line 778: | ||
'''GPS (Ublox M8N)''' | '''GPS (Ublox M8N)''' | ||
− | *The enabled 2-stop bits in uart.c were causing communication problems between the SJTwo MCU and the Ublox M8N GPS module. | + | *'''Problem:'''The enabled 2-stop bits in uart.c were causing communication problems between the SJTwo MCU and the Ublox M8N GPS module. |
**'''Solution:'''To solve the 2 stop bits configuration was disabled in uart.c in the uart__init() function as shown in figure # and issue was solved. | **'''Solution:'''To solve the 2 stop bits configuration was disabled in uart.c in the uart__init() function as shown in figure # and issue was solved. | ||
[[File:2-stop-bits.png|thumb|700px|middle|center|Figure #. 2-stop-bit configuration]] | [[File:2-stop-bits.png|thumb|700px|middle|center|Figure #. 2-stop-bit configuration]] | ||
− | *GPS module did not retain configurations and were lost after being powered off for many hours going back back to default settings. This problem was crucial since it was causing the SJ2 to parse the latitude and longitude incorrectly from other messages other than NMEA GNGGA. | + | *'''Problem:'''GPS module did not retain configurations and were lost after being powered off for many hours going back back to default settings. This problem was crucial since it was causing the SJ2 to parse the latitude and longitude incorrectly from other messages other than NMEA GNGGA. |
**'''Solution:''' To solve this configuration problem u-center which is an interface for the GPS Ublox module was used to read which strings the program sends over UART to configure the GPS module. This solution was implemented in the gps.c module creating a function called gps__private_configure_for_nmea_gngga() in which holds a char array with the hex representation of the configurations needed to disable all of the NMEA messages except GNGGA. This function then sends this configuration values back to the GPS module over UART and the GPS module responds back with an ACK message (8μ.......) from every configuration message meaning that the configurations were successfully applied as shown in figure #. <br/> | **'''Solution:''' To solve this configuration problem u-center which is an interface for the GPS Ublox module was used to read which strings the program sends over UART to configure the GPS module. This solution was implemented in the gps.c module creating a function called gps__private_configure_for_nmea_gngga() in which holds a char array with the hex representation of the configurations needed to disable all of the NMEA messages except GNGGA. This function then sends this configuration values back to the GPS module over UART and the GPS module responds back with an ACK message (8μ.......) from every configuration message meaning that the configurations were successfully applied as shown in figure #. <br/> | ||
[[File:nmea_config_new.png|thumb|1000px|middle|center|Figure #. GPS Module NMEA Configuration]] | [[File:nmea_config_new.png|thumb|1000px|middle|center|Figure #. GPS Module NMEA Configuration]] | ||
+ | |||
+ | *Compass (HMC5883L 3-Axis Magnetometer) | ||
+ | |||
<HR> | <HR> |
Revision as of 21:23, 21 May 2020
Contents
Tesla Model RC
Abstract
Tesla Model RC is an electric, battery-powered, self-navigating RC car. The aim is to navigate to the destination set on the Android application by utilizing GPS navigation. The car combines the data received from multiple sensors to perceive its surroundings to avoid obstacles in its path.
Introduction
The project was divided into 5 modules:
- Bridge and Sensor Controller
- Motor Controller
- Geographical Controller
- Driver and LCD controller
- Android Application
Team Members & Responsibilities
<Team Picture>
- Git Project Link: Tesla Model RC
- Motor Controller
- Bridge Sensor Controller
- Geographical Controller
- Driver & LCD Controller
- Android Application
- System Integration and Testing
- RC Car Design: 3D Printing
- Review Team
Schedule
Week# | Start Date | End Date | Task | Status |
---|---|---|---|---|
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
5 |
|
|
|
|
6 |
|
|
|
|
7 |
|
|
|
|
8 |
|
|
|
|
9 |
|
|
|
|
10 |
|
|
|
|
11 |
|
|
|
|
Parts List & Cost
Item# | Part Desciption | Vendor | Qty | Cost |
---|---|---|---|---|
1 | RC Car 1/10 Scale | Redcat Racing [1] | 1 | $99.99 + Tax |
2 | CAN Transceivers TJA1050 | LIVISN [2] | 5 | $6.39 + Tax |
3 | GPS Module Built-in Compass | Readytosky [3] | 1 | $28.89 + Tax |
4 | HC-SR04 Ultrasonic Module | ELEGOO [4] | 5 | $9.98 + Tax |
5 | HC-020K Wheel Encoder Module | Hilitchi [5] | 1 | $9.99 + Tax |
6 | ESP8266 WiFi Module | DIYmall [6] | 1 | $6.55 + Tax |
7 | Extra 7.2V 5000mAh NiMH battery | Melasta [7] | 1 | $29.99 + Tax |
8 | Micro-USB to USB cable | Walmart [8] | 4 | $4.00 + Tax |
9 | EL-CP-004 120pcs Multicolored Dupont Wire | ELEGOO [9] | 1 pack | $6.98 + Tax |
10 | SJTwo Microcontroller | SCE at SJSU [10] | 4 | $40 |
11 | Black PLA Filament | Hatchbox [11] | 1 | $22.99 + Tax |
12 | 120 Ω Resistor | Excess Solutions | 2 | $0.30 |
13 | 1 MΩ Resistor | Excess Solutions | 1 | $0.15 |
13 | 100 kΩ Resistor | Excess Solutions | 1 | $0.15 |
14 | DB9 Female Connector Right Angle Mount | Excess Solutions | 1 | $0.30 |
15 | 2.54 Male Header Strip 36 Pin | Excess Solutions [12] | 1 | $0.36 |
16 | 5x7cm Prototype Board | uxcell [13] | 3 | $7.09 + Tax |
17 | 2.54mm JST-XHP 2 Pin Housing with 2.54mm JST XH Female Connector | QLOUNI [14] | 8 | |
18 | 12mm Waterproof Push Button Momentary On Off Switch | PP-NEST [15] | 1 | |
19 | #22 Gauge Wire | Elenco [16] | As needed | |
20 | LM2596 Buck Converter DC to DC | D-PLANET [17] | 1 | $5.95 + Tax |
21 | 11 in. x 14 in. x .093 in. Acrylic Sheet | The Home Depot [18] | 1 | $6.67 + Tax |
22 | 20x4 LCD Display Module | [19] | 1 | $ |
23 | 6-32 Brass Motherboard Standoffs | Hantof [20] | 36 | $14.58 + Tax |
24 | Metallic Aluminium Spray Paint | Walmart [21] | 1 | $3.96 + Tax |
25 | Metallic Dark Metal Spray Paint | Walmart [22] | 1 | $4.96 + Tax |
26 | Plastidip Black Spray Paint | Walmart [23] | 1 | $5.82 + Tax |
Printed Circuit Board
<Picture and information, including links to your PCB>
CAN Communication
<Talk about your message IDs or communication strategy, such as periodic transmission, MIA management etc.>
Hardware Design
<Show your CAN bus hardware design> High Level Hardware Diagram
DBC File
https://gitlab.com/tesla-model-rc/sjtwo-c/-/blob/dev/dbc/tesla_model_rc.dbc
Bridge Sensor ECU
https://gitlab.com/tesla-model-rc/sjtwo-c/-/tree/dev/projects/sensor
Hardware Design
SJTwo Board | Module | Description | Protocol/Bus |
---|---|---|---|
P4.28 (TX3) | RX (ESP8266) | ESP8266 Rx data line | UART 3 |
P4.29 (RX3) | TX (ESP8266) | ESP8266 Tx data line | UART 3 |
P0.6 | Trigger (Ultrasonic) | Front sensor | |
P2.0 | Echo (Ultrasonic) | Front sensor | |
P0.7 | Trigger (Ultrasonic) | Rear sensor | |
P2.1 | Echo (Ultrasonic) | Rear sensor | |
P0.8 | Trigger (Ultrasonic) | Left sensor | |
P2.2 | Echo (Ultrasonic) | Left sensor | |
P0.9 | Trigger (Ultrasonic) | Right sensor | |
P2.4 | Echo (Ultrasonic) | Right sensor | |
P0.25 (ADC2) | Voltage reading (S) | Output of voltage divider | |
P0.1 (SCL1) | CAN transceiver (Tx) | CAN transmit | CAN |
P0.0 (SDA1) | CAN transceiver (Rx) | CAN receive | CAN |
5V (Ultrasonics) | Vcc | ||
GND | GND | Ground |
Software Design
Sensor Node
Sensor Node and CAN module
wifi module
battery tracking module
ultrasonics and GPIO Interrupts module
average buffer module (low pass filter for zeros)
ESP8266
Bridging between ESP8266 and mobile application is done through the creation of an access point on the ESP8266. Furthermore, the ESP8266 opens a server socket through CoAP allowing other CoAP clients to transmit or receive data from a created resource (/topics). The mobile application serves as the CoAP client and currently performs:
(GET) /heartbeat will receive string: "tmrc:heartbeat"
(GET) /getRadars will receive string: "aa,bb,cc,dd" where a is front radar, b is left radar, c is right radar, and d is back radar
(PUT) /setStatus will send string - either "$stop\n" or "$start\n"
(PUT) /setCoordinates will send coordinates as string - i.e. "#Sxxx.xxxxxx,Syyy.yyyyyy\n" where S is the sign and x is latitude and y is longitude
/getRadars resource will update through UART from a microcontroller. The string must follow the format: "^%02,%02,%02,%02" where '^' is the identifier for setting this resource. This length is also fixed where each radar data must have a width of no more than 2.
/setStatus resource has an identifier of '$', while /setCoordinates resource has an identifier of '#'. Both resources require appending a new line character at the end of string. This is essential for parsing strings on microcontroller side as the ESP8266 echoes received data over UART.
Project Setup
This project is built with ESP8266 RTOS SDK for programming the ESP8266. FreeRTOS, UART, Wifi with CoAP libraries are fully utilized in this project.
See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
softAP - Wifi Access Point
ESP8266 opens an access point for other wireless devices to connect too. This access point follows adaptation of one of this example:
https://github.com/espressif/ESP8266_RTOS_SDK/tree/master/examples/wifi/getting_started/softAP.
UART Configuration
UART is simply transmitted over UART0 TX/RX pins. This example is integrated.
CoAP Server
CoAP server would startup a daemon task, create resources and receive data from CoAP clients and transmit data to CoAP clients. This server follows adaptation of a couple examples:
https://github.com/espressif/ESP8266_RTOS_SDK/tree/master/examples/protocols/coap_server
https://github.com/obgm/libcoap-minimal/blob/master/server.cc
https://github.com/obgm/libcoap/blob/develop/examples/coap-server.c
The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained networks in the Internet of Things.
The protocol is designed for machine-to-machine (M2M) applications such as smart energy and building automation.
Please refer to RFC7252 for more details.
Technical Challenges
ultrasonic sensors smoothing/filtering
Motor ECU
https://gitlab.com/tesla-model-rc/sjtwo-c/-/tree/dev/projects/motor_node
Hardware Design
SJTwo Board | Module | Description | Protocol/Bus |
---|---|---|---|
P2.0 (PWM1) | Motor (S) | Control signal for motor speed | |
P2.4 (PWM5) | Servo (S) | Control signal for servo steering | |
P0.22 (PWM1) | Wheel encoder (Out) | Output signal of wheel encoder | |
P0.1 (SCL1) | CAN transceiver (Tx) | CAN transmit | CAN |
P0.0 (SDA1) | CAN transceiver (Rx) | CAN receive | CAN |
6V Motor and Servo | Vcc | ||
5V Wheel encoder | Vcc | ||
GND | GND | Ground |
Software Design
<List the code modules that are being called periodically.>
Technical Challenges
< List of problems and their detailed resolutions>
Geographical ECU
https://gitlab.com/tesla-model-rc/sjtwo-c/-/tree/dev/projects/geo_node
Hardware Design
SJTwo Board | GPS/Compass Module | Description | Protocol/Bus |
---|---|---|---|
P4.28 (TX3) | RX (Yellow Wire) | Ublox M8N Rx data line | UART 3 |
P4.29 (RX3) | TX (Green Wire) | Ublox M8N Tx data line | UART 3 |
P0.10 (SDA2) | SDA (White wire) | HCM5883L SDA | I2C 2 |
P0.10 (SCL2) | SCL (Orange wire) | HCM5883L SCL | I2C 2 |
P0.1 (SCL1) | CAN transceiver (Tx) | CAN transmit | CAN |
P0.0 (SDA1) | CAN transceiver (Rx) | CAN receive | CAN |
Vcc 3.3V | Vcc (Red wire) | Vcc | |
GND | GND (Black wire) | Ground |
Software Design
<List the code modules that are being called periodically.>
Technical Challenges
GPS (Ublox M8N)
- Problem:The enabled 2-stop bits in uart.c were causing communication problems between the SJTwo MCU and the Ublox M8N GPS module.
- Solution:To solve the 2 stop bits configuration was disabled in uart.c in the uart__init() function as shown in figure # and issue was solved.
- Problem:GPS module did not retain configurations and were lost after being powered off for many hours going back back to default settings. This problem was crucial since it was causing the SJ2 to parse the latitude and longitude incorrectly from other messages other than NMEA GNGGA.
- Solution: To solve this configuration problem u-center which is an interface for the GPS Ublox module was used to read which strings the program sends over UART to configure the GPS module. This solution was implemented in the gps.c module creating a function called gps__private_configure_for_nmea_gngga() in which holds a char array with the hex representation of the configurations needed to disable all of the NMEA messages except GNGGA. This function then sends this configuration values back to the GPS module over UART and the GPS module responds back with an ACK message (8μ.......) from every configuration message meaning that the configurations were successfully applied as shown in figure #.
- Solution: To solve this configuration problem u-center which is an interface for the GPS Ublox module was used to read which strings the program sends over UART to configure the GPS module. This solution was implemented in the gps.c module creating a function called gps__private_configure_for_nmea_gngga() in which holds a char array with the hex representation of the configurations needed to disable all of the NMEA messages except GNGGA. This function then sends this configuration values back to the GPS module over UART and the GPS module responds back with an ACK message (8μ.......) from every configuration message meaning that the configurations were successfully applied as shown in figure #.
- Compass (HMC5883L 3-Axis Magnetometer)
Driver Controller & LCD
https://gitlab.com/tesla-model-rc/sjtwo-c/-/tree/dev/projects/driver_controller_node
Hardware Design
SJTwo Board | LCD Module | Description | Protocol/Bus |
---|---|---|---|
P4.28 (TX3) | RX | LCD Rx data line | UART 3 |
P4.29 (RX3) | TX | LCD Tx data line | UART 3 |
P0.1 (SCL1) | CAN transceiver (Tx) | CAN transmit | CAN |
P0.0 (SDA1) | CAN transceiver (Rx) | CAN receive | CAN |
Vcc 3.3V | Vcc (Red wire) | Vcc | |
GND | GND (Black wire) | Ground |
Software Design
<List the code modules that are being called periodically.>
Technical Challenges
< List of problems and their detailed resolutions>
Mobile Application
<Picture and link to Gitlab>
Hardware Design
Software Design
<List the code modules that are being called periodically.>
Technical Challenges
< List of problems and their detailed resolutions>
Conclusion
<Organized summary of the project>
<What did you learn?>
Project Video
Project Source Code
Advise for Future Students
<Bullet points and discussion>