Controllo traffico

Dalla email di Mario:

…Per quanto riguarda la problematica del timer ho individuato su internet il seguente

circuito basato su mudulo DS1307:  esempio:
secondo lei potrebbe risolvere il problema della data e ora?
Per quanto riguarda la registrazione dei dati non sarebbe possibile aggiungere una SD card e registrare i dati su file tipo l’esempio del seguente sito?
Essendo poco pratico di elettronica e di arduino, non capisco se sto dicendo delle “castronerie”..

CIRCUITO A BLOCCHI

Un sistema per rilevare delle masse metalliche in transito può essere sintetizzato a blocchi:
Il componente tratteggiato indica la possibilità di collegamento ad un microcontrollore: questo consente una maggiore scalabilità e connettività del sistema.

COMPONENTI EXTRA

Come scriveva Mario, sono necessarii dei componenti specifici, da reperire a parte. Si tratta di due moduli:
  • RTC Real Time Clock, un orologio con data
  • SD-mod, per scrivere/leggere delle SD card

In realtà mancano tutti gli altri componenti della figura a blocchi precedenti: oscillatore, filtro, alimetatore, ecc., ma questo è solo un esercizio (su questo è utile riprendere il concetto di FabLab).

INTERFACE STUBBING

Per scrivere il codice useremo la tecnica dell’interface stubbing. Di che si tratta?
Semplice, si tratta di un metodo per far credere ad un programma di avere ricevuto (o inviato) dei dati da una funzione. In pratica faremo finta di avere sia il modulo RTC e sia SD. Questo significa isolare le componenti, l’unica cosa che dobbiamo sapere è come gestire l’interfaccia, ovvero come chiamare la funzione e come trattare i relativi parametri.
Faccio un esempio: devo completare un programma che userà un sensore di pressione. Il sensore vero e proprio non mi é ancora arrivato, ma ho a disposizione le informazioni tecniche dal suo produttore. Egli mi dice che il sensore darà una tensione di uscita lineare da 0-4.3V proporzionale al range di pressione da 0 a 10bar.
Questa è una parte del programma “padre”:
...
// leggo pressione entrata PS1
wps1 = rd_ps (1);
 e questa è la funzione chiamata che ritorna un valore fisso a 2.33:
double rd_ps (int pport) {
   return (2.33);
/*
   parte di codice che legge effettivamente la porta assegnata al sensore...*/
}
 Chiaramente prima di andare in produzione lo stub dovrà essere tolto e al suo posto si dovrà usare la funzione corretta.
 Ecco una prima parte:
/*
  Moesa d'Ur SA

  engineering staff of M'AU
  
  project:    lab20_ard1
  file name:  som_lab20_00.ino
  porpouse:   traffic monitor
 
who       when        what 
---------------------------------------------
mr       09.01.2017   creates 
*/

int wcurrport = 0; 

/* stub
#include <swRTC.h>
swRTC rtc; //create a new istance of the lib
*/
 
void setup() {
/*        rtc.stopRTC(); //stop the RTC
        rtc.setTime(12,0,0); //set the time here
        rtc.setDate(4,6,2012); //set the date here
        rtc.startRTC(); //start the RTC
        */
         int wcurrport = 0; 
pinMode(wcurrport, INPUT); 
Serial.begin(9600);
Serial.print( "controllo traffico: ");
}
 
void loop() {
int whour;
int wminu;
int wseco;
   int wcurrval = analogRead(wcurrport);     
   if (wcurrval > 60.0) {
/* stub
     whour = rtc.getHours();
   wminu = rtc.getMinutes();
   wseco = rtc.getSeconds();
   */
   Serial.println(whour); 
   Serial.print(":");
   Serial.print(wminu); 
   Serial.print(":");
   Serial.println(wseco); 
    }
    delay(10);
}

continua…

Leave a Reply