View previous topic :: View next topic |
Author |
Message |
matjazs
Joined: 08 Nov 2016 Posts: 86
|
Posted: Mon Jul 05, 2021 2:33 pm Post subject: GUI-O ECG electrocardiogram |
|
|
Here is an very simple ECG Electro Cardio Gram made with an Arduino UNO and an AD8232 sensor.
https://www.aliexpress.com/item/32989203202.html?spm=a2g0s.9042311.0.0.27424c4dQYUJ6C
It can be created with the BASCOM demo.
The Arduino UNO uses an analog (PinC.1) input that immediately sends value information after measurement via the serial port (Bluetooth modul HC06) to the GUI-O application (CH-Graph object) on the smartphone.
www.gui-o.com
https://play.google.com/store/apps/details?id=com.guio.guioapp
Result is on Youtube video - screenvideo from my phone.
https://www.youtube.com/watch?v=9sYq7rQF0fU
The schematic diagram, screenshot, ECG.jpg picture and ECG-Cardio.bas file is in the attachment.
Code: | '------------------------------------------------------------------------------
' ECG Electro Cardio Gram
' 2021-07-01 (c)gammda
' Ver-1
' CardioGraph
' Use Arduino UNO analog input A1 (pinc.1) and AD8232 modul
' .-----------------------.
' |ATMEGA328 |
' |Clock 11.059200MHz |
' |Baud:19200 |
' '-----------------------'
' 1.Install GUI-O application on smartphone
' www.gui-o.com or https://play.google.com/store/apps/details?id=com.guio.guioapp
' 2.Start GUI-O and make Bluetooth connection with arduino board
' 3.Press on start GUI-O button
'------------------------------------------------------------------------------
$regfile = "m328pbdef.dat"
$crystal = 11059200
'$baud = 9600 'default baudrate for Bluetooth HC06
$baud = 19200 'NOTE! For proper connection, it is necessary to set 19200 on the bluetooth module HC06.
'For first test you can use default baudrate 9600
Config Serialin = Buffered , Size = 120
Const Timer1reload = 43200
Config Timer1 = Timer , Prescale = 256
Load Timer1 , Timer1reload
On Ovf1 Timer1_isr
Enable Timer1
Start Timer1
Enable Interrupts
'-ADC--------------------------------------------------------------------------
Dim Channel As Byte 'A/D conversion
Channel = 1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Enable Interrupts
'------------------------------------------------------------------------------
$lib "GetToken.Lib"
$external Gettoken
Declare Function Gettoken (strinput As String , Byval Bseparator As Byte , Byval Bcount As Byte ) As String
Dim Sep As Byte
Dim Pozicija As Byte
'------------------------------------------------------------------------------
Dim Cardio As Integer
Dim Pulse As Byte
Dim Pulsex As Byte
Pulsex = 60
Dim Timx As Byte
Dim Timy As Byte
Dim Pul1 As Byte
Dim Soun_d As Bit
Soun_d = 0
Dim Flags As Bit
Flags = 0
Dim Data_key As Byte
Dim Znak As String * 15
Dim Rdata As String * 100
Dim Init As String * 4
Gosub Guio_ini 'start initalization procedure on GUI-O - write objects on screen of smart phone
'------------------------------------------------------------------------------
Main :
Do
If Ischarwaiting() = 1 Then
Gosub Read_data
End If
Cardio = Getadc(channel ) 'read walue of AD
If Cardio > 740 Then 'sound if amplitude je more than 740
If Soun_d = 1 Then
Print "@ton1 EDUR:500" 'sound appear on smart phone
End If
Pul1 = Pul1 + 1 'calculate pulse
If Timy = 4 Then
Pulse = Pul1 * 10
Pul1 = 0
Timy = 0
End If
End If
Print "@ch1 PLI:" ; Chr(34) ; "pl1" ; Chr(34) ; " YP:" ; Chr(34) ; Cardio ; Chr(34) ' write graph data (AD data) ECG to GUI-O
If Timx > 1 Then
Print "@ch0 PLI:" ; Chr(34) ; "pl0" ; Chr(34) ; " PLC:" ; Chr(34) ; "#000000" ; Chr(34) ; " YP:" ; Chr(34) ; Pulse ; Chr(34) ; " XP:" ; Chr(34) ; "0" ; Chr(34) 'Write graph pulse to GUI-O
Print "@lbpulse TXT:" ; Chr(34) ; Pulse ; Chr(34) 'write numeric value on GUI-O
Timx = 0
End If
Loop
End 'End of main cycle
'------------------------------------------------------------------------------
Read_data :
Reset Watchdog
Data_key = Inkey()
If Data_key = "@" Then Input Rdata Noecho
Sep = &H20
Pozicija = 1
Znak = Gettoken (rdata , Sep , Pozicija )
If Znak = "btsound" Then
Toggle Soun_d
If Soun_d = 1 Then
Print "@btsound BTH:0.25" 'If sound is ON button outline appear
Else
Print "@btsound BTH:0" 'If sound is OFF button outline disappear
End If
End If
Init = Mid(rdata , 1 , 4)
If Init = "init" Then 'reading "@init" from GUI-O
Gosub Guio_ini
End If
Rdata = ""
Return
'-Initialization procedure GUI-O Objects-------------------------------------------------------
Guio_ini :
Print "@sls 500" 'start writting objects
Print "@cls" 'clear screen
Print "@clh" 'clear HW components
'Print "@clo" 'clear orientation
Print "@guis BGC:#000000 ASR:0.449671" 'bacground color X-Y ratio
Print "|SORI UID:sori1 HID:sori ORI:2 SEN:0"
Waitms 250
Print "|IM UID:imx X:15 Y:50 W:100 H:100 ROT:0 SHE:0 VIS:1 OPA:1 SCM:2 IP:" ; Chr(34) ; "ECG.jpg" ; Chr(34) 'GUI-O Image ECG.jpg copy to smartphone \Phone\Android\data\com.guio.guioapp\files\Pictures\
Print "|TON UID:ton1 HID:ton EDUR:1000 TONT:24" 'GUI-O define ton
Print "|CH UID:ch0 X:65 Y:25 W:72 H:50 BTH:0.1 XTC:10 YTC:8 VIS:1 BSZ:5 DRA:0 BGC:#FFFFFF FGC:#900000 RAD:0 LT:0.15 XMA:5 YMA:8 SHVL:1 VLP:0 CHN:" ; Chr(34) ; "PULSE" ; Chr(34) ; " FFA:" ; Chr(34) ; "font6" ; Chr(34) ; " FSZ:4"
Print "|CH UID:ch1 X:65 Y:75 W:72 H:50 BTH:0.1 XTC:10 YTC:8 VIS:1 BSZ:200 DRA:0 CHT:2 BMA:0.03 XLO:0 XHI:40000 BGC:#FFFFFF FGC:#900000 RAD:0 LT:0.15 XMA:5 YMA:8 SHVL:1 VLP:0 CHN:" ; Chr(34) ; "ELECTRO CARDIOGRAM" ; Chr(34) ; " FFA:" ; Chr(34) ; "font6" ; Chr(34) ; " FSZ:4"
'GUI-O graph for pulse and Cardio
Print "|LB UID:lbpulse X:87 Y:35 ALP:1 ROT:0 SHE:1 FGC:#000000 FFA:" ; Chr(34) ; "font6" ; Chr(34) ; " FSZ:16 TXT:" ; Chr(34) ; "---" ; Chr(34) 'Label for number-pulse
Print "|LB UID:lbpname X:85 Y:23 ALP:1 ROT:0 SHE:1 FGC:#000000 FFA:" ; Chr(34) ; "font8" ; Chr(34) ; " FSZ:4 TXT:" ; Chr(34) ; "PULSE BMP" ; Chr(34) 'Label for name
Print "|LB UID:lbname X:2 Y:92 ALP:1 ROT:0 SHE:1 FGC:#FFFFFF FFA:" ; Chr(34) ; "font7" ; Chr(34) ; " FSZ:10 TXT:" ; Chr(34) ; "ECG" ; Chr(34) 'Label general name
Print "|BT UID:btsound X:22 Y:92 W:10 H:10 ROT:0 RAD:1 SHVR:0.8 SHE:1 SHC:#404040 BGC:#808B96 SBGC:#808B96 FGC:#FFFFFF FSZ:6 BTH:0 FFA:" ; Chr(34) ; "font6" ; Chr(34) ; " TXT:" ; Chr(34) ; "Sound" ; Chr(34) ; " SVAL:" ; Chr(34) ; "Stop" ; Chr(34)
'Button for sound ON/OFF
Print "@ch1 PLI:" ; Chr(34) ; "pl1" ; Chr(34) ; " PLC:" ; Chr(34) ; "#000000" ; Chr(34) ; " YP:" ; Chr(34) ; Cardio ; Chr(34) ; " XP:" ; Chr(34) ; "0" ; Chr(34)
'write data for cardio
Print "@hls 250" 'end writting objects
Return
'-Timer_ISR--------------------------------------------------------------------------------
Timer1_isr :
Timx = Timx + 1
Timy = Timy + 1
Return
'------------------------------------------------------------------------------------------ |
|
|
Back to top |
|
|
albertsm
Joined: 09 Apr 2004 Posts: 5922 Location: Holland
|
Posted: Wed Jul 07, 2021 9:05 am Post subject: |
|
|
Well done !
Looks great. Really nice and simple way to interface. Thanks for sharing and the video _________________ Mark |
|
Back to top |
|
|
JC
Joined: 15 Dec 2007 Posts: 586 Location: Cleveland, OH
|
Posted: Wed Jul 07, 2021 7:50 pm Post subject: |
|
|
Nice Job!
JC |
|
Back to top |
|
|
hardwaredoc
Joined: 21 Oct 2005 Posts: 2
|
Posted: Wed Oct 13, 2021 10:04 pm Post subject: Re: GUI-O ECG electrocardiogram |
|
|
Nice Projekt,
but where i can find the
GetToken.Lib
best regards
Peter |
|
Back to top |
|
|
matjazs
Joined: 08 Nov 2016 Posts: 86
|
|
Back to top |
|
|
hardwaredoc
Joined: 21 Oct 2005 Posts: 2
|
Posted: Thu Oct 14, 2021 8:06 am Post subject: |
|
|
Thanks
best regards |
|
Back to top |
|
|
s_sergiu
Joined: 25 Sep 2006 Posts: 81
|
Posted: Tue Dec 21, 2021 11:45 am Post subject: Communication issues |
|
|
Hello matjazs,
I did the project as well.
Programmed the HC-6 at 19200.
The problem I have is that 99% of the time, on two differnet android phones, I get messages like this one:
[/img]
GUI-O used is the latest version from Google Play Store.
Any suggestion on how to solve this ?
Thank you,
Sergiu |
|
Back to top |
|
|
matjazs
Joined: 08 Nov 2016 Posts: 86
|
Posted: Tue Dec 21, 2021 9:18 pm Post subject: |
|
|
Probably the problem is that the initialization didn't go well. This means you need to reset the microcontroller.
The initialization is also incorrect because you did not copy the "ECG.jpg" image file to your Android device.
There may be something wrong with your Bluetooth module. Sometimes it happens that the Bluetooth module cannot send so many bytes in a short time. It happens that some sign is lost. In this case you need to reduce the baud rate to f.e.9600 or add delay between lines (Waitms 10). But this speed (9600) is not recommended for this case (ECG Cardio).
I have the best experience with the HC06 Bluetooth module.
The new version of GUI-O (v0.11.21) offers that you can change double quotes "with others. I used single quotes '. The initialization procedure is now much more readable - you no longer need to write "Chr(34)".
Code: | Print "@gse COD:0 TSC:39" 'Use ' instead of " (chr(34) |
I also add a link the image in the initialization process, which means you no longer have to copy the image to your phone. This image will now be automatically copied from the Internet.
Code: | Print "|IM UID:imx X:15 Y:50 W:100 H:100 ROT:0 SHE:0 VIS:1 OPA:1 SCM:2 IP:'https://i.imgur.com/vKnL2LX.jpg'" |
Try this new "Cardio1.bas" file, but the old Cardio.bas should work fine too. |
|
Back to top |
|
|
s_sergiu
Joined: 25 Sep 2006 Posts: 81
|
Posted: Tue Dec 21, 2021 10:03 pm Post subject: |
|
|
Thank you for reply.
I will try tomorrow the new version and let you know
Sergiu |
|
Back to top |
|
|
s_sergiu
Joined: 25 Sep 2006 Posts: 81
|
Posted: Tue Dec 21, 2021 10:06 pm Post subject: |
|
|
Btw, the arduino uno clone I have is working with xtal of 16Mhz so I suppose I need to readjust the Timer1 reload value ?
Sergiu |
|
Back to top |
|
|
matjazs
Joined: 08 Nov 2016 Posts: 86
|
Posted: Tue Dec 21, 2021 10:23 pm Post subject: |
|
|
Timer is used for BMP calculation and is not a problem for this warnings, but crystal frequency is. You must change it to 16.000000 MHz.
Code: | $crystal = 16000000 |
I use hardware with $crystal = 11059200 |
|
Back to top |
|
|
|