Qua quá trình thực hiện, kiểm nghiệm và đánh giá sản phẩm đã chứng minh đề tài “Nghiên cứu, thiết kế, chế tạo xe nhiên liệu kép trên phương tiện hai bánh” mang tính ứng dụng cao, đặc biệt đối với một quốc gia có lượng tiêu thụ xe đứng thứ 4 trên thế giới như Việt Nam. Định hướng tiềm năng phát triển đối với sản phẩm này dựa trên nhu cầu thực tiễn của xã hội là rất lớn. Từ đó, nhóm đề xuất như sau:
- Nâng cấp phụ kiện, linh kiện để mơ hình được hồn chỉnh hơn;
- Thiết lập thêm các chế độ phù hợp với đối tượng di chuyển như hạn chế tốc độ, các chức năng cảnh báo hỗ trợ người dùng;
- Tích hợp thêm bộ phận sạc trở lại bình khi xe sử dụng động cơ đốt trong thì động cơ điện sẽ hoạt động như một máy phát điện.
ứng dụng các sản phẩm như trên vào thị trường Việt Nam càng sớm càng tốt, bên cạnh đó sản phẩm có thể dùng cho cơng tác giảng dạy, thực nghiệm trên mơ hình tương tự để tăng thêm sự hiểu biết về những sản phẩm sạch đối với xe máy nói riêng và ngành giao thơng vận tải nói chung, dần giảm thiểu khí thải tác động đến mơi trường. Với đề tài “Nghiên cứu, thiết kế, chế tạo xe nhiên liệu kép trên phương tiện xe hai bánh” đã cho thấy khả năng hoạt động phối hợp trơn tru, linh hoạt đáp ứng hoàn toàn khả năng thay thế và sử dụng đại trà tại thị trường Việt Nam. Tuy nhiên, để ứng dụng rộng rãi hơn trên thị trường thì cần phải cải tiến thêm các chức năng, hiệu chỉnh một số bộ phận sao cho phù hợp cơ cấu, thẩm mỹ và đảm bảo độ an tồn khi di chuyển.
TÀI LIỆU THAM KHẢO
Tài liệu trích dẫn từ sách
[1] Lý thuyết ô tô máy kéo, chủ biên GS. TSKH. Nguyễn Hữu Cẩn, Nxb khoa
học và kỹ thuật
[2] Nguyễn Phụ Thượng Lưu. (2018). Phương tiện giao thơng và nhiên liệu
sạch, Hutech, Tp.Hồ Chí Minh
[3] Ths. Nguyễn Ngọc Ánh, Ths. Võ Thị Bích Ngọc (2018). Tài liệu học tập
Hutech Kỹ thuật điện tử, Hutech, TP. HCM.
[4] PGS.TS Nguyễn Phụ Thượng Lưu (2018). Tài liệu học tập Hutech Tính
tốn thiết kế ô tô, Hutech, TP.HCM.
Tài liệu trích dẫn từ sách điện tử
[5] Hybrid vehicles and the future of personal transportation, Ellen E.Fuhs, [6] Electric and Hybrid cars, Curtis Anderson, Judy Anderson,
[7] Modern electric, hybrid electric, and fuel cell vehicles, Mehrdad Edsami,
Yimin Gao, Ali Emadi,
[8] L. Sana. (2005). Driving the solition: The plug-in hybrid vehicle, EPRI
Journal, Fall
[9] J. Axsen, A. F. Burke, and K. S. Kurani, Batteries for PHEVs: Comparing
Goals and the state of Technology, Electric and Hybrid Vehicles: Power Sources, Models, Sustainability, Infrastructure and the Market, Elsevier, ISBN: 978-0- 444-53565-8, 2010
[10] Simpson, T. Market, October 2006. Cost – Benefit Analysis of Plug-in Hybrid Electric Vehicle Technology, 22nd International Electric Vehicle Symposium,Yokohama, Japan
Tài liệu trích dẫn từ Internet [11] https://cafef.vn/thi-truong-xe-may-viet-nam-nam-2020-ton-that-nhat-trong- nhieu- nam-khong-chi-boi-covid-19-20210120173537523.chn [12] https://www.iea.org/data-and-statistics/data- browser?country=VIETNAM&fuel=CO2%20emissions&indicator=CO2BySect or [13] https://chuyenxe.com/cong-nghe/xe-may-hybrid-la-gi/ [14] https://autodaily.vn/2018/09/xe-may-hybrid-lan-gio-moi-cua-thi-truong-xe- may- viet [15] https://vi.wikipedia.org/wiki/Xe_lai_s%E1%BA%A1c_%C4%91i%E1% BB%87n [16] http://www.hondangocphat.com/co-che-hoat-dong-cua-pcx-hybrid [17] https://moneyinc.com/best-hybrid-motorcycles-money-can-buy/ [18] https://vietnamfinance.vn/viet-nam-tieu-thu-xe-may-dung-thu-2-dong- nam-a- dung-thu-4-the-gioi-20180504224250193.htm [19] https://tinhte.vn/thread/phan-biet-phanh-dia-tang-trong-tai-sao-phai cham-soc- he-thong-phanh-sau-moi-lan-di-mua.2720846/ [20] https://suaxedienhn.com/cach-sua-xe-dap-dien/ [21] https://cungcau.vn/lpg-la-gi-lpg-khac-gi-lng-va-cng-6538.html [22] https://www.vietnamconsulate-pakse.org/cuoc-song/khi-dau-mo-hoa- long-lpg-la-gi-huong-dan-lua-chon-mot-binh-gas-an-toan-trong-gia-dinh/ [23] https://vietnamfinance.vn/nghien-cuu-cua-toyota-xe-hybrid-se-la-xu- huong-trong-10-nam-toi-tai-viet-nam-20180504224251313.htm [24] https://arduinokit.vn/giao-tiep-i2c-lcd-arduino/ [25] https://stanford.com.vn/kien-thuc-lap-trinh/tin-chi- tiet/cagId/27/id/22569/huong-dan-viet-so-do-khoi-thuat-toan-trong-lap- trinh [26] https://dientutuonglai.com/mach-nguon-ha-ap-dung-adj-lm2576.html
PHỤ LỤC 1. Code lập trình Chương trình ổng
//#include <LiquidCrystal.h> // include the LCD library// include hàm lcd vào
//const int rs = PB9, en = PB8, d4 = PA8, d5 = PB15, d6 = PB14, d7 = PB13; // khai báo các chân LCD
//LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Khởi tạo gpio LCD
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2);
#define led_status PC13
unsigned int counter_led=0; #define pi 3.14
#define D 0.46 // met = 460mm// duong kinh banh xe #define L 1.44 //pi*D // chieu dai cung banh xe (m) #define roundStick 28
#define metPerStick 0.05 // L/roundStick #define km_var 180 // metPerStick*3600
char txt0[17]=""; char txt1[17]="";
char lcd_refresh=0;
unsigned int counter_lcd=0; unsigned int stick=0;
#define inj_input PA3 #define start_sw PA4 #define key_on PA5 #define fush_fuel PA6 #define chan_chong PA7 #define warn_sys PB1 #define hall_A PB14 #define hall_B PB13 #define hall_C PB12 #define btnSet PB11 #define btnUp PB10 #define btnDown PB1 #define output_pwr_moto PB9 #define output_ignt_moto PC15 #define output_pwr_biker PB5 #define output_sstand PB8 #define output_buzz PA8
#define debug Serial1
unsigned int counter_check_adc=0; char check_adc=0;
#define biker_mode 0 #define moto_mode 1 #define combie_mode 2
boolean system_status = false;
unsigned char system_mode = biker_mode;
unsigned int counter_A=0; unsigned int counter_B=0; unsigned int counter_C=0;
unsigned int val_power = 0; unsigned int val_tayga = 0; unsigned int val_throttle = 0;
unsigned int km_per_hour = 0; unsigned int rmp = 0;
// Globals
// Tick Generators
static uint32_t last_time, now = 0; // OLED every 1100 ms to avoid video flicker volatile uint32_t last_time2, now2 = 0; // Detect Standstill after 200ms
static uint32_t last_time3, now3 = 0; // Push-button scan period 200ms
static uint32_t last_time4, now4 = 0; // RPM calculation and OLED every 1000 ms
//volatile uint32_t Motor_tick, last_Motor_tick = 0; // to calculate speed, distance, Odometer
unsigned int Motor_tick, last_Motor_tick = 0; // to calculate speed, distance, Odometer boolean toggle = LOW;
boolean Motor_ON, last_PAS, start_pulse = false;
volatile byte Hall, Hall_simu, last_Hall, motor_turns, PAS_ticks, assist_level=0; unsigned int pw, pw_p, pw_t, pw_max, throttle_in =0;
unsigned int motor_status=0; // trang thai cua motor xe may unsigned long var=0;
void handler_led(void) {
if (++counter_led >= 1000) {
counter_led=0;
//digitalWrite(led_status, !digitalRead(led_status)); // nháy led 1s } if (++counter_check_adc > 200) { counter_check_adc=0; check_adc=1; } }
void lcd_update(char *lcd_t0, char *lcd_t1) { lcd.clear(); lcd.setCursor(0, 0); lcd.print(lcd_t0); lcd.setCursor(0, 1); lcd.print(lcd_t1); }
unsigned char readVolt() {
return val/10; }
unsigned int readTayga() {
unsigned int val = analogRead(adc_tayga); val = map(val, 0, 4095, 0, 100);
return map(val, 15, 70, 0, 100); }
void next_step() {
// Hall has changed, update H1,H2,H3-L1,L2,L3
Motor_tick++; //now done by Speed signal
digitalWrite(led_status, !digitalRead(led_status)); } void Read_Hall() { Hall=0; if (digitalRead(hall_A)==HIGH) Hall=Hall+1; //if (digitalRead(hall_B)==HIGH) Hall=Hall+2; //if (digitalRead(hall_C)==HIGH) Hall=Hall+4; }
void calc(void) {
// Read Throttle
// check Push Button Inputs
now3=millis();
if (( now3-last_time3)>=200 ) // every 200ms, gives debouncing {
last_time3=now3;
// set assist_level 0..5 by push button
if (digitalRead(btnDown)==LOW) system_mode--; if (system_mode>128) system_mode=2; // min value if (digitalRead(btnUp)==LOW) system_mode++; if (system_mode>=3) system_mode=0; // max value
if (digitalRead(btnSet)==LOW) // test relay de xe may {
//digitalWrite(output_ignt_moto, HIGH);
if (system_status == true) system_status = false; else system_status = true;
while(1) { if (digitalRead(btnSet)==HIGH) break; delay(100); } }
//else digitalWrite(output_ignt_moto, LOW); }
if (( now4-last_time4)>=1000 ) // 90/90/12: (Cao bánh = 90mm)*2 + 12inch(30cm) = 300 + 2*80mm = 460mm { last_time4=now4; //km_per_hour=((Motor_tick-last_Motor_tick)*223)/1000; //float a = Motor_tick*metPerStick; var=0; var = Motor_tick*km_var; //a = a/1000; //km_per_hour = a*3600; // km/h km_per_hour = var/1000; last_Motor_tick=Motor_tick; Motor_tick=0; /* debug.print("Tayga: "); debug.println(readTayga()); debug.print("Volt: "); debug.println(readVolt()); debug.print("speed meter km/h: "); debug.println(km_per_hour); debug.print("Motor : "); debug.println(system_status); debug.print("Throttle : "); debug.println(throttle_in); debug.print("Hall_simu : "); debug.println(Hall_simu); debug.print("Hall : "); debug.println(Hall); debug.print("System_mode : "); debug.println(system_mode);*/
// every 500ms OLED refresh now=millis();
if (( now-last_time)>=500 ) {
last_time=now;
sprintf(txt0, "M: %d - V = %02dV", system_mode, readVolt());
sprintf(txt1,"%03u-%03u-%03u",readTayga(),km_per_hour,last_Motor_tick); lcd_update(txt0, txt1); } } void setup() {
pinMode(led_status, OUTPUT); // set GPIO la output
digitalWrite(led_status, LOW); // ghi led_status ban dau la muc LOW
pinMode(adc_power, INPUT_ANALOG); // set GPIO la input pinMode(adc_tayga, INPUT_ANALOG); // set GPIO la input pinMode(adc_throttle, INPUT_ANALOG); // set GPIO la input
pinMode(inj_input, INPUT); pinMode(start_sw, INPUT); pinMode(key_on, INPUT); pinMode(fush_fuel, INPUT); pinMode(chan_chong, INPUT); pinMode(warn_sys, INPUT); pinMode(hall_A, INPUT);
pinMode(btnSet, INPUT);
pinMode(btnUp, INPUT); // set GPIO la input pinMode(btnDown, INPUT);
pinMode(output_pwr_moto, OUTPUT); // mo nguon Key pinMode(output_ignt_moto, OUTPUT); // kick motor de pinMode(output_sstand, OUTPUT); digitalWrite(output_pwr_moto, LOW); digitalWrite(output_ignt_moto, LOW); digitalWrite(output_sstand, LOW); pinMode(output_pwr_biker, OUTPUT); pinMode(output_buzz, OUTPUT); digitalWrite(output_pwr_biker, LOW); digitalWrite(output_buzz, LOW);
debug.begin(9600); // set uart1 115200 bps
lcd.init(); lcd.backlight();
delay(1000);
lcd.setCursor(0, 0); // set con trỏ bắt đầu ở 0, dòng 0 lcd.print(txt0);
lcd.setCursor(0, 1); // set con trỏ bắt đầu ở 0, dòng 1 lcd.print(txt1);
Timer4.setPeriod(1000); // in microseconds // set chu kỳ timer 4 là 1ms tràn Timer4.attachInterrupt(TIMER_CH1, handler_led); // ngat timer 4: 1ms
for(int i=0; i<10;i++) { digitalWrite(led_status, !digitalRead(led_status)); delay(100); } sprintf(txt0, "HELLO"); sprintf(txt1, "STARTING"); lcd_update(txt0, txt1); debug.println("Staring ...");
attachInterrupt(hall_A, next_step, RISING); //attachInterrupt(hall_B, next_step, CHANGE); //attachInterrupt(hall_C, next_step, CHANGE); delay(1000);
//Read_Hall(); //last_Hall=Hall;
last_time=millis(); // init time-outs last_time2=millis(); last_time3=millis(); last_time4=millis(); } void loop() { if (system_status == true) { if (system_mode == biker_mode)
digitalWrite(output_pwr_moto, LOW);
}
else if (system_mode == moto_mode) {
digitalWrite(output_pwr_biker, LOW); // bat khoa xe dien digitalWrite(output_pwr_moto, LOW); }
else if (system_mode == combie_mode) {
if (km_per_hour <= speed_compare) // van toc nho hon cai dat {
if (motor_status == 1) {
if (throttle_in < 10) // tay ga phai tra ve < 10% {
motor_status=0; digitalWrite(output_pwr_moto, HIGH); // tat kick dien xe may delay(1000); }
}
else {
digitalWrite(output_pwr_biker, HIGH); // bat khoa xe dien digitalWrite(output_pwr_moto, LOW); // tat kick dien xe may } } else {
if (throttle_in < 10) // tay ga phai tra ve < 10% {
digitalWrite(output_ignt_moto, HIGH); // de xe delay(1000);
digitalWrite(output_ignt_moto, LOW); // tat de xe motor_status=1;
} } else {
digitalWrite(output_pwr_biker, LOW); // tat khoa xe dien digitalWrite(output_pwr_moto, LOW); } } } } // sys = true else { digitalWrite(output_pwr_moto, LOW); digitalWrite(output_ignt_moto, LOW); digitalWrite(output_sstand, LOW); digitalWrite(output_pwr_biker, LOW); digitalWrite(output_buzz, LOW); }
calc(); // All computations to calculate PWM ,other values and start/stop Logic