-
Can be combined with battery backup (upgrade_1.2.1)
10/26/2017 at 15:43 • 1 commentCircuit diagram upgrade_1.2.1
Press on/off on "Bracelet for the blind" after plugging the spare battery to use.
Code upgrade_1.2.1
//bracelet_for_the_blind_Upgrade_1.2.1 //tác giả(Author): Đỗ Xuân Tiến - Gmail: doxuantiendx07@gmail.com #include <EEPROM.h> const int trig = A1; //chân trig của HC-SR04 const int echo = A0; //chân echo của HC-SR04 byte ngon_tay_cai_6 = 6; //ngón tay - finger //byte middle_finger = 5; //ngón tay giữa //byte ngon_tay_ut_3 = 3; //ngón tay út - little finger byte mosfet_9 = 9; //mosfet byte coi_chip_5 = 5; //buzzer byte led_4 = 4; //led byte chan_sac_8 = 8; //chân bật tắt dòng sạc - D8 to on/off charger byte button_10 = 10; //button nguồn: chức năng bat/tat/rung/loa - button: on/off/vibrator/buzzer byte button_cong_12 = 12; //button " + " byte button_tru_11 = 11; //button " - " byte do_volt_pin_A3 = A3; //đo volt pin - A3 to measure the battery voltage byte volt_cam_sac_A2 = A2; //nhận biết khi cắm điện sạc - A2 to identify the battery charger byte rung_cai = 0; byte rung_ut = 0; byte rung_cai_1 = 0; byte rung_cai_2 = 0; byte rung_ut_1 = 0; byte rung_ut_2 = 0; byte che_do_rung = 0; byte khong_lap = 0; byte sau_tha_nut = 0; byte khong_lap_12 = 0; byte sau_tha_nut_12 = 0; byte khong_lap_11 = 0; byte sau_tha_nut_11 = 0; //byte khoa_bao_dong = 0; byte loa1 = 0; byte loa2 = 0; byte den1 = 0; byte den2 = 0; byte sac_1 = 0; byte sac_2 = 0; byte tat = 0; //biến giúp khi rút sạc thì tắt - Turn off the power when not charging byte EP_1lan1 = 0; byte EP_1lan2 = 0; byte EP_1lan3 = 0; byte EP_1lan4 = 0; byte EP_1lan5 = 0; byte hieu_so_bd = 0; byte EP_1lan1_khoangcach = 0; byte EP_1lan2_khoangcach = 0; byte EP_1lan3_khoangcach = 0; byte dk_kc = 0; byte cau_hinh_kc = 0; byte charging = 0; byte charging_1lan = 0; int dovolt_out = 0; int dovolt_pin = 0; float volt_pin = 0; unsigned long pe_rung = 0; unsigned long pe_rung_cai_1 = 0; unsigned long pe_rung_cai_2 = 0; unsigned long pe_rung_ut_1 = 0; unsigned long pe_rung_ut_2 = 0; unsigned long pe_loa1 = 0; unsigned long pe_loa2 = 0; unsigned long pe_nhanli = 0; unsigned long pe_nhanli_12 = 0; unsigned long pe_nhanli_11 = 0; unsigned long pe11 = 0; unsigned long pe12 = 0; unsigned long pe11_sac = 0; unsigned long pe12_sac = 0; unsigned long pe_volt_battery = 0; unsigned long thoi_gian = 0; // biến đo thời gian - Time variable unsigned long khoang_cach = 0; // biến lưu khoảng cách - Distance variable unsigned long khoang_cach_bao_dong = 0; unsigned long tong_khoang_cach = 0; unsigned long so_lan_do = 0; unsigned long hieu_so = 0; unsigned long pe_hieu_so = 0; unsigned long nghi_sac_15p = 0; unsigned long sac_duy_tri = 0; int GT_button = 0; int GT_button_000 = 0; int GT_button_cong_12_000 = 0; int GT_button_tru_11_000 = 0; int time_x = 0; int GT_button_cong_12 = 0; //+ int GT_button_tru_11 = 0; //- int do_rung = 0; //độ rung mạnh int do_am = 0; //độ to của âm int n_khoang_cach = 200; void(* resetFunc) (void) = 0;//cài đặt hàm reset void delay_0 (unsigned long giay) // hàm delay mới dùng trong "mode sạc pin" { unsigned long pe_delay_0 = millis(); while(millis() - pe_delay_0 <= giay){ GT_button = digitalRead(button_10); if(GT_button == 1){charging = 1; nghi_sac_15p = nghi_sac_15p + 600000; delay(1000); tat = 0; break;} //ấn button để vừa dùng vừa sạc } } void tien_sacpin (unsigned long giay) { unsigned long peham_sac = millis(); while((millis() - peham_sac <= giay) && (dovolt_out >= 650) && (tat == 1)){ //đo volt ngoài dovolt_out = analogRead(volt_cam_sac_A2); //Serial.println(dovolt_out); //nháy đèn if((den1 == 0) && (millis() - pe12 >= 150)){pe11 = millis(); digitalWrite(led_4,HIGH); den1 = 1; den2 = 0;} if((den2 == 0) && (millis() - pe11 >= 150)){pe12 = millis(); digitalWrite(led_4,LOW); den2 = 1; den1 = 0; } //sạc 1000ms nghỉ 100ms(or 1000ms/500ms), giảm nhiệt độ(or 1000ms/500ms) if((sac_1 == 0) && (millis() - pe12_sac >= 100)){pe11_sac = millis(); digitalWrite(chan_sac_8,HIGH); sac_1 = 1; sac_2 = 0;} if((sac_2 == 0) && (millis() - pe11_sac >= 1000)){pe12_sac = millis(); digitalWrite(chan_sac_8,LOW); sac_2 = 1; sac_1 = 0; } //2 button + - GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); //nhấn lỳ 2 nút + - để khởi động chế độ báo động if (GT_button_cong_12 != GT_button_cong_12_000) { GT_button_cong_12_000 = GT_button_cong_12; pe_nhanli_12 = millis(); } if (GT_button_tru_11 != GT_button_tru_11_000) { GT_button_tru_11_000 = GT_button_tru_11; pe_nhanli_11 = millis(); } //thoát khỏi vòng while khi ấn 2 nút + - , sau đó vào ngay chế độ báo động //if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000)){khoa_bao_dong = 1; tat = 0;} //ấn button để vừa dùng vừa sạc GT_button = digitalRead(button_10); if(GT_button == 1){charging = 1; nghi_sac_15p = nghi_sac_15p + 600000; delay(1500); tat = 0; break;} } } void tien_sacpin_nghi (unsigned long giay) { unsigned long peham_sac = millis(); while((millis() - peham_sac <= giay) && (dovolt_out >= 650) && (tat == 1)){ //đo volt ngoài dovolt_out = analogRead(volt_cam_sac_A2); //nháy đèn if((den1 == 0) && (millis() - pe12 >= 100)){pe11 = millis(); digitalWrite(led_4,HIGH); den1 = 1; den2 = 0; } if((den2 == 0) && (millis() - pe11 >= 3000)){pe12 = millis(); digitalWrite(led_4,LOW); den2 = 1; den1 = 0; } //2 button + - GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); //nhấn lỳ 2 nút + - để khởi động chế độ báo động if (GT_button_cong_12 != GT_button_cong_12_000) { GT_button_cong_12_000 = GT_button_cong_12; pe_nhanli_12 = millis(); } if (GT_button_tru_11 != GT_button_tru_11_000) { GT_button_tru_11_000 = GT_button_tru_11; pe_nhanli_11 = millis(); } //thoát khỏi vòng while khi ấn 2 nút + - , sau đó vào ngay chế độ báo động //if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000)){khoa_bao_dong = 1; tat = 0;} //ấn button để vừa dùng vừa sạc GT_button = digitalRead(button_10); if(GT_button == 1){charging = 1; nghi_sac_15p = nghi_sac_15p + 600000; delay(1500); tat = 0; break;} } } void setup() { pinMode(mosfet_9,OUTPUT); digitalWrite(mosfet_9,HIGH); Serial.begin(9600); // giao tiếp Serial với baudrate 9600 pinMode(trig,OUTPUT); // chân trig sẽ phát tín hiệu pinMode(coi_chip_5,OUTPUT); pinMode(ngon_tay_cai_6,OUTPUT); //pinMode(ngon_tay_ut_3,OUTPUT); pinMode(chan_sac_8,OUTPUT); pinMode(led_4,OUTPUT); pinMode(echo,INPUT); // chân echo sẽ nhận tín hiệu pinMode(button_10,INPUT); pinMode(button_tru_11,INPUT); pinMode(button_cong_12,INPUT); pinMode(volt_cam_sac_A2,INPUT); pinMode(do_volt_pin_A3,INPUT); delay(6000); che_do_rung = EEPROM.read(6); delay(100); if((che_do_rung != 1) && (che_do_rung != 0)){delay(1000); EEPROM.write(6, 0); delay(1000); che_do_rung = EEPROM.read(6);} //quan trọng, chỉ dùng 1 lần trong đời chíp - Only run once EP_1lan1 = EEPROM.read(31); EP_1lan2 = EEPROM.read(32); EP_1lan3 = EEPROM.read(33); EP_1lan4 = EEPROM.read(34); EP_1lan5 = EEPROM.read(35); delay(100); if((EP_1lan1 != 111) or (EP_1lan2 != 112) or (EP_1lan3 != 113) or (EP_1lan4 != 114) or (EP_1lan5 != 115)){ //quan trọng, chỉ dùng 1 lần trong đời chíp - Only run once delay(50); EEPROM.write(12, 0); delay(50); EEPROM.write(12, 150); delay(50); EEPROM.write(18, 0); delay(50); EEPROM.write(18, 155); delay(50); EEPROM.write(31, 0); delay(20); EEPROM.write(32, 0); delay(20); EEPROM.write(33, 0); delay(20); EEPROM.write(34, 0); delay(20); EEPROM.write(35, 0); delay(50); EEPROM.write(31, 111); delay(20); EEPROM.write(32, 112); delay(20); EEPROM.write(33, 113); delay(20); EEPROM.write(34, 114); delay(20); EEPROM.write(35, 115); delay(50); } do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound EP_1lan1_khoangcach = EEPROM.read(54); EP_1lan2_khoangcach = EEPROM.read(55); EP_1lan3_khoangcach = EEPROM.read(56); delay(20); if((EP_1lan1_khoangcach != 111) or (EP_1lan2_khoangcach != 112) or (EP_1lan3_khoangcach != 113)) { delay(20); EEPROM.write(39, 0); delay(20); EEPROM.write(54, 0); delay(20); EEPROM.write(55, 0); delay(20); EEPROM.write(56, 0); delay(20); EEPROM.write(54, 111); delay(20); EEPROM.write(55, 112); delay(20); EEPROM.write(56, 113); delay(20); } dk_kc = EEPROM.read(39); delay(20); n_khoang_cach = n_khoang_cach + (dk_kc * 50); } void loop() { //Measure battery voltage every minute, If the battery voltage is less than 3.6v then power off //đo điện áp pin mỗi phút, nếu áp nhỏ hơn 3.47v(tức 3.6v) thì tắt thiết bị, để bảo vệ pin và đảm bảo cho thiết bị hoạt động chính xác if((charging == 1) && (millis() - pe_volt_battery >= 58000) && (volt_pin <= 4)){digitalWrite(chan_sac_8,HIGH);} if(millis() - pe_volt_battery >= 60000){ pe_volt_battery = millis(); digitalWrite(led_4,LOW); digitalWrite(chan_sac_8,LOW); analogWrite(ngon_tay_cai_6,0); //analogWrite(ngon_tay_ut_3,0); delay(30); analogWrite(coi_chip_5,0); delay(200); dovolt_pin = analogRead(do_volt_pin_A3); volt_pin = dovolt_pin / 1023.0 * 5.0; Serial.println(volt_pin); if(volt_pin <= 3.45){digitalWrite(mosfet_9,LOW); delay(30000);} if((charging == 1) && (charging_1lan == 0) && (volt_pin <= 4)){charging_1lan = 1; digitalWrite(chan_sac_8,HIGH);} } if((charging == 1) && (charging_1lan == 1) && (millis() - pe_volt_battery >= 62000) && (volt_pin <= 4)){charging_1lan = 0; digitalWrite(chan_sac_8,LOW);} //đo analog_volt ngoài - Check whether the charger is charging or not dovolt_out = analogRead(volt_cam_sac_A2); //Serial.println(dovolt_out); //Serial.println(volt_pin); //vừa sạc vừa dùng - Use the device at the same time as charging the battery //if((charging == 1) && (dovolt_out < 650) && (volt_pin <= 4.05) && (millis() - sac_duy_tri >= 60000)){digitalWrite(chan_sac_8,HIGH); sac_duy_tri = millis();} //if((charging == 1) && (dovolt_out < 650) && (volt_pin <= 4.05) && (millis() - sac_duy_tri >= 62000)){digitalWrite(chan_sac_8,LOW); sac_duy_tri = millis();} if((dovolt_out >= 650) && (charging == 1) && (volt_pin <= 4.05) && (millis() - nghi_sac_15p >= 900000)){digitalWrite(chan_sac_8,HIGH); } if((volt_pin > 4.05) && (charging == 1)){nghi_sac_15p = millis(); } //chế độ sạc pin - Battery charging mode if((dovolt_out >= 650) && (charging == 0)){tat = 1; //biến giúp khi rút sạc thì tắt - "tat = 1: Turn off the power when not charging" digitalWrite(coi_chip_5,LOW); analogWrite(ngon_tay_cai_6,0); //analogWrite(ngon_tay_ut_3,0); while(tat == 1){ digitalWrite(led_4,LOW); digitalWrite(chan_sac_8,LOW); delay_0(1000); //đo volt ngoài - Check whether the charger is charging or not dovolt_out = analogRead(volt_cam_sac_A2); Serial.println(dovolt_out); if(dovolt_out < 650){digitalWrite(mosfet_9,LOW);delay(5000);} else{digitalWrite(mosfet_9,HIGH);} //đo volt pin - Measure the battery voltage dovolt_pin = analogRead(do_volt_pin_A3); volt_pin = dovolt_pin / 1023.0 * 5.0; Serial.println("pin_1"); Serial.println(volt_pin); Serial.println("pin_2"); if(volt_pin <= 4.07){ digitalWrite(chan_sac_8,HIGH); delay_0(2000); tien_sacpin(58000); } //trừ đi áp hao hụt 0.13v do mosfet else{tien_sacpin_nghi(300000);} } } if((den1 == 0) && (millis() - pe12 >= 500)){ digitalWrite(led_4,HIGH); den1 = 1; den2 = 0; pe11 = millis(); } if((den2 == 0) && (millis() - pe11 >= 500)){ digitalWrite(led_4,LOW); den2 = 1; den1 = 0; pe12 = millis(); } //chế độ không sạc pin - No battery charging mode if((dovolt_out < 650) or (charging == 1)){ GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); //nhấn lỳ 2 nút + - để khởi động chế độ cấu hình khoảng cách if (GT_button_cong_12 != GT_button_cong_12_000) { GT_button_cong_12_000 = GT_button_cong_12; pe_nhanli_12 = millis(); } if (GT_button_tru_11 != GT_button_tru_11_000) { GT_button_tru_11_000 = GT_button_tru_11; pe_nhanli_11 = millis(); } //vào chế độ cấu hình khoảng cách - distance configuration mode cau_hinh_kc = 0; if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000)) { analogWrite(ngon_tay_cai_6,0); //analogWrite(ngon_tay_ut_3,0); digitalWrite(led_4,HIGH); for(int i = 0; i < 3; i++){digitalWrite(coi_chip_5,HIGH);delay(1000); digitalWrite(coi_chip_5,LOW);delay(1000);} delay(2000); while(cau_hinh_kc == 0){ GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); GT_button = digitalRead(button_10); if(GT_button == 1){cau_hinh_kc = 1; delay(1000);} //nhấn nốt " + " để tăng cấu hình khoảng cách if((GT_button_cong_12 == 1) && (khong_lap_12 == 0)){ dk_kc = EEPROM.read(39); khong_lap_12 = 1; sau_tha_nut_12 = 1; if(dk_kc == 0){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 1); delay(5); n_khoang_cach = 250; for(int i = 0; i < 1; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 1){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 2); delay(5); n_khoang_cach = 300; for(int i = 0; i < 2; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 2){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 3); delay(5); n_khoang_cach = 350; for(int i = 0; i < 3; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 3){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 4); delay(5); n_khoang_cach = 400; for(int i = 0; i < 4; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 4){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 5); delay(5); n_khoang_cach = 450; for(int i = 0; i < 5; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 5){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 6); delay(5); n_khoang_cach = 500; for(int i = 0; i < 6; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} } if((GT_button_cong_12 == 0) && (sau_tha_nut_12 == 1)){khong_lap_12 = 0; sau_tha_nut_12 = 0;} //nhấn nốt " - " để giảm cấu hình khoảng cách if((GT_button_tru_11 == 1) && (khong_lap_11 == 0)){ dk_kc = EEPROM.read(39); khong_lap_11 = 1; sau_tha_nut_11 = 1; if(dk_kc == 6){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 5); delay(5); n_khoang_cach = 450; for(int i = 0; i < 5; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 5){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 4); delay(5); n_khoang_cach = 400; for(int i = 0; i < 4; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 4){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 3); delay(5); n_khoang_cach = 350; for(int i = 0; i < 3; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 3){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 2); delay(5); n_khoang_cach = 300; for(int i = 0; i < 2; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 2){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 1); delay(5); n_khoang_cach = 250; for(int i = 0; i < 1; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 1){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 0); delay(5); n_khoang_cach = 200;} } if((GT_button_tru_11 == 0) && (sau_tha_nut_11 == 1)){khong_lap_11 = 0; sau_tha_nut_11 = 0;} } } //nhấn nốt " + " để tăng rung hoặc tăng âm thanh - Press " + " to increase motor power or sound strength if((GT_button_cong_12 == 1) && (khong_lap_12 == 0)){ do_rung = EEPROM.read(12); do_am = EEPROM.read(18); khong_lap_12 = 1; sau_tha_nut_12 = 1; if((do_rung <= 240) && (che_do_rung == 0)){delay(5); EEPROM.write(12, 0); delay(10); EEPROM.write(12, do_rung + 10);} if((do_am <= 245) && (che_do_rung == 1)){delay(5); EEPROM.write(18, 0); delay(10); EEPROM.write(18, do_am + 10);} delay(5); do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound //Serial.println(do_am); } if((GT_button_cong_12 == 0) && (sau_tha_nut_12 == 1)){khong_lap_12 = 0; sau_tha_nut_12 = 0;} //nhấn nốt " - " để giảm rung hoặc giảm âm thanh - Press " - " to decrease motor power or sound strength if((GT_button_tru_11 == 1) && (khong_lap_11 == 0)){ do_rung = EEPROM.read(12); do_am = EEPROM.read(18); khong_lap_11 = 1; sau_tha_nut_11 = 1; if((do_rung >= 70) && (che_do_rung == 0)){delay(5); EEPROM.write(12, 0); delay(10); EEPROM.write(12, do_rung - 10);} if((do_am >= 15) && (che_do_rung == 1)){delay(5); EEPROM.write(18, 0); delay(10); EEPROM.write(18, do_am - 10);} delay(5); do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound } if((GT_button_tru_11 == 0) && (sau_tha_nut_11 == 1)){khong_lap_11 = 0; sau_tha_nut_11 = 0;} //nhấn lỳ 3s để tắt nguồn - Hold down for 3 seconds to turn off GT_button = digitalRead(button_10); if (GT_button != GT_button_000) { GT_button_000 = GT_button; pe_nhanli = millis(); } if ((GT_button == 1) && (millis() - pe_nhanli > 3000)){analogWrite(coi_chip_5,do_am); digitalWrite(led_4,HIGH); analogWrite(ngon_tay_cai_6,do_rung); delay(500); analogWrite(coi_chip_5,0); delay(2500); digitalWrite(mosfet_9,LOW); delay(5000); resetFunc(); delay(60000);} //nhấn nhanh để chuyển đỗi gữa loa và rung, Đọc trạng thái button để bật loa hoặc bật rung - Quick click to switch speakers and vibrate GT_button = digitalRead(button_10); if((GT_button == 1) && (khong_lap == 0)){ khong_lap = 1; sau_tha_nut = 1; } if((GT_button == 0) && (sau_tha_nut == 1)){sau_tha_nut = 0; khong_lap = 0; che_do_rung = EEPROM.read(6);delay(10); if(che_do_rung == 1){delay(50); EEPROM.write(6, 0); delay(50);} else{delay(50); EEPROM.write(6, 1); delay(50); } che_do_rung = EEPROM.read(6); } /* Phát xung từ chân trig */ delay(50); //delay tránh nhiễu sóng siêu âm digitalWrite(trig,0); // tắt chân trig delayMicroseconds(2); digitalWrite(trig,1); // phát xung từ chân trig delayMicroseconds(5); // xung có độ dài 5 microSeconds digitalWrite(trig,0); // tắt chân trig /* Tính toán thời gian */ // - Calculate time thoi_gian = pulseIn(echo,HIGH); // Tính khoảng cách đến vật. - Calculate the distance to the object khoang_cach = int(thoi_gian/2/29.412); //Serial.print(khoang_cach); //Serial.println("cm"); //if(khoang_cach <= 130) {rung_cai = 1; rung_ut = 0; pe_rung = millis();} //if((khoang_cach > 130) && (khoang_cach <= n_khoang_cach)){rung_cai = 0; rung_ut = 1; pe_rung = millis();} // else{if(millis() - pe_rung >= 1000){rung_cai = 0; rung_ut = 0;}} //chế độ rung ngón tay - finger vibration mode if(che_do_rung == 0){ if(millis() - pe_loa1 >= 50){analogWrite(coi_chip_5,0);} if(khoang_cach <= n_khoang_cach){ time_x = (4 * khoang_cach); if((rung_cai_1 == 0) && (millis() - pe_rung_cai_2 >= time_x)){pe_rung_cai_1 = millis();analogWrite(ngon_tay_cai_6,do_rung); rung_cai_1 = 1; rung_cai_2 = 0; } if((rung_cai_2 == 0) && (millis() - pe_rung_cai_1 >= 100)) {pe_rung_cai_2 = millis();analogWrite(ngon_tay_cai_6,0); rung_cai_2 = 1; rung_cai_1 = 0; } } else{analogWrite(ngon_tay_cai_6,0); } // rung nhẹ ngón tay cái - Motor vibration on the thumb //if(rung_cai == 1){if((rung_cai_1 == 0) && (millis() - pe_rung_cai_2 >= 100)){pe_rung_cai_1 = millis();analogWrite(ngon_tay_cai_6,do_rung); rung_cai_1 = 1; rung_cai_2 = 0;} //rung có nhịp // if((rung_cai_2 == 0) && (millis() - pe_rung_cai_1 >= 300)){pe_rung_cai_2 = millis();analogWrite(ngon_tay_cai_6,0); rung_cai_2 = 1; rung_cai_1 = 0; } // } // else{analogWrite(ngon_tay_cai_6,0); } // rung nhẹ ngón tay út - Vibration motor on the little finger //if(rung_ut == 1){if((rung_ut_1 == 0) && (millis() - pe_rung_ut_2 >= 100)){pe_rung_ut_1 = millis();analogWrite(ngon_tay_ut_3,do_rung); rung_ut_1 = 1; rung_ut_2 = 0; } //rung có nhịp - Vibration motor feel comfortable // if((rung_ut_2 == 0) && (millis() - pe_rung_ut_1 >= 300)){pe_rung_ut_2 = millis();analogWrite(ngon_tay_ut_3,0); rung_ut_2 = 1; rung_ut_1 = 0; } // } // else{analogWrite(ngon_tay_ut_3,0); } } //chế độ phát loa, nháy loa nhanh dần khi khoảng cách giảm dần - Sound mode else{ analogWrite(ngon_tay_cai_6,0); //analogWrite(ngon_tay_ut_3,0); if(khoang_cach <= n_khoang_cach){ time_x = (2 * khoang_cach) + (khoang_cach / 2); if((loa1 == 0) && (millis() - pe_loa2 >= time_x)){pe_loa1 = millis();analogWrite(coi_chip_5,do_am); loa1 = 1; loa2 = 0; } if((loa2 == 0) && (millis() - pe_loa1 >= 50)) {pe_loa2 = millis();analogWrite(coi_chip_5,0); loa2 = 1; loa1 = 0; } } else{if(millis() - pe_loa1 >= 30){analogWrite(coi_chip_5,0);}} //nháy loa nhanh khi khoảng cách đến vật khoảng 1m //if(rung_cai == 1){ if((loa1 == 0) && (millis() - pe_loa2 >= 60)){pe_loa1 = millis();digitalWrite(coi_chip_10,HIGH); loa1 = 1; loa2 = 0;} // if((loa2 == 0) && (millis() - pe_loa1 >= 60)){pe_loa2 = millis();digitalWrite(coi_chip_10,LOW); loa2 = 1; loa1 = 0; }} //nháy loa chậm khi khoảng cách đến vật từ 1m đến 2.8m //if(rung_ut == 1) { if((loa1 == 0) && (millis() - pe_loa2 >= 500)){pe_loa1 = millis();digitalWrite(coi_chip_10,HIGH); loa1 = 1; loa2 = 0;} // if((loa2 == 0) && (millis() - pe_loa1 >= 80)){pe_loa2 = millis();digitalWrite(coi_chip_10,LOW); loa2 = 1; loa1 = 0; }} // //if((rung_cai == 0) && (rung_ut == 0)){if(millis() - pe_loa1 >= 60){digitalWrite(coi_chip_10,LOW);}} } } }
-
Video on how "Bracelet for the blind" works
10/16/2017 at 08:04 • 0 commentsDistance configuration mode: (about 3:50)
Press and hold the "+ -" button for about 3 seconds to start in the distance configuration mode. Press "+" to increase the obstacle recognition distance, or press "-" to decrease the obstacle recognition distance. The minimum distance to identify obstacles is 2 meters and a maximum of 5 meters. A beep is 0.5 meters (example: when you are in distance configuration mode, press "+" or press "-" to hear two beeps, meaning that the maximum obstacle detection distance is: 2 + 0.5 + 0.5 = 3 meters. Press "+" or "-" to hear a beep, meaning the maximum obstacle detection distance is: 2 + 0.5 = 2.5 meters...)
-
Complete modified version
10/15/2017 at 16:55 • 0 commentsAfter 2 working days, I created 3 complete devices. Here are the photos I took during the work. I will create a video on how to use this product after about a day.
Tools that help me work.
I take advantage of a plumbing section.
Usage 1
Usage 2
Usage 3
Usage 4
-
Circuit diagram upgrade_1.2
10/15/2017 at 15:59 • 0 commentsIn this diagram there is a difference, the device uses only a vibrating motor.
-
Code upgrade_1.2
10/15/2017 at 14:55 • 0 comments//bracelet_for_the_blind_Upgrade_1.2 //tác giả(Author): Đỗ Xuân Tiến - Gmail: doxuantiendx07@gmail.com #include <EEPROM.h> const int trig = A1; //chân trig của HC-SR04 const int echo = A0; //chân echo của HC-SR04 byte ngon_tay_cai_6 = 6; //ngón tay - finger //byte middle_finger = 5; //ngón tay giữa //byte ngon_tay_ut_3 = 3; //ngón tay út - little finger byte mosfet_9 = 9; //mosfet byte coi_chip_5 = 5; //buzzer byte led_4 = 4; //led byte chan_sac_8 = 8; //chân bật tắt dòng sạc - D8 to on/off charger byte button_10 = 10; //button nguồn: chức năng bat/tat/rung/loa - button: on/off/vibrator/buzzer byte button_cong_12 = 12; //button " + " byte button_tru_11 = 11; //button " - " byte do_volt_pin_A3 = A3; //đo volt pin - A3 to measure the battery voltage byte volt_cam_sac_A2 = A2; //nhận biết khi cắm điện sạc - A2 to identify the battery charger byte rung_cai = 0; byte rung_ut = 0; byte rung_cai_1 = 0; byte rung_cai_2 = 0; byte rung_ut_1 = 0; byte rung_ut_2 = 0; byte che_do_rung = 0; byte khong_lap = 0; byte sau_tha_nut = 0; byte khong_lap_12 = 0; byte sau_tha_nut_12 = 0; byte khong_lap_11 = 0; byte sau_tha_nut_11 = 0; //byte khoa_bao_dong = 0; byte loa1 = 0; byte loa2 = 0; byte den1 = 0; byte den2 = 0; byte sac_1 = 0; byte sac_2 = 0; byte tat = 0; //biến giúp khi rút sạc thì tắt - Turn off the power when not charging byte EP_1lan1 = 0; byte EP_1lan2 = 0; byte EP_1lan3 = 0; byte EP_1lan4 = 0; byte EP_1lan5 = 0; byte hieu_so_bd = 0; byte EP_1lan1_khoangcach = 0; byte EP_1lan2_khoangcach = 0; byte EP_1lan3_khoangcach = 0; byte dk_kc = 0; byte cau_hinh_kc = 0; int dovolt_out = 0; int dovolt_pin = 0; float volt_pin = 0; unsigned long pe_rung = 0; unsigned long pe_rung_cai_1 = 0; unsigned long pe_rung_cai_2 = 0; unsigned long pe_rung_ut_1 = 0; unsigned long pe_rung_ut_2 = 0; unsigned long pe_loa1 = 0; unsigned long pe_loa2 = 0; unsigned long pe_nhanli = 0; unsigned long pe_nhanli_12 = 0; unsigned long pe_nhanli_11 = 0; unsigned long pe11 = 0; unsigned long pe12 = 0; unsigned long pe11_sac = 0; unsigned long pe12_sac = 0; unsigned long pe_volt_battery = 0; unsigned long thoi_gian = 0; // biến đo thời gian - Time variable unsigned long khoang_cach = 0; // biến lưu khoảng cách - Distance variable unsigned long khoang_cach_bao_dong = 0; unsigned long tong_khoang_cach = 0; unsigned long so_lan_do = 0; unsigned long hieu_so = 0; unsigned long pe_hieu_so = 0; int GT_button = 0; int GT_button_000 = 0; int GT_button_cong_12_000 = 0; int GT_button_tru_11_000 = 0; int time_x = 0; int GT_button_cong_12 = 0; //+ int GT_button_tru_11 = 0; //- int do_rung = 0; //độ rung mạnh int do_am = 0; //độ to của âm int n_khoang_cach = 200; void tien_sacpin (unsigned long giay) { unsigned long peham_sac = millis(); while((millis() - peham_sac <= giay) && (dovolt_out >= 650)){ //đo volt ngoài dovolt_out = analogRead(volt_cam_sac_A2); //Serial.println(dovolt_out); //nháy đèn if((den1 == 0) && (millis() - pe12 >= 150)){pe11 = millis(); digitalWrite(led_4,HIGH); den1 = 1; den2 = 0;} if((den2 == 0) && (millis() - pe11 >= 150)){pe12 = millis(); digitalWrite(led_4,LOW); den2 = 1; den1 = 0; } //sạc 1000ms nghỉ 100ms(or 1000ms/500ms), giảm nhiệt độ(or 1000ms/500ms) if((sac_1 == 0) && (millis() - pe12_sac >= 100)){pe11_sac = millis(); digitalWrite(chan_sac_8,HIGH); sac_1 = 1; sac_2 = 0;} if((sac_2 == 0) && (millis() - pe11_sac >= 1000)){pe12_sac = millis(); digitalWrite(chan_sac_8,LOW); sac_2 = 1; sac_1 = 0; } //2 button + - GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); //nhấn lỳ 2 nút + - để khởi động chế độ báo động if (GT_button_cong_12 != GT_button_cong_12_000) { GT_button_cong_12_000 = GT_button_cong_12; pe_nhanli_12 = millis(); } if (GT_button_tru_11 != GT_button_tru_11_000) { GT_button_tru_11_000 = GT_button_tru_11; pe_nhanli_11 = millis(); } //thoát khỏi vòng while khi ấn 2 nút + - , sau đó vào ngay chế độ báo động //if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000)){khoa_bao_dong = 1; tat = 0;} } } void tien_sacpin_nghi (unsigned long giay) { unsigned long peham_sac = millis(); while((millis() - peham_sac <= giay) && (dovolt_out >= 650)){ //đo volt ngoài dovolt_out = analogRead(volt_cam_sac_A2); //nháy đèn if((den1 == 0) && (millis() - pe12 >= 100)){pe11 = millis(); digitalWrite(led_4,HIGH); den1 = 1; den2 = 0; } if((den2 == 0) && (millis() - pe11 >= 3000)){pe12 = millis(); digitalWrite(led_4,LOW); den2 = 1; den1 = 0; } //2 button + - GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); //nhấn lỳ 2 nút + - để khởi động chế độ báo động if (GT_button_cong_12 != GT_button_cong_12_000) { GT_button_cong_12_000 = GT_button_cong_12; pe_nhanli_12 = millis(); } if (GT_button_tru_11 != GT_button_tru_11_000) { GT_button_tru_11_000 = GT_button_tru_11; pe_nhanli_11 = millis(); } //thoát khỏi vòng while khi ấn 2 nút + - , sau đó vào ngay chế độ báo động //if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000)){khoa_bao_dong = 1; tat = 0;} } } void setup() { pinMode(mosfet_9,OUTPUT); digitalWrite(mosfet_9,HIGH); Serial.begin(9600); // giao tiếp Serial với baudrate 9600 pinMode(trig,OUTPUT); // chân trig sẽ phát tín hiệu pinMode(coi_chip_5,OUTPUT); pinMode(ngon_tay_cai_6,OUTPUT); //pinMode(ngon_tay_ut_3,OUTPUT); pinMode(chan_sac_8,OUTPUT); pinMode(led_4,OUTPUT); pinMode(echo,INPUT); // chân echo sẽ nhận tín hiệu pinMode(button_10,INPUT); pinMode(button_tru_11,INPUT); pinMode(button_cong_12,INPUT); pinMode(volt_cam_sac_A2,INPUT); pinMode(do_volt_pin_A3,INPUT); delay(6000); che_do_rung = EEPROM.read(6); delay(100); if((che_do_rung != 1) && (che_do_rung != 0)){delay(1000); EEPROM.write(6, 0); delay(1000); che_do_rung = EEPROM.read(6);} //quan trọng, chỉ dùng 1 lần trong đời chíp - Only run once EP_1lan1 = EEPROM.read(31); EP_1lan2 = EEPROM.read(32); EP_1lan3 = EEPROM.read(33); EP_1lan4 = EEPROM.read(34); EP_1lan5 = EEPROM.read(35); delay(100); if((EP_1lan1 != 111) or (EP_1lan2 != 112) or (EP_1lan3 != 113) or (EP_1lan4 != 114) or (EP_1lan5 != 115)){ //quan trọng, chỉ dùng 1 lần trong đời chíp - Only run once delay(50); EEPROM.write(12, 0); delay(50); EEPROM.write(12, 150); delay(50); EEPROM.write(18, 0); delay(50); EEPROM.write(18, 155); delay(50); EEPROM.write(31, 0); delay(20); EEPROM.write(32, 0); delay(20); EEPROM.write(33, 0); delay(20); EEPROM.write(34, 0); delay(20); EEPROM.write(35, 0); delay(50); EEPROM.write(31, 111); delay(20); EEPROM.write(32, 112); delay(20); EEPROM.write(33, 113); delay(20); EEPROM.write(34, 114); delay(20); EEPROM.write(35, 115); delay(50); } do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound EP_1lan1_khoangcach = EEPROM.read(54); EP_1lan2_khoangcach = EEPROM.read(55); EP_1lan3_khoangcach = EEPROM.read(56); delay(20); if((EP_1lan1_khoangcach != 111) or (EP_1lan2_khoangcach != 112) or (EP_1lan3_khoangcach != 113)) { delay(20); EEPROM.write(39, 0); delay(20); EEPROM.write(54, 0); delay(20); EEPROM.write(55, 0); delay(20); EEPROM.write(56, 0); delay(20); EEPROM.write(54, 111); delay(20); EEPROM.write(55, 112); delay(20); EEPROM.write(56, 113); delay(20); } dk_kc = EEPROM.read(39); delay(20); n_khoang_cach = n_khoang_cach + (dk_kc * 50); } void loop() { //Measure battery voltage every minute, If the battery voltage is less than 3.6v then power off //đo điện áp pin mỗi phút, nếu áp nhỏ hơn 3.47v(tức 3.6v) thì tắt thiết bị, để bảo vệ pin và đảm bảo cho thiết bị hoạt động chính xác if(millis() - pe_volt_battery >= 60000){ pe_volt_battery = millis(); digitalWrite(led_4,LOW); analogWrite(ngon_tay_cai_6,0); //analogWrite(ngon_tay_ut_3,0); delay(30); analogWrite(coi_chip_5,0); delay(200); dovolt_pin = analogRead(do_volt_pin_A3); volt_pin = dovolt_pin / 1023.0 * 5.0; Serial.println(volt_pin); if(volt_pin <= 3.45){digitalWrite(mosfet_9,LOW); delay(30000);} } //đo analog_volt ngoài - Check whether the charger is charging or not dovolt_out = analogRead(volt_cam_sac_A2); //Serial.println(dovolt_out); //Serial.println(volt_pin); //chế độ sạc pin - Battery charging mode if(dovolt_out >= 650){tat = 1; //biến giúp khi rút sạc thì tắt - "tat = 1: Turn off the power when not charging" digitalWrite(coi_chip_5,LOW); analogWrite(ngon_tay_cai_6,0); //analogWrite(ngon_tay_ut_3,0); while(tat == 1){ digitalWrite(led_4,LOW); digitalWrite(chan_sac_8,LOW); delay(1000); //đo volt ngoài - Check whether the charger is charging or not dovolt_out = analogRead(volt_cam_sac_A2); Serial.println(dovolt_out); if(dovolt_out < 650){digitalWrite(mosfet_9,LOW);delay(5000);} else{digitalWrite(mosfet_9,HIGH);} //đo volt pin - Measure the battery voltage dovolt_pin = analogRead(do_volt_pin_A3); volt_pin = dovolt_pin / 1023.0 * 5.0; Serial.println("pin_1"); Serial.println(volt_pin); Serial.println("pin_2"); if(volt_pin <= 4.07){ digitalWrite(chan_sac_8,HIGH); delay(2000); tien_sacpin(58000); } //trừ đi áp hao hụt 0.13v do mosfet else{tien_sacpin_nghi(300000);} } } if((den1 == 0) && (millis() - pe12 >= 500)){ digitalWrite(led_4,HIGH); den1 = 1; den2 = 0; pe11 = millis(); } if((den2 == 0) && (millis() - pe11 >= 500)){ digitalWrite(led_4,LOW); den2 = 1; den1 = 0; pe12 = millis(); } //chế độ không sạc pin - No battery charging mode if(dovolt_out < 650){ GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); //nhấn lỳ 2 nút + - để khởi động chế độ cấu hình khoảng cách if (GT_button_cong_12 != GT_button_cong_12_000) { GT_button_cong_12_000 = GT_button_cong_12; pe_nhanli_12 = millis(); } if (GT_button_tru_11 != GT_button_tru_11_000) { GT_button_tru_11_000 = GT_button_tru_11; pe_nhanli_11 = millis(); } //vào chế độ cấu hình khoảng cách cau_hinh_kc = 0; if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000)) { analogWrite(ngon_tay_cai_6,0); //analogWrite(ngon_tay_ut_3,0); digitalWrite(led_4,HIGH); for(int i = 0; i < 3; i++){digitalWrite(coi_chip_5,HIGH);delay(1000); digitalWrite(coi_chip_5,LOW);delay(1000);} delay(2000); while(cau_hinh_kc == 0){ GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); GT_button = digitalRead(button_10); if(GT_button == 1){cau_hinh_kc = 1; delay(1000);} //nhấn nốt " + " để tăng cấu hình khoảng cách if((GT_button_cong_12 == 1) && (khong_lap_12 == 0)){ dk_kc = EEPROM.read(39); khong_lap_12 = 1; sau_tha_nut_12 = 1; if(dk_kc == 0){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 1); delay(5); n_khoang_cach = 250; for(int i = 0; i < 1; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 1){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 2); delay(5); n_khoang_cach = 300; for(int i = 0; i < 2; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 2){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 3); delay(5); n_khoang_cach = 350; for(int i = 0; i < 3; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 3){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 4); delay(5); n_khoang_cach = 400; for(int i = 0; i < 4; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 4){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 5); delay(5); n_khoang_cach = 450; for(int i = 0; i < 5; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 5){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 6); delay(5); n_khoang_cach = 500; for(int i = 0; i < 6; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} } if((GT_button_cong_12 == 0) && (sau_tha_nut_12 == 1)){khong_lap_12 = 0; sau_tha_nut_12 = 0;} //nhấn nốt " - " để giảm cấu hình khoảng cách if((GT_button_tru_11 == 1) && (khong_lap_11 == 0)){ dk_kc = EEPROM.read(39); khong_lap_11 = 1; sau_tha_nut_11 = 1; if(dk_kc == 6){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 5); delay(5); n_khoang_cach = 450; for(int i = 0; i < 5; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 5){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 4); delay(5); n_khoang_cach = 400; for(int i = 0; i < 4; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 4){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 3); delay(5); n_khoang_cach = 350; for(int i = 0; i < 3; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 3){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 2); delay(5); n_khoang_cach = 300; for(int i = 0; i < 2; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 2){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 1); delay(5); n_khoang_cach = 250; for(int i = 0; i < 1; i++){digitalWrite(coi_chip_5,HIGH);delay(600); digitalWrite(coi_chip_5,LOW);delay(1000);}} if(dk_kc == 1){delay(5); EEPROM.write(39, 0); delay(10); EEPROM.write(39, 0); delay(5); n_khoang_cach = 200;} } if((GT_button_tru_11 == 0) && (sau_tha_nut_11 == 1)){khong_lap_11 = 0; sau_tha_nut_11 = 0;} } } //nhấn nốt " + " để tăng rung hoặc tăng âm thanh - Press " + " to increase motor power or sound strength if((GT_button_cong_12 == 1) && (khong_lap_12 == 0)){ do_rung = EEPROM.read(12); do_am = EEPROM.read(18); khong_lap_12 = 1; sau_tha_nut_12 = 1; if((do_rung <= 240) && (che_do_rung == 0)){delay(5); EEPROM.write(12, 0); delay(10); EEPROM.write(12, do_rung + 10);} if((do_am <= 245) && (che_do_rung == 1)){delay(5); EEPROM.write(18, 0); delay(10); EEPROM.write(18, do_am + 10);} delay(5); do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound //Serial.println(do_am); } if((GT_button_cong_12 == 0) && (sau_tha_nut_12 == 1)){khong_lap_12 = 0; sau_tha_nut_12 = 0;} //nhấn nốt " - " để giảm rung hoặc giảm âm thanh - Press " - " to decrease motor power or sound strength if((GT_button_tru_11 == 1) && (khong_lap_11 == 0)){ do_rung = EEPROM.read(12); do_am = EEPROM.read(18); khong_lap_11 = 1; sau_tha_nut_11 = 1; if((do_rung >= 70) && (che_do_rung == 0)){delay(5); EEPROM.write(12, 0); delay(10); EEPROM.write(12, do_rung - 10);} if((do_am >= 15) && (che_do_rung == 1)){delay(5); EEPROM.write(18, 0); delay(10); EEPROM.write(18, do_am - 10);} delay(5); do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound } if((GT_button_tru_11 == 0) && (sau_tha_nut_11 == 1)){khong_lap_11 = 0; sau_tha_nut_11 = 0;} //nhấn lỳ 3s để tắt nguồn - Hold down for 3 seconds to turn off GT_button = digitalRead(button_10); if (GT_button != GT_button_000) { GT_button_000 = GT_button; pe_nhanli = millis(); } if ((GT_button == 1) && (millis() - pe_nhanli > 3000)){analogWrite(coi_chip_5,do_am); digitalWrite(led_4,HIGH); analogWrite(ngon_tay_cai_6,do_rung); delay(500); analogWrite(coi_chip_5,0); delay(2500); digitalWrite(mosfet_9,LOW); delay(60000);} //nhấn nhanh để chuyển đỗi gữa loa và rung, Đọc trạng thái button để bật loa hoặc bật rung - Quick click to switch speakers and vibrate GT_button = digitalRead(button_10); if((GT_button == 1) && (khong_lap == 0)){ khong_lap = 1; sau_tha_nut = 1; } if((GT_button == 0) && (sau_tha_nut == 1)){sau_tha_nut = 0; khong_lap = 0; che_do_rung = EEPROM.read(6);delay(10); if(che_do_rung == 1){delay(50); EEPROM.write(6, 0); delay(50);} else{delay(50); EEPROM.write(6, 1); delay(50); } che_do_rung = EEPROM.read(6); } /* Phát xung từ chân trig */ delay(50); //delay tránh nhiễu sóng siêu âm digitalWrite(trig,0); // tắt chân trig delayMicroseconds(2); digitalWrite(trig,1); // phát xung từ chân trig delayMicroseconds(5); // xung có độ dài 5 microSeconds digitalWrite(trig,0); // tắt chân trig /* Tính toán thời gian */ // - Calculate time thoi_gian = pulseIn(echo,HIGH); // Tính khoảng cách đến vật. - Calculate the distance to the object khoang_cach = int(thoi_gian/2/29.412); //Serial.print(khoang_cach); //Serial.println("cm"); //if(khoang_cach <= 130) {rung_cai = 1; rung_ut = 0; pe_rung = millis();} //if((khoang_cach > 130) && (khoang_cach <= n_khoang_cach)){rung_cai = 0; rung_ut = 1; pe_rung = millis();} // else{if(millis() - pe_rung >= 1000){rung_cai = 0; rung_ut = 0;}} //chế độ rung ngón tay - finger vibration mode if(che_do_rung == 0){ if(millis() - pe_loa1 >= 50){analogWrite(coi_chip_5,0);} if(khoang_cach <= n_khoang_cach){ time_x = (4 * khoang_cach); if((rung_cai_1 == 0) && (millis() - pe_rung_cai_2 >= time_x)){pe_rung_cai_1 = millis();analogWrite(ngon_tay_cai_6,do_rung); rung_cai_1 = 1; rung_cai_2 = 0; } if((rung_cai_2 == 0) && (millis() - pe_rung_cai_1 >= 100)) {pe_rung_cai_2 = millis();analogWrite(ngon_tay_cai_6,0); rung_cai_2 = 1; rung_cai_1 = 0; } } else{analogWrite(ngon_tay_cai_6,0); } // rung nhẹ ngón tay cái - Motor vibration on the thumb //if(rung_cai == 1){if((rung_cai_1 == 0) && (millis() - pe_rung_cai_2 >= 100)){pe_rung_cai_1 = millis();analogWrite(ngon_tay_cai_6,do_rung); rung_cai_1 = 1; rung_cai_2 = 0;} //rung có nhịp // if((rung_cai_2 == 0) && (millis() - pe_rung_cai_1 >= 300)){pe_rung_cai_2 = millis();analogWrite(ngon_tay_cai_6,0); rung_cai_2 = 1; rung_cai_1 = 0; } // } // else{analogWrite(ngon_tay_cai_6,0); } // rung nhẹ ngón tay út - Vibration motor on the little finger //if(rung_ut == 1){if((rung_ut_1 == 0) && (millis() - pe_rung_ut_2 >= 100)){pe_rung_ut_1 = millis();analogWrite(ngon_tay_ut_3,do_rung); rung_ut_1 = 1; rung_ut_2 = 0; } //rung có nhịp - Vibration motor feel comfortable // if((rung_ut_2 == 0) && (millis() - pe_rung_ut_1 >= 300)){pe_rung_ut_2 = millis();analogWrite(ngon_tay_ut_3,0); rung_ut_2 = 1; rung_ut_1 = 0; } // } // else{analogWrite(ngon_tay_ut_3,0); } } //chế độ phát loa, nháy loa nhanh dần khi khoảng cách giảm dần - Sound mode else{ analogWrite(ngon_tay_cai_6,0); //analogWrite(ngon_tay_ut_3,0); if(khoang_cach <= n_khoang_cach){ time_x = (2 * khoang_cach) + (khoang_cach / 2); if((loa1 == 0) && (millis() - pe_loa2 >= time_x)){pe_loa1 = millis();analogWrite(coi_chip_5,do_am); loa1 = 1; loa2 = 0; } if((loa2 == 0) && (millis() - pe_loa1 >= 50)) {pe_loa2 = millis();analogWrite(coi_chip_5,0); loa2 = 1; loa1 = 0; } } else{if(millis() - pe_loa1 >= 30){analogWrite(coi_chip_5,0);}} //nháy loa nhanh khi khoảng cách đến vật khoảng 1m //if(rung_cai == 1){ if((loa1 == 0) && (millis() - pe_loa2 >= 60)){pe_loa1 = millis();digitalWrite(coi_chip_10,HIGH); loa1 = 1; loa2 = 0;} // if((loa2 == 0) && (millis() - pe_loa1 >= 60)){pe_loa2 = millis();digitalWrite(coi_chip_10,LOW); loa2 = 1; loa1 = 0; }} //nháy loa chậm khi khoảng cách đến vật từ 1m đến 2.8m //if(rung_ut == 1) { if((loa1 == 0) && (millis() - pe_loa2 >= 500)){pe_loa1 = millis();digitalWrite(coi_chip_10,HIGH); loa1 = 1; loa2 = 0;} // if((loa2 == 0) && (millis() - pe_loa1 >= 80)){pe_loa2 = millis();digitalWrite(coi_chip_10,LOW); loa2 = 1; loa1 = 0; }} // //if((rung_cai == 0) && (rung_ut == 0)){if(millis() - pe_loa1 >= 60){digitalWrite(coi_chip_10,LOW);}} } } }
-
Modification for "Bracelet for the blind"
10/14/2017 at 17:46 • 0 commentsAfter acquiring the opinions of some visually impaired people and experts, I decided to modify the product. Products will have the following features:
- There are 4 ways to use "Bracelet for the blind"
- The product can be combined with a stick. (The combination of "Bracelet for the blind" with the stick will be the most effective solution.)
- The obstacle detection distance can be configured between 2 meters and 5 meters (distance is configured by push button).
- Will only use a vibrating motor on any finger. The vibration of the motor will gradually increase as you approach the obstacle.
- Can be combined with an external power source to increase the use time of equipment to many days.Mr. Binh is blind, he is blind both eyes due to an accident while working. He often walks with a stick in his hand, to meet and talk to people. The stories always make him smile, he is a optimist love life. and he is a very friendly neighbor.
-
Make the bracelet and the box contains the device (Upgrade version).
09/06/2017 at 10:38 • 0 commentsI have cut some parts, to create some products.
Parts needed for a bracelet. With "Velcro tape", the bracelet will be more flexible.
The plastic part of the front of the device.
The plastic part associated with the bracelet (use plastic glue).
Size of parts.
Complete electronic component box.
I drill small holes on the bracelet, and use sewing needle to sew "velcro tape" with "bracelet".
Do the same on the other side of the bracelet.
Inside the box.
And this is " Bracelet for the blind " (Upgrade version).
-
Code upgrade_1.1
09/03/2017 at 08:47 • 0 comments//bracelet_for_the_blind_Upgrade_1.1 //tác giả(Author): Đỗ Xuân Tiến - Gmail: doxuantiendx07@gmail.com #include <EEPROM.h> const int trig = A1; //chân trig của HC-SR04 const int echo = A0; //chân echo của HC-SR04 byte ngon_tay_cai_6 = 6; //ngón tay cái - thumb //byte middle_finger = 5; //ngón tay giữa byte ngon_tay_ut_3 = 3; //ngón tay út - little finger byte mosfet_9 = 9; //mosfet byte coi_chip_5 = 5; //buzzer byte led_4 = 4; //led byte chan_sac_8 = 8; //chân bật tắt dòng sạc - D8 to on/off charger byte button_10 = 10; //button nguồn: chức năng bat/tat/rung/loa - button: on/off/vibrator/buzzer byte button_cong_12 = 12; //button " + " byte button_tru_11 = 11; //button " - " byte do_volt_pin_A3 = A3; //đo volt pin - A3 to measure the battery voltage byte volt_cam_sac_A2 = A2; //nhận biết khi cắm điện sạc - A2 to identify the battery charger byte rung_cai = 0; byte rung_ut = 0; byte rung_cai_1 = 0; byte rung_cai_2 = 0; byte rung_ut_1 = 0; byte rung_ut_2 = 0; byte che_do_rung = 0; byte khong_lap = 0; byte sau_tha_nut = 0; byte khong_lap_12 = 0; byte sau_tha_nut_12 = 0; byte khong_lap_11 = 0; byte sau_tha_nut_11 = 0; byte khoa_bao_dong = 0; byte loa1 = 0; byte loa2 = 0; byte den1 = 0; byte den2 = 0; byte sac_1 = 0; byte sac_2 = 0; byte tat = 0; //biến giúp khi rút sạc thì tắt - Turn off the power when not charging byte EP_1lan1 = 0; byte EP_1lan2 = 0; byte EP_1lan3 = 0; byte EP_1lan4 = 0; byte EP_1lan5 = 0; byte hieu_so_bd = 0; int dovolt_out = 0; int dovolt_pin = 0; float volt_pin = 0; unsigned long pe_rung = 0; unsigned long pe_rung_cai_1 = 0; unsigned long pe_rung_cai_2 = 0; unsigned long pe_rung_ut_1 = 0; unsigned long pe_rung_ut_2 = 0; unsigned long pe_loa1 = 0; unsigned long pe_loa2 = 0; unsigned long pe_nhanli = 0; unsigned long pe_nhanli_12 = 0; unsigned long pe_nhanli_11 = 0; unsigned long pe11 = 0; unsigned long pe12 = 0; unsigned long pe11_sac = 0; unsigned long pe12_sac = 0; unsigned long pe_volt_battery = 0; unsigned long thoi_gian = 0; // biến đo thời gian - Time variable unsigned long khoang_cach = 0; // biến lưu khoảng cách - Distance variable unsigned long khoang_cach_bao_dong = 0; unsigned long tong_khoang_cach = 0; unsigned long so_lan_do = 0; unsigned long hieu_so = 0; unsigned long pe_hieu_so = 0; int GT_button = 0; int GT_button_000 = 0; int GT_button_cong_12_000 = 0; int GT_button_tru_11_000 = 0; int time_x = 0; int GT_button_cong_12 = 0; //+ int GT_button_tru_11 = 0; //- int do_rung = 0; //độ rung mạnh int do_am = 0; //độ to của âm void tien_sacpin (unsigned long giay) { unsigned long peham_sac = millis(); while((millis() - peham_sac <= giay) && (dovolt_out >= 650) && (khoa_bao_dong == 0)){ //đo volt ngoài dovolt_out = analogRead(volt_cam_sac_A2); //Serial.println(dovolt_out); //nháy đèn if((den1 == 0) && (millis() - pe12 >= 150)){pe11 = millis(); digitalWrite(led_4,HIGH); den1 = 1; den2 = 0;} if((den2 == 0) && (millis() - pe11 >= 150)){pe12 = millis(); digitalWrite(led_4,LOW); den2 = 1; den1 = 0; } //sạc 1000ms nghỉ 100ms(or 1000ms/500ms), giảm nhiệt độ(or 1000ms/500ms) if((sac_1 == 0) && (millis() - pe12_sac >= 100)){pe11_sac = millis(); digitalWrite(chan_sac_8,HIGH); sac_1 = 1; sac_2 = 0;} if((sac_2 == 0) && (millis() - pe11_sac >= 1000)){pe12_sac = millis(); digitalWrite(chan_sac_8,LOW); sac_2 = 1; sac_1 = 0; } //2 button + - GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); //nhấn lỳ 2 nút + - để khởi động chế độ báo động if (GT_button_cong_12 != GT_button_cong_12_000) { GT_button_cong_12_000 = GT_button_cong_12; pe_nhanli_12 = millis(); } if (GT_button_tru_11 != GT_button_tru_11_000) { GT_button_tru_11_000 = GT_button_tru_11; pe_nhanli_11 = millis(); } //thoát khỏi vòng while khi ấn 2 nút + - , sau đó vào ngay chế độ báo động if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000)){khoa_bao_dong = 1; tat = 0;} } } void tien_sacpin_nghi (unsigned long giay) { unsigned long peham_sac = millis(); while((millis() - peham_sac <= giay) && (dovolt_out >= 650) && (khoa_bao_dong == 0)){ //đo volt ngoài dovolt_out = analogRead(volt_cam_sac_A2); //nháy đèn if((den1 == 0) && (millis() - pe12 >= 100)){pe11 = millis(); digitalWrite(led_4,HIGH); den1 = 1; den2 = 0; } if((den2 == 0) && (millis() - pe11 >= 3000)){pe12 = millis(); digitalWrite(led_4,LOW); den2 = 1; den1 = 0; } //2 button + - GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); //nhấn lỳ 2 nút + - để khởi động chế độ báo động if (GT_button_cong_12 != GT_button_cong_12_000) { GT_button_cong_12_000 = GT_button_cong_12; pe_nhanli_12 = millis(); } if (GT_button_tru_11 != GT_button_tru_11_000) { GT_button_tru_11_000 = GT_button_tru_11; pe_nhanli_11 = millis(); } //thoát khỏi vòng while khi ấn 2 nút + - , sau đó vào ngay chế độ báo động if ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000)){khoa_bao_dong = 1; tat = 0;} } } void setup() { pinMode(mosfet_9,OUTPUT); digitalWrite(mosfet_9,HIGH); Serial.begin(9600); // giao tiếp Serial với baudrate 9600 pinMode(trig,OUTPUT); // chân trig sẽ phát tín hiệu pinMode(coi_chip_5,OUTPUT); pinMode(ngon_tay_cai_6,OUTPUT); pinMode(ngon_tay_ut_3,OUTPUT); pinMode(chan_sac_8,OUTPUT); pinMode(led_4,OUTPUT); pinMode(echo,INPUT); // chân echo sẽ nhận tín hiệu pinMode(button_10,INPUT); pinMode(button_tru_11,INPUT); pinMode(button_cong_12,INPUT); pinMode(volt_cam_sac_A2,INPUT); pinMode(do_volt_pin_A3,INPUT); delay(6000); che_do_rung = EEPROM.read(6); delay(100); if((che_do_rung != 1) && (che_do_rung != 0)){delay(1000); EEPROM.write(6, 0); delay(1000); che_do_rung = EEPROM.read(6);} //quan trọng, chỉ dùng 1 lần trong đời chíp - Only run once EP_1lan1 = EEPROM.read(31); EP_1lan2 = EEPROM.read(32); EP_1lan3 = EEPROM.read(33); EP_1lan4 = EEPROM.read(34); EP_1lan5 = EEPROM.read(35); delay(100); if((EP_1lan1 != 111) or (EP_1lan2 != 112) or (EP_1lan3 != 113) or (EP_1lan4 != 114) or (EP_1lan5 != 115)){ //quan trọng, chỉ dùng 1 lần trong đời chíp - Only run once delay(50); EEPROM.write(12, 0); delay(50); EEPROM.write(12, 150); delay(50); EEPROM.write(18, 0); delay(50); EEPROM.write(18, 155); delay(50); EEPROM.write(31, 0); delay(20); EEPROM.write(32, 0); delay(20); EEPROM.write(33, 0); delay(20); EEPROM.write(34, 0); delay(20); EEPROM.write(35, 0); delay(50); EEPROM.write(31, 111); delay(20); EEPROM.write(32, 112); delay(20); EEPROM.write(33, 113); delay(20); EEPROM.write(34, 114); delay(20); EEPROM.write(35, 115); delay(50); } do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound } void loop() { //Measure battery voltage every minute, If the battery voltage is less than 3.6v then power off //đo điện áp pin mỗi phút, nếu áp nhỏ hơn 3.47v(tức 3.6v) thì tắt thiết bị, để bảo vệ pin và đảm bảo cho thiết bị hoạt động chính xác if(millis() - pe_volt_battery >= 60000){ pe_volt_battery = millis(); digitalWrite(led_4,LOW); analogWrite(ngon_tay_cai_6,0); analogWrite(ngon_tay_ut_3,0); delay(30); analogWrite(coi_chip_5,0); delay(200); dovolt_pin = analogRead(do_volt_pin_A3); volt_pin = dovolt_pin / 1023.0 * 5.0; Serial.println(volt_pin); if(volt_pin <= 3.45){digitalWrite(mosfet_9,LOW); delay(30000);} } //đo analog_volt ngoài - Check whether the charger is charging or not dovolt_out = analogRead(volt_cam_sac_A2); //Serial.println(dovolt_out); //Serial.println(volt_pin); //chế độ sạc pin - Battery charging mode if(dovolt_out >= 650){tat = 1; //biến giúp khi rút sạc thì tắt - "tat = 1: Turn off the power when not charging" digitalWrite(coi_chip_5,LOW); analogWrite(ngon_tay_cai_6,0); analogWrite(ngon_tay_ut_3,0); while(tat == 1){ digitalWrite(led_4,LOW); digitalWrite(chan_sac_8,LOW); delay(1000); //đo volt ngoài - Check whether the charger is charging or not dovolt_out = analogRead(volt_cam_sac_A2); Serial.println(dovolt_out); if(dovolt_out < 650){digitalWrite(mosfet_9,LOW);delay(5000);} else{digitalWrite(mosfet_9,HIGH);} //đo volt pin - Measure the battery voltage dovolt_pin = analogRead(do_volt_pin_A3); volt_pin = dovolt_pin / 1023.0 * 5.0; Serial.println("pin_1"); Serial.println(volt_pin); Serial.println("pin_2"); if(volt_pin <= 4.07){ digitalWrite(chan_sac_8,HIGH); delay(2000); tien_sacpin(58000); } //trừ đi áp hao hụt 0.13v do mosfet else{tien_sacpin_nghi(300000);} } } if((den1 == 0) && (millis() - pe12 >= 500)){ digitalWrite(led_4,HIGH); den1 = 1; den2 = 0; pe11 = millis(); } if((den2 == 0) && (millis() - pe11 >= 500)){ digitalWrite(led_4,LOW); den2 = 1; den1 = 0; pe12 = millis(); } //chế độ không sạc pin - No battery charging mode if((dovolt_out < 650) or (khoa_bao_dong == 1)){ GT_button_cong_12 = digitalRead(button_cong_12); GT_button_tru_11 = digitalRead(button_tru_11); //nhấn lỳ 2 nút + - để khởi động chế độ báo động - alarm mode, while hold down two buttons " + - " if (GT_button_cong_12 != GT_button_cong_12_000) { GT_button_cong_12_000 = GT_button_cong_12; pe_nhanli_12 = millis(); } if (GT_button_tru_11 != GT_button_tru_11_000) { GT_button_tru_11_000 = GT_button_tru_11; pe_nhanli_11 = millis(); } //chế độ báo động có sạc pin và đo pin, có khóa(biến) bật báo động khi ở chế độ sạc if ((khoa_bao_dong == 1) or ((GT_button_cong_12 == 1) && (GT_button_tru_11 == 1) && (millis() - pe_nhanli_12 > 3000) && (millis() - pe_nhanli_11 > 3000))) { analogWrite(ngon_tay_cai_6,0); analogWrite(ngon_tay_ut_3,0); digitalWrite(led_4,HIGH); for(int i = 0; i < 3; i++){digitalWrite(coi_chip_5,HIGH);delay(1500); digitalWrite(coi_chip_5,LOW);delay(1000);} delay(30000); unsigned long so_giay = millis(); while(millis() - so_giay <= 10000){ //đo khoảng cách trong 10s /* Phát xung từ chân trig */ delay(50); //delay tránh nhiễu sóng siêu âm digitalWrite(trig,0); // tắt chân trig delayMicroseconds(2); digitalWrite(trig,1); // phát xung từ chân trig delayMicroseconds(5); // xung có độ dài 5 microSeconds digitalWrite(trig,0); // tắt chân trig /* Tính toán thời gian */ // - Calculate time thoi_gian = pulseIn(echo,HIGH); // Tính khoảng cách đến vật. - Calculate the distance to the object khoang_cach = thoi_gian/2/29.412; tong_khoang_cach = tong_khoang_cach + khoang_cach; so_lan_do = so_lan_do + 1; } khoang_cach = tong_khoang_cach / so_lan_do; while(tat == 0){ dovolt_out = analogRead(volt_cam_sac_A2); if(millis() - pe_volt_battery >= 60000){ pe_volt_battery = millis(); digitalWrite(led_4,LOW); digitalWrite(chan_sac_8,LOW); delay(200); dovolt_pin = analogRead(do_volt_pin_A3); volt_pin = dovolt_pin / 1023.0 * 5.0; Serial.println(volt_pin); if((volt_pin <= 3.45) && (dovolt_out < 650)){digitalWrite(mosfet_9,LOW); delay(30000);} } if((dovolt_out >= 650) && (volt_pin <= 4.07)){digitalWrite(chan_sac_8,HIGH);} else{digitalWrite(chan_sac_8,LOW);} //nháy đèn if((den1 == 0) && (millis() - pe12 >= 1500)){ digitalWrite(led_4,HIGH); den1 = 1; den2 = 0; pe11 = millis(); } if((den2 == 0) && (millis() - pe11 >= 1500)){ digitalWrite(led_4,LOW); den2 = 1; den1 = 0; pe12 = millis(); } /* Phát xung từ chân trig */ delay(50); //delay tránh nhiễu sóng siêu âm digitalWrite(trig,0); // tắt chân trig delayMicroseconds(2); digitalWrite(trig,1); // phát xung từ chân trig delayMicroseconds(5); // xung có độ dài 5 microSeconds digitalWrite(trig,0); // tắt chân trig /* Tính toán thời gian */ // - Calculate time thoi_gian = pulseIn(echo,HIGH); // Tính khoảng cách báo động, nếu chênh lệch 50cm thì báo động - Calculate the distance to the object, 50cm difference is alarm khoang_cach_bao_dong = thoi_gian/2/29.412; if(khoang_cach_bao_dong >= khoang_cach){hieu_so = khoang_cach_bao_dong - khoang_cach; } if(khoang_cach_bao_dong < khoang_cach) {hieu_so = khoang_cach - khoang_cach_bao_dong; } //Serial.println(hieu_so); //báo động nếu hiệu khoảng cách >= 50cm, 5 lần trong 5s(xử lý nhiễu) - 50cm difference is alarm if(hieu_so >= 50){ hieu_so_bd = hieu_so_bd + 1; pe_hieu_so = millis(); } if( millis() - pe_hieu_so >= 5000){ hieu_so_bd = 0; } if(hieu_so_bd >= 5){ unsigned long so_giay_baodong = millis(); while(millis() - so_giay_baodong <= 60000){ if((loa1 == 0) && (millis() - pe_loa2 >= 150)){pe_loa1 = millis();digitalWrite(coi_chip_5,HIGH); digitalWrite(led_4,HIGH); loa1 = 1; loa2 = 0; } if((loa2 == 0) && (millis() - pe_loa1 >= 150)){pe_loa2 = millis();digitalWrite(coi_chip_5,LOW); digitalWrite(led_4,LOW); loa2 = 1; loa1 = 0; } } digitalWrite(mosfet_9,LOW); delay(30000); //tắt - off } } } //nhấn nốt " + " để tăng rung hoặc tăng âm thanh - Press " + " to increase motor power or sound strength if((GT_button_cong_12 == 1) && (khong_lap_12 == 0)){ do_rung = EEPROM.read(12); do_am = EEPROM.read(18); khong_lap_12 = 1; sau_tha_nut_12 = 1; if((do_rung <= 240) && (che_do_rung == 0)){delay(5); EEPROM.write(12, 0); delay(10); EEPROM.write(12, do_rung + 10);} if((do_am <= 245) && (che_do_rung == 1)){delay(5); EEPROM.write(18, 0); delay(10); EEPROM.write(18, do_am + 10);} delay(5); do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound //Serial.println(do_am); } if((GT_button_cong_12 == 0) && (sau_tha_nut_12 == 1)){khong_lap_12 = 0; sau_tha_nut_12 = 0;} //nhấn nốt " - " để giảm rung hoặc giảm âm thanh - Press " - " to decrease motor power or sound strength if((GT_button_tru_11 == 1) && (khong_lap_11 == 0)){ do_rung = EEPROM.read(12); do_am = EEPROM.read(18); khong_lap_11 = 1; sau_tha_nut_11 = 1; if((do_rung >= 70) && (che_do_rung == 0)){delay(5); EEPROM.write(12, 0); delay(10); EEPROM.write(12, do_rung - 10);} if((do_am >= 15) && (che_do_rung == 1)){delay(5); EEPROM.write(18, 0); delay(10); EEPROM.write(18, do_am - 10);} delay(5); do_rung = EEPROM.read(12); //độ rung mạnh của mô tơ - the strength of the motor do_am = EEPROM.read(18); //độ to của âm thanh - the strength of the sound } if((GT_button_tru_11 == 0) && (sau_tha_nut_11 == 1)){khong_lap_11 = 0; sau_tha_nut_11 = 0;} //nhấn lỳ 3s để tắt nguồn - Hold down for 3 seconds to turn off GT_button = digitalRead(button_10); if (GT_button != GT_button_000) { GT_button_000 = GT_button; pe_nhanli = millis(); } if ((GT_button == 1) && (millis() - pe_nhanli > 3000)){analogWrite(coi_chip_5,do_am); digitalWrite(led_4,HIGH); analogWrite(ngon_tay_cai_6,do_rung); analogWrite(ngon_tay_ut_3,do_rung); delay(500); analogWrite(coi_chip_5,0); delay(5000); digitalWrite(mosfet_9,LOW); delay(30000);} //nhấn nhanh để chuyển đỗi gữa loa và rung, Đọc trạng thái button để bật loa hoặc bật rung - Quick click to switch speakers and vibrate GT_button = digitalRead(button_10); if((GT_button == 1) && (khong_lap == 0)){ khong_lap = 1; sau_tha_nut = 1; } if((GT_button == 0) && (sau_tha_nut == 1)){sau_tha_nut = 0; khong_lap = 0; che_do_rung = EEPROM.read(6);delay(10); if(che_do_rung == 1){delay(50); EEPROM.write(6, 0); delay(50);} else{delay(50); EEPROM.write(6, 1); delay(50); } che_do_rung = EEPROM.read(6); } /* Phát xung từ chân trig */ delay(50); //delay tránh nhiễu sóng siêu âm digitalWrite(trig,0); // tắt chân trig delayMicroseconds(2); digitalWrite(trig,1); // phát xung từ chân trig delayMicroseconds(5); // xung có độ dài 5 microSeconds digitalWrite(trig,0); // tắt chân trig /* Tính toán thời gian */ // - Calculate time thoi_gian = pulseIn(echo,HIGH); // Tính khoảng cách đến vật. - Calculate the distance to the object khoang_cach = int(thoi_gian/2/29.412); //Serial.print(khoang_cach); //Serial.println("cm"); if(khoang_cach <= 130) {rung_cai = 1; rung_ut = 0; pe_rung = millis();} if((khoang_cach > 130) && (khoang_cach <= 280)){rung_cai = 0; rung_ut = 1; pe_rung = millis();} else{if(millis() - pe_rung >= 1000){rung_cai = 0; rung_ut = 0;}} //chế độ rung ngón tay - finger vibration mode if(che_do_rung == 0){ if(millis() - pe_loa1 >= 50){analogWrite(coi_chip_5,0);} // rung nhẹ ngón tay cái - Motor vibration on the thumb if(rung_cai == 1){if((rung_cai_1 == 0) && (millis() - pe_rung_cai_2 >= 100)){pe_rung_cai_1 = millis();analogWrite(ngon_tay_cai_6,do_rung); rung_cai_1 = 1; rung_cai_2 = 0;} //rung có nhịp if((rung_cai_2 == 0) && (millis() - pe_rung_cai_1 >= 300)){pe_rung_cai_2 = millis();analogWrite(ngon_tay_cai_6,0); rung_cai_2 = 1; rung_cai_1 = 0; } } else{analogWrite(ngon_tay_cai_6,0); } // rung nhẹ ngón tay út - Vibration motor on the little finger if(rung_ut == 1){if((rung_ut_1 == 0) && (millis() - pe_rung_ut_2 >= 100)){pe_rung_ut_1 = millis();analogWrite(ngon_tay_ut_3,do_rung); rung_ut_1 = 1; rung_ut_2 = 0; } //rung có nhịp - Vibration motor feel comfortable if((rung_ut_2 == 0) && (millis() - pe_rung_ut_1 >= 300)){pe_rung_ut_2 = millis();analogWrite(ngon_tay_ut_3,0); rung_ut_2 = 1; rung_ut_1 = 0; } } else{analogWrite(ngon_tay_ut_3,0); } } //chế độ phát loa, nháy loa nhanh dần khi khoảng cách giảm dần - Sound mode else{ analogWrite(ngon_tay_cai_6,0); analogWrite(ngon_tay_ut_3,0); if(khoang_cach <= 300){ time_x = (2 * khoang_cach) + (khoang_cach / 2); if((loa1 == 0) && (millis() - pe_loa2 >= time_x)){pe_loa1 = millis();analogWrite(coi_chip_5,do_am); loa1 = 1; loa2 = 0; } if((loa2 == 0) && (millis() - pe_loa1 >= 50)) {pe_loa2 = millis();analogWrite(coi_chip_5,0); loa2 = 1; loa1 = 0; } } else{if(millis() - pe_loa1 >= 30){analogWrite(coi_chip_5,0);}} //nháy loa nhanh khi khoảng cách đến vật khoảng 1m //if(rung_cai == 1){ if((loa1 == 0) && (millis() - pe_loa2 >= 60)){pe_loa1 = millis();digitalWrite(coi_chip_10,HIGH); loa1 = 1; loa2 = 0;} // if((loa2 == 0) && (millis() - pe_loa1 >= 60)){pe_loa2 = millis();digitalWrite(coi_chip_10,LOW); loa2 = 1; loa1 = 0; }} //nháy loa chậm khi khoảng cách đến vật từ 1m đến 2.8m //if(rung_ut == 1) { if((loa1 == 0) && (millis() - pe_loa2 >= 500)){pe_loa1 = millis();digitalWrite(coi_chip_10,HIGH); loa1 = 1; loa2 = 0;} // if((loa2 == 0) && (millis() - pe_loa1 >= 80)){pe_loa2 = millis();digitalWrite(coi_chip_10,LOW); loa2 = 1; loa1 = 0; }} // //if((rung_cai == 0) && (rung_ut == 0)){if(millis() - pe_loa1 >= 60){digitalWrite(coi_chip_10,LOW);}} } } }
-
Solder the electronic components in the box (Upgrade version)
09/01/2017 at 10:49 • 0 commentsSolder tin three main circuits on each other, the circuits are linked together by the GND.
Solder tin electronic components onto the circuit.
where to led.
Jack DC with Button On / Off.
Video: Observe from four directions. -
Circuit diagram upgrade_1.1
08/26/2017 at 18:02 • 0 commentsWith circuit diagram upgrade, it consumes less power than before.
* The mode of operation.
- Battery charging mode.
- Finger vibration mode.
- Sound mode.
- Alarm mode (Acts as an alarm device in the house. If there is a moving object it will emit sound. Alarm mode is started by pressing hold two " + - " nodes in 3 seconds).
+ The device automatically turns off the power when the voltage on the battery is less than 3.6 volts.
+ Two buttons " + , - " Used to set, increase or decrease the volume of Buzzer or vibrating motors. (Save settings to EEPROM).
+ Voltage boost module (3.7V --> 7V). Used to power the Arduino pro mini.