Documente Academic
Documente Profesional
Documente Cultură
FACULTATEA TRANSPORTURI
PROIECT
MICROCONTROLERE
Îndrumător Student
Ș.l. Dr. Ing Angel Ciprian Cormoş Adrian COSTICĂ
București
2022
1
UNIVERSITATEA „POLITEHNICA” DIN BUCUREȘTI
FACULTATEA TRANSPORTURI
Cântar electronic –
măsurarea masei
Îndrumător Student
Ș.l. Dr. Ing Angel Ciprian Cormoş Adrian COSTICĂ
București
2022
2
Cuprins
CAPITOLUL 1. INTRODUCERE...........................................................................................
1.1 DESCRIEREA PROIECTULUI..........................................................................................4
1.2 DESCRIEREA COMERCIALĂ..........................................................................................5
1.3 SCURT ISTORIC............................................................................................................6
CAPITOLUL 2. PROIECTARE HARDWARE.....................................................................
2.1 DESCRIEREA SENZORULUI SEN-10245.......................................................................9
2.2 SCHEMA BLOC...........................................................................................................10
2.3 SCHEMA ELECTRICĂ..................................................................................................14
2.3.1 Componente folosite în schema electrică.............................................................14
2.4 CABLAJ IMPRIMAT.....................................................................................................15
CAPITOLUL 3. PROIECTAREA SOFTWARE..................................................................
3.1 ORGANIGRAMA CODULUI..........................................................................................17
3.2 CODUL SURSĂ............................................................................................................18
CAPITOLUL 4. CONCLUZII................................................................................................
CAPITOLUL 5. BIBLIOGRAFIE.........................................................................................
3
Capitolul 1. Introducere
1.1 Descrierea proiectului
Am ales această temă, întrucât au fost multe cazuri în care aș fi avut nevoie de un
cântar, însă nu am deținut sau dețin unul.
Prezentarea generală a proiectului prezintă un scurt istoric al cântarului cât și detalii
despre modul în care a evoluat acesta de-a lungul timpului, cât și o descriere comercială care
are rolul de evidenția caracteristicile unui cântar digital și funcțiile pe care acesta le
îndeplinește.
Pe de altă parte, odată aleasă tema proiectului, am găsit a fi interesant ce se află în
”spatele” cântarului, descoperind modul de funcționare: cântarul electronic este împărțit în
doua părți: senzorii pentru cântărire – în număr de patru - și partea de procesare a informației
transmise de senzori; la acestea se aduagă și un display LCD pentru citire. Sub fiecare picior
există cadre care reacționează la orice schimbare, care sunt poziționați în așa fel încât
picioarele utilizatorului vor exercita o forță asupra acestori senzori.
Senzorii ce sunt folosiți pentru măsurare sunt cunoscuți și ca ”celule de sarcină” (load
cells). Celula de sarcină transformă o formă de energie într-un semnal electric.
Produsul prezentat incorporează senzorul ales pentru măsurarea masei corporale.
Cântarul pe care am decis să îl proiectez va avea uz casnic, cu o capacitate maximă de
măsură de 180 kg, cu o precizie de 50gr. Caracteristicile principale pe care aș vrea să le
îndeplinească cântarul ar fi: disponibilitatea de schimbare a unității de măsură ( kg / lb) prin
apăsarea unui buton, funcție de oprire automată sau pornire automată în momentul în care pui
picioarele pe platformă.
În următoarele capitole voi discuta amănunțit atăt partea de software cât și partea de
hardware ce ține de proiect.
Schema electrică va conține 4 senzori în fiecare din colțurile cântarului, ce vor fi
conenctați la circuitul de bază ce va conține o punte redresoare pentru acuratețea în măsurarea
cât și sursa de alimentare reprezentată de cele 2 baterii de 1.5V tip ”AAA”.
În cadrul proiectării hardware se va afla schema bloc a proiectului în care se va
prezenta modul de functionare, incepând cu alimentarea până la afișajul pe display.
Proiectarea software constă în prelucrarea datelor transmise de cei patru senzori,
ulterior rezultatul urmând să fie afișat pe ecranul LCD. Puntea redresoare va avea rolul de a
4
interpreta informația transmisă de fiecare senzor, trimitând aceste informații către circuitul de
afișare.
Cântarul prezentat în Figura 1 este un cântar electronic de baie – pe care îl voi urma
ca exemplu, dorind să obțin un rezultat similar, cu un preț mai bun și o precizie mai exactă.
Cântarul este de uz casnic, având culoarea neagră, materialul folosit este sticla
securizată, diviziunea de cântărire fiind de 100 g. Acesta are capacitatea de a măsura 2 unități
de măsură: kilogramre si livra și o greutate maximă suportată de 180 kg; va folosi două baterii
de 1.5V de tip ”AAA”; greutatea propriu-zisă a cântarului este de aproximativ 1.5kg; are o
durata de viață de cel până la 100 de ani; poate măsura începând cu 5kg până la 180 de kg;
temperaturile de funcționare 0 °C – 40 °C, umiditatea sub 85%; buton pentru setarea unității
de măsură (kg / lb).
Cântarul va folosi 4 senzori de tip ”load cell” TAS606, cu o capacitate de măsurare a
masei de 45kg, ceea ce va face posibilă masa maximă posibilă de măsurat a cântarului să fie
de 180kg.
5
Figura 2. TAS606 [23]
6
sau romană. Ținând seama de construcția lor, balanțele romane se împart în: balanțe romane
obișnuite, balanțe romane cu dublu raport, bascule zecimale.
Aparatele de cântărit semiautomate cu cudran sunt utilizate în comerț, la poștă pentru
cântărirea scrisorilor, la cântărirea persoanelor, în industrie, pentru cântărirea unor sarcini
mari. Acestea au următoarele părți componente: sistemul de pârghii, dispozitivul de înclinare,
dispozitivul de indicare și amortizorul.
Aparatele de cântărit automate sunt aparate de cântărit combinat cu dispozitive
mecanice sau electrice, care efectuează în mod automat încărcarea, cântărirea și descărcarea
diferitelor produse ce se cântăresc. Aparatele posedă fie dispozitive de numărare, fie
dispozitive de integrare, pentru numărarea, respectiv însumarea cântăririlor. [27]
În urmă cu 7.000 de ani, egiptenii descopereau cea mai simplă formă a cântarului.
Aceea era balanța. Aceasta avea o formă extrem de simplă, brațul orizontal fiind susținut la
mijloc de un pivot și dispus pe laterale, la distanțe egale, cu două talere suspendate cu sfoară.
Inițial, această balanță era utilizată pentru a cântări și compara nu numai diverse produse
destinate trocului, cât și pentru a determina masa prafului de aur pe care îl primeau, uneori,
vânzătorii în schimbul bunurilor. Deși se număra printre primele modele, balanța egiptenilor
avea o acuratețe de aproximativ 99%. Egiptenii au fost cei care au introdus și conceptul
utilizării greutăților pentru a afla masa unui produs în urma echilibrării balanței. [22]
Acest tip de măsurătoare a masei corpurilor a fost îmbunătățit în mod semnificativ de
romani, de la care a rămas moștenire "cântarul roman", încă din perioada primului mileniu.
Noua balanță avea, pe una dintre jumătățile brațului, o singură contragreutate etalonată, care
putea fi deplasată de-a lungul pârghiei, până când aceasta stătea în echilibru. Romanii au fost
aceia care au confecționat balanța astfel încât porțiunea punct de sprijin să fie sprjinită pe un
pivot ascuțit la capătul de sprijin, pentru a oferi o balansare cât mai exactă în momentul
cântăririi.
7
Figura 3. Cântarul în antichitate [22]
8
Capitolul 2. Proiectare hardware
9
2.2 Schema bloc
10
convertor analog – digital de 10 biți, cu intrări multiple
un comparator analogic
un modul USART pentru comunicaţie serială (port serial)
32 de linii I/O organizate în patru porturi (PA, PB, PC, PD)
11
1LSB și reprezintă valoarea minimă cu care trebuie să varieze tensiunea de intrare Vin pentru
a determina modificarea cu o unitate a rezultatului conversiei.
12
Figura 9. Distribuire pini HX711[1]
13
2.3 Schema electrică
14
KEY1 – push Button pentru auto-calibrare;
KEY2 – push Button pentru circuitul de reset;
C3, C4 – condesatoare de 0.1 µF (folosite pentru a filtra curentul care intră în Max232
conform specificațiilor producătorului);
C1, C2, C5 – condesatoare de 22 pF;
XTAL1 – oscilator la o frecvență de 8MHz;
R1 – rezistență de 1kΩ;
R2 – rezistență de 10kΩ;
15
Figura 14. Schema PBC cu vedere din spate
17
3.2 Codul sursă
;cantar digital
;citire min = 0x800000 (complement de 2)
;citire max = 0x7FFFFF (complement de 2)
;y=mx+b (ecuatia pentru masurare)
;m=(y-b)/x
.include "m32def.inc"
.equ rs=PA2
.equ e=PD6
.equ ctrl=PORTD
.equ ctrl2=PORTA
.DEF slave_reg = R17
.DEF temp = R16
.def counter1 = r0
.def counter2 = r1
.def counter3 = r2
.def counter4 = r3
.def counter5 = r4
.def counter6 = r5
.def counter7 = r6
.def zero = r25
.macro micros
ldi temp,@0
.endm
.macro poz
ldi r16,@1
mov r6,r16
ldi r16,@0
rcall pozi
.endm
.DSEG
BUF4: .byte 1
BUF3: .byte 1
BUF2: .byte 1
BUF1: .byte 1
PAD1: .byte 1
PAD: .byte 1
longword: .byte 10
.cseg
jmp reset
jmp reset
jmp reset
jmp reset
jmp reset
jmp reset
jmp reset
jmp reset
jmp reset
jmp reset
jmp reset
18
jmp reset
jmp reset
jmp reset
jmp reset
jmp reset
jmp ADC
jmp reset
jmp reset
jmp reset
jmp reset
reset:
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,0xFF
out DDRB, r16 ; portul B este setat ca intrare
ldi r16,0b00000011
out DDRD,r16 ; pinii PD0 și PD1 sunt setați ca ieșire
main:
cli
ldi r16,0b00001000 ; in randurile de mai jos se configureaza
out UCSRB,r16 ;modulul USART prin registrii UCSRB si UCSRC
ldi r16,0b10101110
out UCSRC,r16
ldi r16,0x06 ;se seteaza viteza de comunicatie
out UBRRH,r16 ;avand in vedere ca frecventa ceasului
ldi r16,0x81 ;este 8MHz
out UBRRL,r16
ldi r16,0b00100001 ;setare ADC: AREF este referinta, canal ADC1
bucla:
rjmp bucla
ADC:
in r20,SREG
in r17,ADCH ;se citeste rezultatul conversiei, pastrand precizie de numai 8 biti
setup:
ldi r23 ,10
ldi r16,0b00000110
sts PORTB_DIRCLR,r16 ; PB1 si PB2 sunt configurati ca intrari
ldi r16,0b00001000
lds r16,PORTB_DIR
ORI r16,(1<<1)
sts PORTB_DIR,r16 ; PA0 setat ca iesire
masurare:
lds r16,PORTB_OUT
andi r16,0xFD
sts PORTB_OUT,r16 ;valoarea din PA0 este scauzta pentru a activa HX711 iar pinul
PDSCK al senzorului ar trb fii scazut
micros 10
rcall verifica ;verifica daca rezultatul este gata
rcall citesterez ;rezultatul in r13,r12,r11
mov r16,r13 ; copiaza rezultatul in r16
19
andi r16,0x80 ; verifica bitul 7
sbrc r16,7 ; **
rcall calcul ; routina pentru calcularea greutatii cu HX711
rcall bin32_ascii ; convertire rezultat binar in ascii
rjmp masurare
verifica:
push r16
lds r16,PORTB_IN ;copiaza valoarea din PORTB_IN in r16 pentru a verifica daca
este 'low'
sbrc r16,2 ;verifica daca valoarea copiata in r16 are al doilea bit liber
rjmp verifica
pop r16
ret
rezero:
micros 10 ;acesta rutina de instructiune se foloseste pentru asa zisa calibrare a cantarului
rcall verifica
rcall citirerez
sts BUF1,r11
sts BUF2,r12
sts BUF3,r13
ret
bin32_ascii:
mov r28,r8 ;copiaza in r28 valoarea bitului
mov r29,r9 ;copiaza in r28 valoarea bitului 2
mov r30,r10 ;copiaza in r28 valoarea bitului 3
mov r31,r11 ;copiaza in r28 valoarea bitului 4
lds r16,PORTB_IN ;copiaza statusul din PORTB (butonul de calibrare
rezero apasat sau neapasat)
andi r16,0x08
sbrc r16,3 ;daca bitul 3 este 0 sare, inchide si salveaza valorile
curente in BUF1,2,3,4
rjmp exit2 ;daca bitul 3 are o valoare sare la exit2
sts BUF1,r28 ;BUF1,2,3,4 salveaza valorile curente de greutate masurate de
senzor
sts BUF2,r29
sts BUF3,r30
sts BUF4,r31
exit2:
lds r11,BUF1 ;salveaza valorile din BUF1,2,3,4 in
r11,r12,r13,r14
lds r12,BUF2
lds r13,BUF3
lds r14,BUF4
sub r28,r11 ;imparte valoarea curenta pentru a obtine
valoarea corecta
sbc r29,r12
sbc r30,r13
sbc r31,r14 ;valoarea corecta este convertita in ASCII
si afisaza pe ecran
;liniile urm incarca 10 valori ASCII to SRAM salvate ca si "longword"
ldi ZH,high(longword) ;pointer cu adresa SRAM unde se salveaza valorile ASCII
ldi ZL,low(longword) ;pointer cu adresa SRAM unde se salveaza valorile ASCII
20
st Z+,r0 ; al 10-lea digit
st Z+,r1 ; al 9-lea digit
st Z+,r2 ; al 8-lea digit
st Z+,r3 ; al 7-lea digit
st Z+,r4 ; al 6-lea digit
st Z+,r5 ; al 5-lea digit
ldi r27,'.' ; punct pentru zecimale
st z+,r27
st Z+,r6 ; fractie
ldi r27,'k'
st Z+,r27
ldi r27,'g'
st Z+,r27
ret
calcul:
clr r2 ; elibereaza r2 pentru inmultire
clr r3 ; elibereaza r3 pentru inmultire
clr r4 ; elibereaza r4 pentru inmultire
clr r5 ; elibereaza r5 pentru inmultire
ldi r16,25 ; incarca in r16 valoarea 25, valoarea din datasheet
mov r2,r16 ; incarca 25 in r2 pentru inmultirea din setul de registri
r5:r4:r3:r2
mov r21,r11
mov r22,r12
mov r23,r13
clr r24 ; al 4-lea bit este tinut liber
rcall mult32 ; se apleaza mult32 (inmultirea propriu-zisa)
ret
;32x32 -> 64 bit
;R24:R21 x R5:R2 -> R15:R8
;88 cicluri + 4 (RET) = 92 cicluri
;urmeaza mult32 o serie de inmultire pentru calcularea greutatii
mult32:
clr R16
mul R21,R2
movw R8,R0
clr R10
clr R11
clr R12
clr R13
clr R14
clr R15
mul R22,R2
add R9,R0
adc R10,R1
mul R23,R2
add R10,R0
adc R11,R1
mul R24,R2
add R11,R0
adc R12,R1
mul R21,R3
21
add R9,R0
adc R10,R1
adc R11,R16
adc R12,R16
adc R13,R16
mul R22,R3
add R10,R0
adc R11,R1
adc R12,R16
adc R13,R16
mul R23,R3
add R11,R0
adc R12,R1
adc R13,R16
mul R24,R3
add R12,R0
adc R13,R1
mul R21,R4
add R10,R0
adc R11,R1
adc R12,R16
adc R13,R16
adc R14,R16
mul R22,R4
add R11,R0
adc R12,R1
adc R13,R16
adc R14,R16
mul R23,R4
add R12,R0
adc R13,R1
adc R14,R16
mul R24,R4
add R13,R0
adc R14,R1
mul R21,R5
add R11,R0
adc R12,R1
adc R13,R16
adc R14,R16
adc R15,R16
mul R22,R5
add R12,R0
adc R13,R1
adc R14,R16
adc R15,R16
mul R23,R5
add R13,R0
adc R14,R1
adc R15,R16
mul R24,R5
add R14,R0
22
adc R15,R1
ret
citesterez:
ldi r16,25 ;incarca contorul de pulsatii de ceas la 25
mov r10,r16
clr r11
clr r12
clr r13
citire:
rcall PDSCK_HI ;creste PDSDK
rcall PDSCK_LO ;scade PDSDK
dec r10 ;decrementeaza counter
breq exitcitire ;daca counterul = 0 se inchide citire
clc ;elibereaza SREG ('carry bit')
lds r16,PORTA_IN
sbrc r16,2 ;sare peste urmatoarea instructiune daca bitul 2 este 0
sec ;if r16 bit 2 is 1 set sreg carry bit to 1
in r16,UCSRA ;citesc starea modulului USART
sbrs r16,UDRE ;verific daca registrul de emisie/recepție e gol
rjmp wait ;registrul nu este gol, mai aștept
ret ;registrul este gol, revin din așteptare
[16][17][18][19][20][21]
23
Capitolul 4. Concluzii
În concluzie, cântarul a fost adaptat necesităților oamenlor, atât pentru cântărirea lor
cât și pentru utilizarea acesotra în diferite domenii, iar astăzi producătorii oferă o gamă variată
de produse, de la cântare mici, de foarte mare precizie, utilze bijutierilor, laboratoarelor,
bucătăriilor sau producătorilor din industria fină, la cântare ușoare și rezistente, folosite în
târguri și piețe, la cântare cu memorie, ecran tactil și imprimantă de bonuri, regăsite în
supermaketuri.
În altă ordine de idei, acest proiect oferă posbilitatea de a întelege ce se află în
spatele unui cântar, modul de funcționare, oferind o cu totul altă viziune asupra unor
dispozitive pe care le utilizăm zilnic, dar probabil, niciodata nu ne gândim, cum funcționează.
Un cântar este aproape nelipsit din caselor oamenilor, din magazinele
comerciale, din industrie și din multe domenii și are o importanță pe care majoritatea nu o
remarcă.
24
Capitolul 5. Bibliografie
[1] https://pdf1.alldatasheet.com/datasheet-pdf/view/1132222/AVIA/HX711.html
[2] https://circuitjournal.com/50kg-load-cells-with-HX711
[3] https://www.sparkfun.com/datasheets/Sensors/loadsensor.pdf
[4] https://www.iosrjournals.org/iosr-jestft/papers/vol8-issue2/Version-4/
T0824126134.pdf
[5] http://davidegironi.blogspot.com/2019/04/hx711-load-cell-amplifier-driver-
for.html#.Y5JJP3ZBy3B
[6] https://www.digikey.com/en/products/detail/sparkfun-electronics/SEN-
10245/5843757
[7] https://www.researchgate.net/figure/Block-diagram-of-the-weighing-machine-
The-block-diagram-comprises-of-the_fig1_273714734
[8] https://www.instructables.com/How-to-Interface-HX711-Balance-Module-
With-Load-Ce/
[9] https://curs.upb.ro/2022/pluginfile.php/308567/mod_resource/content/1/
MICROC_curs%203_2022.pdf
[10] https://curs.upb.ro/2022/pluginfile.php/308570/mod_resource/content/
1/MICROC_curs%202_2022.pdf
[11] https://curs.upb.ro/2022/pluginfile.php/386009/mod_resource/content/
1/MICROC_curs%205_2022.pdf
[12] https://abra-electronics.com/sensors/sensors-flex-force-en/sens-50-
weight-sensor-to-microcontroller-interface-board.html
[13] https://rlx.sk/en/pressure-flex-rpm-gas/6159-load-sensor-50kg-sf-sen-
10245.html
[14] https://forum.arduino.cc/t/pin-mapping-of-the-atmega32-16pu/233223
[15] https://proto-pic.co.uk/product/load-sensor-50kg-sen-10245
[16] https://curs.upb.ro/2022/pluginfile.php/388746/mod_resource/content/
1/microcontrole re_laborator%203_2022.pdf
[17] https://curs.upb.ro/2022/pluginfile.php/388747/mod_resource/content/
1/microcontrole re_laborator%204_2022.pdf
[18] https://curs.upb.ro/2022/pluginfile.php/388748/mod_resource/content/
1/microcontrole re_laborator%205_2022.pdf
[19] https://curs.upb.ro/2022/pluginfile.php/392396/mod_resource/content/
1/MICROC_cur s%206_2022.pdf
[20] https://curs.upb.ro/2022/pluginfile.php/405712/mod_resource/content/
1/MICROC_cur s%207_2022.pdf
25
[21] https://github.com/MicrochipTech/avrfreaksprojects/tree/
9e6bc971411a2d69374012572b3b6144f2f3f7f2/projects/hx-711attiny804-weighing-scale-
asm-assembly
[22] https://ro.wikipedia.org/wiki/C%C3%A2ntar
[23] https://pdf1.alldatasheet.com/datasheet-pdf/view/1371088/
SPARKFUN/HX711.html
[24] https://www.fiscalmag.ro/blog/cantare/cantare-electronice-comerciale/
[25] https://www.vexio.ro/cantare-corporale/aeg/249821-pw-5644-180-kg-
precizie-100-gr-negru/
[26] https://tenrandomfacts.com/weighing-scale/
[27] https://www.rasfoiesc.com/inginerie/tehnica-mecanica/Masurarea-
masei-cu-balanta43.php
26