COMPARATORE CENTESIMALE – LINGUAGGIO SVG

MISURE DI PRECISIONE – COMPARATORE

Il comparatore non è utilizzato normalmente per eseguire misure di lunghezze assolute ma per apprezzare le variazioni rispetto ad una quota iniziale. La misura deve intendersi come relativa al primo posizionamento del comparatore (vedi la prima figura). metrologia_comparatore_centesimale_verifica_esercitazione_esercizioAnche questo set di verifiche è stato preparato con l’obiettivo di poter assegnare ad ogni alunno una verifica unica. Per scaricare un set di verifiche fate click sul link seguente:

Download gratuito di 35 verifiche

Il file compresso contiene 35 prove in pdf. E’ presente anche un file pdf contenente tutti i risultati (per le misure di tipo relativo).

Ogni aggiornamento del codice e le nuove versioni delle verifiche, sono postate sulla pagina facebook:  www.facebook.com/idroslab

DISEGNO DELLA VERIFICA IN LINGUAGGIO SVG

Il codice scritto per realizzare queste esercitazioni parte sempre dall’idea di generare un numero casuale (in questo caso compreso tra -5.00 e 5.00 mm) e di conseguenza disegnare lo strumento con le lancette posizionate esattamente sulla misura estratta dalla funzione random

  1. % Autori
  2. % Prof. Danilo Pasquini ITIS S. Cannizzaro, Colleferro (Roma)
  3. % Prof. Paolo Sordi IPSIA A. Pacinotti, Pontedera (Pisa)
  4. % Disegno del comparatore centesimale
  5. %
  6.  
  7. function comparatore ()
  8.  
  9. global larghezza_linea
  10. global altezza_tacche_asta
  11. global altezza_tacche_asta_lunghe
  12. global altezza_tacche_nonio 
  13. global larghezza_nonio 
  14. global raggio_millimetrato 
  15. global raggio_spigolo_nonio 
  16. global larghezza_prima_dello_zero 
  17. global fid1
  18. global scala
  19. global numero_verifica
  20. global colonne_risultati
  21. global righe_risultati
  22. global matrice_risultati
  23.  
  24. numero_verifica = numero_verifica + 1;
  25. scala = 3.54;
  26. clc
  27. testo = num2str(ceil(numero_verifica))
  28.  
  29. colonne_risultati = 1;
  30. matrice_risultati (righe_risultati, colonne_risultati) = str2num(testo);
  31. nomefile = ['c:\comparatore_100\100_comparatore_' testo '.svg'];
  32. nomefile1 = ['c:\comparatore_100\100_comparatore_' testo '.txt'];
  33.  
  34. fid = fopen([nomefile], 'wt');
  35. fid1 = fopen([nomefile1], 'wt');
  36. fprintf(fid, ['<!--?xml version="1.0" encoding="iso-8859-1" standalone="no"?-->  \n']);
  37. fprintf(fid, ['\n']);
  38. fprintf(fid, ['\n']);
  39. portata_strumento = 1000
  40.  
  41. [fid] = scrivere (fid,15,10,'left',3,'Nome: __________________________ Classe: ___________ Data: _____________');
  42.  
  43. %[fid] = scrivere (fid,15,20,'left','20','Per verifcare la misura sottrarre il numero per 5,678');
  44. [fid] = scrivere (fid,15,17,'left',2,['Soluzione: ' testo]);
  45. [fid] = scrivere (fid,10,283,'right',2.5,'www.tiny.cc/disegno');
  46. [fid] = scrivere (fid,124,282,'right',2,'Autori: Prof. Paolo Sordi ITIS Marconi, Pontedera (Pisa)');
  47. [fid] = scrivere (fid,132,285,'right',2,'Prof. Danilo Pasquini IPSIA P.P. Delfino, Colleferro (Roma)');
  48.  
  49. % a destra del nonio                   
  50.  
  51. misura_casuale = 0                                                                                
  52. for i=1:3
  53.     for j=[40, 105, 210-40]
  54.         colonne_risultati = 1 + colonne_risultati;
  55.         matrice_risultati (righe_risultati, colonne_risultati) = misura_casuale;
  56.         disegna_comparatore (fid, j, -38+88*i, misura_casuale);
  57.         misura_casuale = -5 + (ceil (rand*portata_strumento)) / 100;
  58.     end
  59. end
  60.  
  61. fprintf(fid, [' \n']);
  62. fclose(fid)
  63. stringa_dos = ['c:\Programmi\Inkscape\inkscape -f ' nomefile ' -A '  'C:\comparatore_100\100_comparatore_' testo '.pdf']
  64. dos(stringa_dos)
  65. fclose (fid1)
  66. load chirp;
  67. y1 = y; Fs1 = Fs;
  68.  % The chirp signal finishes before the 
  69. wavplay(y,Fs)
  70.  
  71. % -------------------------------------------------------------------------
  72.  
  73. function disegna_comparatore (fid,pos_x,pos_y,misura)
  74. global altezza_tacche_asta
  75. global altezza_tacche_asta_lunghe
  76. global altezza_tacche_nonio 
  77. global larghezza_nonio 
  78.  
  79. global fid1
  80. larghezza_linea = 1;
  81. raggio_strumento = 28;
  82. colore1 = 0;
  83. colore2 = 0;
  84. colore3 = 0;
  85. tric = 1.4;
  86. linea (fid,pos_x+raggio_strumento*0.15,pos_y+raggio_strumento,pos_x + raggio_strumento*0.15, pos_y + raggio_strumento * tric , colore1, colore2, colore3,larghezza_linea);
  87. linea (fid,pos_x-raggio_strumento*0.15,pos_y+raggio_strumento,pos_x - raggio_strumento*0.15, pos_y + raggio_strumento * tric , colore1, colore2, colore3,larghezza_linea);
  88. linea (fid,pos_x+raggio_strumento*0.15,pos_y+raggio_strumento* tric,pos_x - raggio_strumento*0.15, pos_y + raggio_strumento * tric , colore1, colore2, colore3,larghezza_linea);
  89.  
  90. % d1 spessore tastatore
  91. d1 = 0.07;
  92. linea (fid,pos_x+raggio_strumento*d1,pos_y+raggio_strumento*tric,pos_x + raggio_strumento*d1, pos_y + raggio_strumento * tric + misura*(-1) +5, colore1, colore2, colore3,larghezza_linea);
  93. linea (fid,pos_x-raggio_strumento*d1,pos_y+raggio_strumento*tric,pos_x - raggio_strumento*d1, pos_y + raggio_strumento * tric + misura*(-1) +5, colore1, colore2, colore3,larghezza_linea);
  94. linea (fid,pos_x+raggio_strumento*d1,pos_y+raggio_strumento*tric + misura*(-1) +5,pos_x - raggio_strumento*d1, pos_y + raggio_strumento * tric + misura*(-1) +5, colore1, colore2, colore3,larghezza_linea);
  95. % linea di riferimento
  96. linea (fid,pos_x+raggio_strumento*d1*4,pos_y+raggio_strumento*tric +  5,pos_x - raggio_strumento*d1*4, pos_y + raggio_strumento * tric +  5, colore1, colore2, colore3,larghezza_linea/2)
  97.  
  98. [fid] = scrivere (fid,pos_x+raggio_strumento*d1*4,pos_y+raggio_strumento*tric  ,'left',3,'+ ');
  99. [fid] = scrivere (fid,pos_x+raggio_strumento*d1*4,pos_y+raggio_strumento*tric +  8 ,'left',3,'- ');
  100.  
  101. [fid] = scrivere (fid,pos_x - raggio_strumento,pos_y + raggio_strumento *1.15 ,'left',3,'misura: ');
  102. [fid] = scrivere (fid,pos_x - raggio_strumento,pos_y + raggio_strumento *1.40 ,'left',3,'_______');
  103. %[fid] = scrivere (fid,pos_x - raggio_strumento,pos_y + raggio_strumento *1.60 ,'left','25',num2str(misura+5.678));
  104. [fid] = cerchio (fid,pos_x,pos_y,raggio_strumento*1.02,colore1,colore2,colore3)
  105. [fid] = cerchio (fid,pos_x,pos_y,raggio_strumento*0.99,colore1,colore2,colore3)
  106. %fid = linea (fid,pos_x,pos_y,pos_x+lunghezza,pos_y,180,180,180,larghezza_linea); 
  107. for i=1:100
  108.     x1 = pos_x + raggio_strumento*0.97 * cos(2 * pi * i/100 );
  109.     y1 = pos_y + raggio_strumento*0.97 * sin(2 * pi * i/100 );
  110.     x2 = pos_x + raggio_strumento*0.93 * cos(2 * pi * i/100);
  111.     y2 = pos_y + raggio_strumento*0.93 * sin(2 * pi * i/100);
  112.     if rem(i,5) == 0
  113.           x2 = pos_x + raggio_strumento*0.88 * cos(2 * pi * i/100);
  114.           y2 = pos_y + raggio_strumento*0.88 * sin(2 * pi * i/100);
  115.     end
  116.     [fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza_linea);
  117.     if rem(i,10) == 0
  118.           x1 = pos_x + raggio_strumento*0.80 * cos(2 * pi * i/100 - pi/2);
  119.           y1 = pos_y + raggio_strumento*0.80 * sin(2 * pi * i/100 - pi/2);
  120.           if i &lt; 100
  121.                 [fid] = scrivere (fid,x1,y1,'middle',2.2,num2str(i));
  122.           else
  123.                 [fid] = scrivere (fid,x1,y1,'middle',2.2,num2str(0));
  124.           end
  125.     end
  126.     if rem(i,10) == 0
  127.           x1 = pos_x + raggio_strumento*0.70 * cos(2 * pi * i/100 - pi/2);
  128.           y1 = pos_y + raggio_strumento*0.70 * sin(2 * pi * i/100 - pi/2);
  129.           if i &lt; 100
  130.                 [fid] = scrivere (fid,x1,y1,'middle',1.4,num2str(100-i));
  131.           end
  132.     end
  133. %    fid = linea (fid,pos_x+i,pos_y,pos_x+i,pos_y+tacca, 0, 0, 0,0.1); 
  134. end
  135. centesimi = misura-floor(misura);
  136. x1 = pos_x + raggio_strumento*0.97 * cos(2 * pi * centesimi - pi/2);
  137. y1 = pos_y + raggio_strumento*0.97 * sin(2 * pi * centesimi - pi/2);
  138. x2 = pos_x ;
  139. y2 = pos_y ;
  140. [fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza_linea);
  141. % quadrante millimetri
  142. if (sin(2 * pi * centesimi - pi/2) &lt; -0.8)
  143.     pos_x1 = pos_x - raggio_strumento / 2.3;
  144.     pos_y1 = pos_y ;
  145. else
  146.     pos_x1 = pos_x;
  147.     pos_y1 = pos_y - raggio_strumento / 2.2;
  148. end
  149.  
  150. raggio_quadrante_piccolo = raggio_strumento / 4;
  151. [fid] = cerchio (fid,pos_x1,pos_y1,raggio_quadrante_piccolo,colore1,colore2,colore3)
  152. for i=0:9
  153.     x1 = pos_x1 + raggio_quadrante_piccolo*0.97 * cos(2 * pi * i/10- pi/2);
  154.     y1 = pos_y1 + raggio_quadrante_piccolo*0.97 * sin(2 * pi * i/10- pi/2);
  155.     x2 = pos_x1 + raggio_quadrante_piccolo*0.85 * cos(2 * pi * i/10- pi/2);
  156.     y2 = pos_y1 + raggio_quadrante_piccolo*0.85 * sin(2 * pi * i/10- pi/2);
  157.     [fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza_linea);
  158.     x1 = pos_x1 + raggio_quadrante_piccolo*0.78 * cos(2 * pi * i/10 - pi/2);
  159.     y1 = pos_y1 + raggio_quadrante_piccolo*0.78 * sin(2 * pi * i/10 - pi/2);
  160.     tic = sin(2 * pi * i/10 - pi/2);
  161.     if tic &lt; 0 y1=y1-tic*1.5; end altezza_numeretto = 1.6; if i &gt; 0
  162.         [fid] = scrivere (fid,x1,y1-altezza_numeretto/2,'middle',altezza_numeretto,num2str(10-i));
  163.     else
  164.         [fid] = scrivere (fid,x1,y1-altezza_numeretto/2,'middle',altezza_numeretto,num2str(0));
  165.     end
  166.  %    fid = linea (fid,pos_x+i,pos_y,pos_x+i,pos_y+tacca, 0, 0, 0,0.1); 
  167. end
  168. interi = floor(misura);
  169. x1 = pos_x1 + raggio_quadrante_piccolo*0.97 * cos(2 * pi * (5+(-1)*misura)/10 - pi/2);
  170. y1 = pos_y1 + raggio_quadrante_piccolo*0.97 * sin(2 * pi * (5+(-1)*misura)/10 - pi/2);
  171. x2 = pos_x1 ;
  172. y2 = pos_y1 ;
  173. [fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza_linea);
  174.  
  175. % [fid] = scrivere (fid,pos_x - raggio_strumento + 40 , pos_y + raggio_strumento * 1.29 ,'left','20',num2str(centesimi));
  176. % fid = rettangolo (fid,  pos_x+lunghezza, pos_y-raggio_spigolo_nonio,  ...
  177. %                        larghezza_nonio, raggio_spigolo_nonio*2, 0, 0, 0,0.2);
  178. fid = commento (fid,'tacche nonio')
  179. % parte sotto del nonio
  180. %[fid] = scrivere (fid,pos_x+lunghezza+tacca_nonio + 4+30,pos_y,'middle','7',num2str(lunghezza));
  181. fprintf(fid1, ['misura: ' num2str(misura, '%10.2f')  '\n'])
  182.  
  183.  
  184. % -------------------------------------------------------------------------
  185.  
  186. function [fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza)
  187. global scala
  188. fprintf(fid, [' \n']);              
  189.  
  190. % -------------------------------------------------------------------------
  191.  
  192. function [fid] = linea_puntini (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza)
  193. global scala
  194. fprintf(fid, [' \n']);              
  195.  
  196. % -------------------------------------------------------------------------
  197.  
  198. function [fid] = cerchio (fid,coord_x,coord_y,raggio,colore1,colore2,colore3)
  199. global scala
  200. fprintf(fid, [' \n']);
  201.  
  202. % --------------------------------------------------------------------------      
  203.  
  204. function [fid] = rettangolo (fid,x1,y1,lato1,lato2,colore1,colore2,colore3,larghezza)
  205. global scala      
  206. fprintf(fid, [' \n']);
  207.  
  208. % --------------------------------------------------------------------------      
  209.  
  210. function [fid] = commento (fid,testo_commento)
  211. global scala              
  212. fprintf(fid, ['/* '  '\n']);
  213. fprintf(fid, [testo_commento  '\n']);
  214. fprintf(fid, ['*/ '  '\n']);
  215.  
  216. % --------------------------------------------------------------------------      
  217.  
  218. function [fid] = scrivere (fid,x1,y1,giustificazione,altezza_testo,testo)
  219. global scala
  220. fprintf(fid, ['' testo '' '\n']);
Stampa del file pdf con i risultati
  1. % Autori
  2. % Prof. Paolo Sordi IPSIA A. Pacinotti, Pontedera (Pisa)
  3. % Prof. Danilo Pasquini IPSIA Parodi Delfino, Colleferro (Roma)
  4. %
  5.  
  6. function stampa_pdf_risultati ()
  7.  
  8. global larghezza_linea
  9. global altezza_tacche_asta
  10. global altezza_tacche_asta_lunghe
  11. global altezza_tacche_nonio 
  12. global larghezza_nonio 
  13. global raggio_millimetrato 
  14. global raggio_spigolo_nonio 
  15. global larghezza_prima_dello_zero 
  16. global fid1
  17. global scala
  18. global numero_lettura
  19.  
  20. global matrice_risultati
  21. global colonne_risultati
  22. global righe_risultati
  23.  
  24. numero_lettura = 0;
  25.  
  26. larghezza_prima_dello_zero = 3;
  27. larghezza_linea = 0.2;
  28. altezza_tacche_asta = 2;
  29. altezza_tacche_asta_lunghe = 5;
  30. altezza_tacche_nonio = 3;
  31. larghezza_nonio = 15;
  32. raggio_millimetrato = 11;
  33. raggio_spigolo_nonio = 14.5;
  34. scala = 3.54;
  35. altezza_testo = 1.6;
  36.  
  37. testo = num2str(ceil(rand*100));
  38. nomefile = ['c:\comparatore_100\risultati_' testo '.svg'];
  39. nomefile1 = ['c:\comparatore_100\risultati_' testo '.txt'];
  40.  
  41. fid = fopen([nomefile], 'wt');
  42. fid1 = fopen([nomefile1], 'wt');
  43. fprintf(fid, ['<!--?xml version="1.0" encoding="iso-8859-1" standalone="no"?-->  \n']);
  44. fprintf(fid, ['\n']);
  45. fprintf(fid, ['\n']);
  46. portata_strumento = 2500;
  47. lunghezza_casuale = (ceil (rand*portata_strumento))/  100;
  48.  
  49. pos_x = 90;
  50. pos_y = 40;
  51. [fid] = scrivere (fid,30,10,'left',3,'Risultati letture comparatore');
  52.  
  53. [fid] = scrivere (fid,145,10,'right',3,'www.tiny.cc/disegno');
  54.  
  55. [righe,colonne] = size(matrice_risultati);
  56. passo = 10;
  57. for i=1:righe
  58.     for j=1:colonne
  59.          if j==1
  60.              [fid] = scrivere (fid,4 + j*passo*1.3, 10 + i*passo*0.78,  'middle', 3.5, num2str(matrice_risultati(i,j)));
  61.          else
  62.              [fid] = scrivere (fid,7 + j*passo*1.7, 10 + i*passo*0.78,  'middle', 3, num2str(matrice_risultati(i,j), '%10.2f'));
  63.          end
  64.     end
  65. end
  66. fprintf(fid, [' \n']);
  67. fclose(fid)
  68. stringa_dos = ['c:\Programmi\Inkscape\inkscape -f ' nomefile ' -A '  'C:\comparatore_100\Risultati' testo '.pdf']
  69. dos(stringa_dos)
  70. fclose (fid1)
  71.  
  72. % -------------------------------------------------------------------------
  73.  
  74. function [fid] = linea (fid,x1,y1,x2,y2,colore1,colore2,colore3,larghezza)
  75. global scala
  76. fprintf(fid, [' \n']);              
  77.  
  78. % -------------------------------------------------------------------------
  79.  
  80. function [fid] = cerchio (fid,x1,y1,raggio,colore1,colore2,colore3)
  81. global scala
  82. fprintf(fid, [' \n']);
  83.  
  84.  
  85. % --------------------------------------------------------------------------      
  86.  
  87. function [fid] = rettangolo (fid,x1,y1,lato1,lato2,colore1,colore2,colore3,larghezza)
  88. global scala      
  89. fprintf(fid, [' \n']);
  90.  
  91. % --------------------------------------------------------------------------      
  92.  
  93. function [fid] = commento (fid,testo_commento)
  94. fprintf(fid, ['/* '  '\n']);
  95. fprintf(fid, [testo_commento  '\n']);
  96. fprintf(fid, ['*/ '  '\n']);
  97.  
  98. % --------------------------------------------------------------------------      
  99.  
  100. function [fid] = scrivere (fid,x1,y1,giustificazione,altezza_testo,testo)
  101. global scala
  102. altezza_testo = altezza_testo*0.8;
  103. fprintf(fid, ['' testo '' '\n']);
  104. %rettangolo_per_coprire_numero (fid, x1, y1, altezza_testo , altezza_testo, 0, 0, 0, 0.2)
  105.  
  106. % --------------------------------------------------------------------------      
  107.  
  108. function [fid] = rettangolo_per_coprire_numero (fid,x1,y1,lato1,lato2,colore1,colore2,colore3,larghezza)
  109. global scala      
  110. fprintf(fid, [' \n']);