Archivi tag: automazione

Programmare una scheda Arduino con l’Arduino Web Editor

Dedico questo articolo ai miei nuovi studenti di 3B Automazione (ITIS G.B. Pininfarina di Moncalieri) con cui ho incominciato a spiegare l’utilizzo di Arduino. Le prime lezioni come sempre sono dedicate all’analisi della scheda elettronica, dei componenti presenti su di essa, al funzione del microcontrollore e primi esercizi di programmazione, cercando di trovare soluzioni divertenti, pensate per le loro competenze di elettrotecnica ed elettronica, quindi semplice accensione di LED per la creazione di modellini di impianti semaforici stampati in 3D in modo da prendere pratico con l’uso dei pin I/O digitali di Arduino.

Parallelamente sto mostrando i diversi ambienti di programmazione e simulazione della scheda. Nelle prime lezioni usiamo l’IDE Arduino standard caricato sui vari PC, ma utilizzeremo anche la versione più pratica e sempre aggiornata dell’Arduino Web Editor versione on-line dell’IDE Arduino.
Ma perché pensare di adottare questa soluzione a scuola?
Banalmente per avere sempre con se, in qualsiasi momento, su qualsiasi computer gli sketch sviluppati.

Il tutorial che segue mostra una procedura guidata relativamente semplice, ma come sempre preferisco non dare mai nulla per scontato, soprattutto con i giovanissimi studenti che incominciano il percorso di Automazione, quindi condurre per mano nel primo mese di scuola in modo che siano poi autonomi e liberi di sperimentare anche a casa.

E’ possibile accedere  all’Arduino Web Editor dalla home page del sito www.arduino.cc: “software > online tools” giungerete alla home page di Arduino Create

oppure direttamente seguendo il link: create.arduino.cc

Su questa pagina selezionate: Arduino Web Editor

Sarete reindirizzati in una pagina di login in cui dovrete inserire nome utente e password, se non avete mai effettuato la registrazione sul sito Arduino procedete come indicato nell’immagine che segue, facendo click su: “CREATE A NEW ACCOUNT”

Continua a leggere

Strumenti per le esercitazioni di automazione industriale – supporti ventole

Durante la scorsa settimana ho coinvolto i miei studenti della 3B Automazione dell’ITIS G.B. Pininfarina di Moncalieri in un’attività di Making a tempo 🙂

12 vecchi PC ormai alienati da disassemblare integralmente da cui estrarre e catalogare elementi da utilizzare nelle esercitazioni di automazione industriale con microcontrollori e PLC.

2 ore di tempo per recuperare:

  • ventole di raffreddamento processore e PC
  • recupero motori passo passo dai DVD
  • alimentatore computer
  • pulsanti
  • altoparlanti e buzzer
  • elementi meccanici
  • e molto altro

tutto pronto per dar vita a nuove attività.

Studenti fantastici, hanno smontato tutto e ripulito i banchi di lavoro in 1 ora e 40 min. Bravi!

Comandare la marcia e l’arresto, velocità di rotazione e il senso di rotazione di un motore elettrico è argomento fondamentale che viene svolto nel percorso di automazione, quindi considerando che i laboratori del nostro istituto sono esposti al sole e la primavera è alle porte, meglio affrontare questo argomento utilizzando le ventole recuperate dai vecchi PC, probabilmente gli studenti saranno più invogliati ad imparare:

  • imparo allora mi rifresco
  • non imparo e sudo

un ventilatore per ogni studente!
… sembra uno slogan politico 🙂

per rendere pratico l’uso delle ventole sul banco di lavoro, ho realizzato i supporti che sostengono la ventola con inclinazione di 15°.

Le stesse ventole potrebbero essere utilizzate per aspirare i fumi di saldatura su PCB.

Il supporto di cui vi condivido i sorgenti per la stampa 3D è pensato per ventole da 80 mm e larghezza di 25mm ma ben si adatta a ventole di diametro maggiore.

Buon making a tutti.

Utilizzo dell’LCD 16×2 Hitachi HD44780 1602 con modulo I2C PCF8574T

Addendum al progetto EduRobot.

Una settimana è bastata per scatenare la fantasia di giovani studenti alle prese con EduRobot per l’attività di Alternanza Scuola Lavoro. Le relazioni di lavoro mettono in evidenza soluzioni alternative originali, la richiesta è di continuare ad aggiungere funzionalità ad EduRobot, vedremo nelle prossime settimane come proseguire con i lavori, ma sicuramente in questa prima fase mi posso ritenere soddisfatto! 😊

Tra le richieste che mi sono state fatte vi è quella di inserire un display per aggiungere interattività con il robot. Tra le possibilità ho suggerito l’utilizzo di un LCD 16×2 Hitachi HD44780 1602 quelli in dotazione con molti kit Arduino. Per rendere più agevole la gestione e i collegamenti, visto l’elevato numero di connessioni presenti su EduRobot, ho consigliato l’utilizzo di un modulo PCF8574T per il controllo in I2C, poiché gli studenti sono giovani ed ancora non hanno affrontato questo argomento, con questo post voglio dare un piccolo aiuto.

Disponiamo dei moduli della sunfounder su cui è già saldato il modulo i2C:

l’utilizzo è identico ai più comuni expander esterni come quelli indicati nell’immagine che segue:

Il display è costituito da 4 pin di connessione, due dedicati all’alimentazione e due alla comunicazione i2C.

Le connessioni tra LCD1602 i2C ed Arduino sono i seguenti:

LCD1602 —> Arduino
GND -> GND
Vcc -> 5V
SDA -> A4
SCL -> A5

Per poter utilizzare questo display è necessario installare la libreria LiquidCrystal_I2C dal seguente link: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Prelevate il file .zip ed installate la libreria direttamente dall’IDE di Arduino:

in alternativa potete scompattare e copiare il tutto nella cartella libraries di Arduino.

Piccolo avvertimento, sicuramente nelle vostre sperimentazioni prenderete spunto da sketch che troverete on-line, alcune volte questi esempi sono datati e si riferiscono ad una versione dell’ide di qualche anno fa in cui si poteva inizializzare l’LCD nel setup con: lcd.init(), ciò non è più possibile sostituitela con la classe lcd.begin() così come indicato negli esempi che seguono.

Includo a questo post una serie di sketch tutti tratti dal reference di Arduino e riadattati per un uso con il modulo PCF8574T in modo da accelerare le attività di sperimentazione dei miei allievi.

Il funzionamento di ogni esempio è dettagliato con commenti all’interno degli sketch.

/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 1: scrittura testo su due righe
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------
void setup()
{
  lcd.begin();      // inizializzazione dell'LCD
  lcd.backlight();  // attivazione della retroilluminazione
}
//-----------------------------


void loop()
{
  lcd.setCursor(2,0);
  lcd.print("Ciao Ragazzi");
  lcd.setCursor(0,1);
  lcd.print("Io sono EduRobot");
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 2: noBlink - Blink
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------
void setup()
{
  lcd.begin();      // inizializzazione dell'LCD
  lcd.backlight();  // attivazione della retroilluminazione
}
//-----------------------------

void loop() {
  // Turn off the blinking cursor:
  lcd.noBlink();
  delay(3000);
  // Turn on the blinking cursor:
  lcd.blink();
  delay(3000);
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 3: noDisplay - Display
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------
void setup()
{
  lcd.begin();      // inizializzazione dell'LCD
  lcd.backlight();  // attivazione della retroilluminazione
  lcd.print("EduRobot");
}
//-----------------------------

void loop() {
  // disattiva il display
  lcd.noDisplay();
  delay(500);
  // attiva il display
  lcd.display();
  delay(500);
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 4: scrollDisplayLeft() - scrollDisplayRight()
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------
void setup()
{
  lcd.begin();      // inizializzazione dell'LCD
  lcd.backlight();  // attivazione della retroilluminazione
  lcd.print("EduRobot");
  delay(1000);
}
//-----------------------------

void loop() {
  // sposta di 8 posizioni (lunghezza della tringa: EduRobot) a sinistra
  for (int positionCounter = 0; positionCounter < 8; positionCounter++) {
    // per far percepire la variazione di posizione del testo mettiamo in pausa per un breve istante
    lcd.scrollDisplayLeft();
    // aspetta un momento:
    delay(150);
  }

  // sposta di 24 posizioni (lunghezza della tringa + lunghezza del siplay(n. colonne)) a destra
  for (int positionCounter = 0; positionCounter < 24; positionCounter++) {
    // sposta di una posizione a destra
    lcd.scrollDisplayRight();
    // per far percepire la variazione di posizione del testo mettiamo in pausa per un breve istante
    delay(150);
  }

  // sposta di 24 posizioni (lunghezza della tringa + lunghezza del siplay(n. colonne)) a sinistra
  // to move it back to center:
  for (int positionCounter = 0; positionCounter < 24; positionCounter++) {
    // sposta di una posizione a sinistra
    lcd.scrollDisplayLeft();
    // per far percepire la variazione di posizione del testo mettiamo in pausa per un breve istante
    delay(150);
  }

  // al termine di un ciclo di uno spostamento destra e sinistra
  // attesa di 1 secondo
  delay(1000);
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 5: Serial Input
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------
void setup()
{
  lcd.begin();        // inizializzazione dell'LCD
  lcd.backlight();    // attivazione della retroilluminazione
  Serial.begin(9600); // inizializzazione della porta seriale
}
//-----------------------------


void loop() {
  // quando un carattere viene inviato alla serial monitor...
  if (Serial.available()) {
    // attende un momento prima di inviare il testo sulla seril monitor
    delay(100);
    // cancella lo schermo
    lcd.clear();
    // legge tutti i caratteri disponibili sulla seriale
    while (Serial.available() > 0) {
      // visualizza i caratteri sul display
      lcd.write(Serial.read());
    }
  }
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 6: setCursor()
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------

const int numRows = 2;
const int numColonne = 16;

void setup()
{
  lcd.begin();        // inizializzazione dell'LCD
  lcd.backlight();    // attivazione della retroilluminazione
}
//-----------------------------


void loop() {
  // stampa in loop i caratteri ASCII da 'a' a 'z':
  for (int lettera = 'a'; lettera <= 'z'; lettera++) {
    // ciclo per le colonne
    for (int  riga = 0; riga < numRows; riga++) {
      // ciclo per le righe
      for (int colonna = 0; colonna < numColonne; colonna++) {
        // imposta la posizione del cursore
        lcd.setCursor(colonna, riga);
        // stama il carattere
        lcd.write(lettera);
        delay(200);
      }
    }
  }
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 7: leftToRight() - rightToLeft()
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------

int lettera = 'a';

void setup()
{
  lcd.begin();        // inizializzazione dell'LCD
  lcd.backlight();    // attivazione della retroilluminazione
  lcd.cursor();       // attiva il cursore
}
//-----------------------------


void loop() {
  // cambia direzione (da destra a sinistra)
  // quando l'ultima lettera stampata è la 'm':
  if (lettera == 'm') {
    // sposta il cursore a destra per stampare la lettera successiva
    lcd.rightToLeft();
  }
  // cambia direzione (da sinistra a destra)
  // // quando l'ultima lettera stampata è la 's':
  if (lettera == 's') {
    // sposta il cursore a sinistra per stampare la lettera successiva
    lcd.leftToRight();
  }
  // reset quando atriviamo alla 'z':
  if (lettera > 'z') {
    // spostare il cursore a (0,0):
    lcd.home();
    // ricomincia dalla posizione 0
    lettera = 'a';
  }
  // stampa il carattere
  lcd.write(lettera);
  // aspetta un secondo
  delay(1000);
  // incrementa la lettera
  lettera++;
}

Buona sperimentazione 🙂