Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
//pesacalorie, bilancia digitale, bilancia pesa calorie, sensore di peso, keypad, display 2004, digital scale, digital calories scale, load cell
Nel momento in cui la bilancia registra il valore zero (quando si accorge che non c’e’ nulla sul
piatto) cancella la descrizione sul display e si pone in attesa di un nuovo ingrediente per la ricetta
in via di composizione. Qui il film del progetto.
Attenzione: la dimensione della tabella dei prodotti e’ tale da renderne proibitivo l’utilizzo con
Arduino uno. Questo progetto puo’ essere replicato solo se si dispone di una scheda di maggior
potenza, tipo arduino mega 2560, che dispone di 256k di memoria al posto dei 32k di Arduino
uno.
//Arduino: il pesa calorie – the caloriescale
//pesacalorie, bilancia digitale, bilancia pesa calorie, sensore di peso, keypad, display 2004, digital scale, digital calories scale, load cell
cat. alimentare 2 - carni fresche e uova cat. alimentare 3 - pesce fresco e conservato
codice descrizione Kcal codice descrizione Kcal
0 agnello 162 0 Alici e acciughe salate 128
1 anatra 159 1 alici e acciughe fresche 110
2 cappone 226 2 Branzino e merluzzo 82
3 coniglio e cinghiale 120 3 crostacei 85
4 maiale 180 4 seppie, polpi e calamari 70
5 manzo 160 5 salmone affumicato 180
6 pollo e tacchino 130 6 sardine e orate fresche 120
7 uova intere 130 7 sardine e tonno con olio 250
8 uova tuorlo 325 8 sgombro,tonno, salmone fr 160
9 9 trota fresca 100
Nota: la libreria HX711 e’ stata modificata nella primavera del 2019 Nella nuova versione prevede
l’utilizzo delle porte digitali 2 e 3 al posto delle porte analogiche 0 ed 1. Il programma riportato in
questa nota funziona solo con la nuova versione della libreria.
Per installare le librerie:
Scaricare le librerie in formato compresso;
Installarle via IDE-> sketch-> includes Library-> add .zip library
Dopo l’installazione verificarne la presenza in: IDE-> sketch-> includes Library->
Contributed library
Deve anche essere installata la libreria “keypad.h”, presente nel library manager dell’IDE (sketch-
>include library->manages libraries), ma non ancora installata
Nota: Questo esercizio e questa scheda sono parte di una serie che vede protagonisti Arduino ed
alcuni dei componenti ad esso collegabili. Per la maggior parte degli esercizi e’ anche disponibile
un filmato su youtube.
Esercizi facenti parte della raccolta
Filmati presenti su youtube
Informazioni su arduino e sui componenti collegabili (PDF scaricato nell’area di download)
Breve manuale di programmazione (PDF scaricato nell’area di download)
Per eventuali chiarimenti o suggerimenti sul contenuto di questa scheda scrivere a
giocarduino@libero.it
Under the practical aspect, the caloriescale weighs what is located on plate and waits for an input
from keyboard. First dialed number identifies the food category and the second number identifies
the food inside of the category (See under the list of food categories and food). The program
calculates number of calories for the amount food on plate, shows it on lcd display and, if you
press the "b" button, adds it to total of recipe. In case of typing error, simply press the "a" key to
delete the selection you just made
food category 2 - meat and fresh eggs food category 3 - fresh fish and preserved
code description Kcal code description Kcal
0 lamb 162 0 salted anchovies 128
1 duck 159 1 Fresh anchovies 110
2 capon 226 2 sea bass and cod 82
3 rabbit and wild boar 120 3 shellfish 85
4 pig 180 4 cuttlefish,octopus and squid 70
5 beef 160 5 smoked salmon 180
6 chicken and turkey 130 6 Fresh sardines and sea bream 120
7 whole eggs 130 7 sardines and tuna with oil 250
8 egg yolk 325 8 Fresh mackerel,tuna,salmon 160
9 9 fresh trout 100
food category 4 – milk and dairy products food category 5 - carni conservate
code description Kcal code description Kcal
0 Fresh cheese 240 0 ham 159
1 hard aged cheeses 400 1 baked ham 138
2 Soft ripened cheeses 310 2 speck 303
3 Whole milk and yogurt 64 3 mortadella 317
4 Skimmed milk and yogurt 46 4 fresh sausage 170
5 mascarpone cheese 460 5 salami 400
6 cream 300 6 beacon 661
7 ricotta cheese 146 7 bresaola 153
8 8
9 9
Before proceeding to program compilation must be installed, if not already done, the libraries:
LiquidCrystal_I2C.h found in: https://github.com/fmalpartida/New-LiquidCrystal
HX771.h found here
//Arduino: il pesa calorie – the caloriescale
//pesacalorie, bilancia digitale, bilancia pesa calorie, sensore di peso, keypad, display 2004, digital scale, digital calories scale, load cell
Note: HX711 library has been modified during spring 2019 and provides for use of digital ports 2
and 3 in place of analogic ports 0 and 1. Programs reported in this note only work with new library.
For library installation, see process shown in previous projects, and summarized in:
library download in compressed form;
Installation via IDE-> sketch-> includes Library-> add .zip library
After installation please verify the library. It must be present in IDE-> sketch-> includes
Library-> Contributed library.
Must also be installed the “keypad.h” library, present but non yet installed in the library manager
(sketch->include library->manages libraries)
Note: This project and this note is part of a series that sees, as main characters, Arduino and
some of connectable components. For most projects there is also a video on youtube.
Projects collection
Movies on youtube
About Arduino and components (italian; pdf will be downloaded in your download area
Quick programming guide (almost english; pdf will be downloaded in your download area)
For any questions or suggestions about this note (and on its english translation), please write to
giocarduino@libero.it (simple words and short sentences, please)
Materiali
Un Arduino mega 2560
Un sensore di peso e relativo driver HX711
Una tastiera da 16 tasti
Un display 2004 (20 caratteri su quattro righe) con driver I2C
Schema
//Arduino: il pesa calorie – the caloriescale
//pesacalorie, bilancia digitale, bilancia pesa calorie, sensore di peso, keypad, display 2004, digital scale, digital calories scale, load cell
/* Attenzione: facendo il copia/incolla dal PDF all’IDE si perde la formattazione del testo.
* Per rendere piu’ facilmente leggibile il programma e’ opportuno formattarlo subito dopo il
* trasferimento nell’IDE, premendo CTRL+T Nel trasferimento si perdono anche gli spazi compresi
* tra apici (“ “), per cui una volta trasferito il programma nell’IDE bisogna intervenire
* manualmente per reintrodurre gli spazi perduti (vedi anche le note in rosso nella versione pdf
* del programma).
*
* Questo programma contiene, oltre al set di caratteri utilizzati dalla libreria liquidcrystal,
* una tabella di oltre 2200 caratteri e per tale ragione non puo' essere eseguito su Arduino uno
* (che dispone, per le variabili, poco piu' di 2000 caratteri). E' stato quindi sviluppato e
* provato su Arduino mega che, per caratteristiche e potenza, puo' tranquillamente gestire
* tabelle di grandi dimensioni.
*
* Questo programma unisce le esperienze degli esercizi 41 e 42 (sensore di peso e
* tastiera + display2004), alle cui schede si rimanda per la costruzione
* dell'impianto e per le problematiche di installazione delle librerie (attenzione:
* il display 2004 deve essere collegato alle porte 20 e 21 di arduino mega al posto
* delle tradizionali porte A4 ed a5 di arduino uno).
*
* connessioni del modulo HX711:
* Hx711.DT - porta 2
* Hx711.SCK - porta 3
*
* connessioni del sensore di peso:
* rosso = E+
* nero = E-
* bianco = A-
* verde = A+
*
* connessioni del tastierino numerico:
* pin delle righe (primi 4 connettori di sinistra): porte 4,5,6 e 7
* pin delle colonne (ultimi 4 connettori di destra): porte 8,9,10,e 11
*
* connessione del display 2004 (4 righe da 20 caratteri)
* pin SDA: porta 20
* pin SCL: porta 21
*
* Manuale d'uso:
* tasti numerici: selezione della categoria alimentare e dell'alimento
* tasti non numerici:
* "A" = clear, cancella l'ultima selezione e chiede nuovamente la categoria alimentare
* per il prodotto presente sul piatto
* "B" = aggiunge alla ricetta l'ingrediente sul piatto
* "C" = eliminazione dalla ricetta l'ultimo ingrediente aggiunto
* "D" = pulisce il sistema e lo predispone ad una nuova ricetta
* "*" = conferma l'eliminazione
* "#" = annulla la richiesta di eliminazione
*
* ---------------------------------------------------------------------------------------
* Warning: cut&paste from PDF to IDE loses formatting. to restore it press CTRL + T. In
* transfer will also loses the spaces in quotes (""), so once transferred program in IDE,
* we must intervene manually to introduce the lost spaces (see also red notes on pdf version
* of program).
*
* This program contains, in addition to the character set used by liquid crystal library, an array
* of more than 2200 characters and for this reason can not runs on Arduino uno (which has, for
* variables, a little more than 2000 characters). It was developed and tested on Arduino Mega that,
* for features and power, can safely handle a large array.
*
* HX711: device connections :
* Hx711.DT - digital pin 2
* Hx711.SCK - digital pin 3
*
* load cell connections to hx711
* red = E+
* balck = E-
* withe = A-
* green = A+
*
* numeric keypad connections:
* rows pins (firs 4 connector on the left): pins 4,5,6 and 7
* columns pins (last 4 connectors on the rigth): pins 8,9,10,and 11
*
* display 2004 connections:
//Arduino: il pesa calorie – the caloriescale
//pesacalorie, bilancia digitale, bilancia pesa calorie, sensore di peso, keypad, display 2004, digital scale, digital calories scale, load cell
* SDA: pin 20
* SCL: pin 21
*
* user manual:
* numeric keys: select category and food
* non numeric keys:
* "A" = clear last selection and restart from food category for product on plate
* "B" = adds to recipe the on plate food
* "C" = delete, from recipe, the last food added
* "D" = clear system and start with a new recipe
* "*" = confim delete
* "#" = cancels the deletion request *
*
*/
#include <Keypad.h> // libreria di gestione della tastiera
#include <Wire.h> // libreria wire presente, di fault, nell'IDE
#include <LiquidCrystal_I2C.h> // libreria di gestione del display lcd
#include "HX711.h" // libreria di gestione del modulo HX711, per la gestione
// del sensore di peso
//
// nelle prossime due righe vengono attribuiti i parametri per la gestione del display
//--------------------addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// ^ indirizzo alternativo, da attivare al posto della precedente istruzione se lcd non funziona
// ^^ Alternative address, to activate in place of previous instruction if LCD doesn't work
int calorie [100] = // calories tab – uses the same index of previus array
{
32, // indice 00 {"carote e porri ", 32},
25, // indice 01 {"cipolle o cavoli ", 25},
20, // indice 02 {"fagiolini o verze ", 20},
23, // indice 03 {"funghi freschi ", 23},
18, // indice 04 {"melanz/carciof/zucca", 18},
80, // indice 05 {"leguni o patate ", 80},
22, // indice 06 {"peperoni ", 22},
19, // indice 07 {"pomodori ", 19},
15, // indice 08 {"insalata/finoc/sedan", 15},
14, // indice 09 {"zucchine e cetrioli ", 14},
28, // indice 10 {"pesche/albic/meloni ", 28},
//Arduino: il pesa calorie – the caloriescale
//pesacalorie, bilancia digitale, bilancia pesa calorie, sensore di peso, keypad, display 2004, digital scale, digital calories scale, load cell
//
//********************** routine di somma dell'ultimo ingrediente ************
//*************************** add last ingredient ***************************
//
void aggiungiallaricetta (void)
{
ultalim = alim; // memorizza il codice dell'alimento
ultcat = catalim; // memorizza il codice della categoria
ultpeso = peso; // memorizza il peso dell'ingrediente che si sta aggiungendo
ultcal = cal; // memorizza le calorie dell'ingrediente che si sta aggiungendo
totcal = totcal + cal; // aggiunge le calorie correnti al totale della ricetta
lcd.setCursor(0, 1); // posiziona cursore a inizio seconda riga (carattere 0 e riga 1)
lcd.print("ingrediente aggiunto");
lcd.setCursor(0, 2); // posiziona cursore a inizio terza riga (carattere 0 e riga 2)
lcd.print("svuota il piatto "); // inserire spazi a destra sino a 20 caratteri
lcd.setCursor(0, 3); // posiziona cursore a inizio quarta riga (carattere 0 e riga 3)
lcd.print (" ");// inserire spazi sino a 20 caratteri
lcd.setCursor(0, 3); // posiziona cursore a inizio quarta riga (carattere 0 e riga 3)
lcd.print("tot.kcal: ");
lcd.print (totcal);
delay (3000); // attende 3 secondi prima di continuare nella elaborazione
pulisci (); // predispone il sistema ad accettare un nuovo ingrediente
}
//
//************** routine di richiesta conferma eliminazione *************************
// ************************ confirm elimination **************************************
//
void chiediconferma(void)
{
if (semaforo == 6) // se e' stato chiesto il reset
{
lcd.clear (); // pulisce lo schermo
lcd.setCursor(0, 0); // posiziona cursore a inizio prima riga (carattere 0 e riga 0)
lcd.print("vuoi cancellare "); // inserire spazi a destra sino a 20 caratteri
lcd.setCursor(0, 1); // posiziona cursore a inizio seconda riga (carattere 0 e riga 1)
lcd.print("tutto e ripartire? "); // erase all and restart?
lcd.setCursor(0, 3); // posiziona cursore a inizio della terza riga (carattere 0 e riga 3)
lcd.print("confermi? S/N"); // chiede conferma (confirm y/n (*/#)
}
else
{
semaforo = 2; // predispone la ricezione del codice di conferma o di eliminazione
lcd.clear (); // pulisce lo schermo
lcd.setCursor(0, 0); // posiziona cursore a inizio prima riga (carattere 0 e riga 0)
lcd.print ("canc. ");
lcd.print(ultpeso); // evidenzia il peso dell'ultimo ingrediente aggiunto
lcd.print ("g ");
lcd.print (ultcal); // evidenzia le calorie dell'ultimo ingrediente aggiunto
lcd.print ("kcal");
lcd.setCursor(0, 1); // posiziona cursore a inizio seconda riga (carattere 0 e riga 1)
lcd.print(categoria [ultcat]); // evidenzia la categoria dell'ultimo ingrediente
lcd.setCursor(0, 2); // posiziona cursore a inizio terza riga (carattere 0 e riga 2)
lcd.print(alimento [ultalim]); // evidenzia il nome dell'ultimo ingrediente
lcd.setCursor(0, 3); // posiziona cursore a inizio terza riga (carattere 0 e riga 3)
lcd.print("confermi? S/N"); // chiede conferma
}
}
//
//******************** routine di selezione della categoria alimentare********
// ************************ select food category *****************************
//
void categorialimentare (void)
{
semaforo = 1; // predispone alla ricezione del secondo codice (alimento)
catalim = tastocorrente; // memorizza la categoria alimentare
lcd.setCursor(0, 1); // posiziona cursore a inizio seconda riga (carattere 0 e riga 1)
lcd.print(categoria [catalim]); // visualizza sul display (riga 1) la categoria alimentare
lcd.setCursor(0, 2); // posiziona cursore a inizio terza riga (carattere 0 e riga 2)
lcd.print("codice alimento?"); // chiede l'inserimento del codice di alimento – food code?
}
//
//********************** routine di selezione dell'ingrediente ****************
// *****************************select food ***********************************
//
void ingrediente (void)
{
semaforo = 3;
lcd.setCursor(0, 2); // posiziona cursore a inizio terza riga (carattere 0 e riga 2)
//Arduino: il pesa calorie – the caloriescale
//pesacalorie, bilancia digitale, bilancia pesa calorie, sensore di peso, keypad, display 2004, digital scale, digital calories scale, load cell