Braccio Tinkerkit Arduino

Obiettivo:

Pilotare il braccio robotico Tinkerkit tramite Arduino e 2 Joystick

Componenti elettronici:

Teoria:

Alla base di questa esercitazione c’è il braccio robotico TinkerKit.

Braccio TinkerKit
https://store.arduino.cc/products/tinkerkit-braccio-robot
Braccio TinkerKit
https://store.arduino.cc/products/tinkerkit-braccio-robot

Il TinkerKit Braccio è un braccio robotico completamente operativo, controllato tramite Arduino. Può essere assemblato in diversi modi per realizzare più attività come lo spostamento di oggetti, il movimento di pannelli, fotocamere o cellulari.

Braccio TinkerKit
Braccio TinkerKit

La scheda del braccio deve essere alimentare tramite la connessione jack con l’alimentatore da 5 VDC @ 4000 mA fornito nella confezione.

Nella confezione sono presenti:

  • Plastic Parts x 21
  • Screws x 63
  • Flat Washer x 16
  • Hexagon Nut x 7
  • Springs x 2
  • Servo Motors: 2 x SR 311, 4 x SR 431
  • Arduino compatible Shield x 1
  • Power Supply 5V, 4A x 1
  • Phillips Screwdriver x 1
  • Spiral Cable Protection Wrap x 1

Per pilotare la scheda dei driver del Braccio è necessario scaricare la libreria da questo link: https://github.com/bcmi-labs/arduino-library-braccio

Installazione Shield TinkerKit sopra Arduino
Braccio TinkerKit scheda pilotaggio servomotori
Braccio TinkerKit datasheet scheda pilotaggio servomotori

Schema connessione Joystick a shield servomotori:

Connessione Joystick

Alcune immagini rappresentative del funzionamento del Braccio:

Posizione iniziale di sicurezza
Posizione iniziale di sicurezza
Connessione dei Joystick
Connessione dei Joystick
Base a 0°
Base a 0°
Base a 180°
Base a 180°
Spalla 15° (Shoulder)
Spalla 15° (Shoulder)
Spalla 165° (Shoulder)
Spalla 165° (Shoulder)
Gomito 0° (Elbow)
Gomito 0° (Elbow)
Gomito 180° (Elbow)
Gomito 180° (Elbow)
Polso 0° (Wrist)
Polso 0° (Wrist)
Polso 180° (Wrist)
Polso 180° (Wrist)
Polso / Mano 180° (Wrist / Gripper)
Polso / Mano 180° (Wrist / Gripper)
Polso / Mano 180° (Wrist / Gripper)
Polso / Mano 180° (Wrist / Gripper)
Mano 73° (Gripper)
Mano 73° (Gripper)
Mano 10° (Gripper)
Mano 10° (Gripper)

Funzionamento:

Il Braccio è costituito da 6 Servo Motori di conseguenza 2 Joystick (2 assi + 1 bottone per joystick) non basterebbero per pilotare tutti gli assi.

 Si è optato quindi per il pilotaggio dei motori da 1 a 4 tramite gli assi (potenziometri collegati agli ingressi analogici di Arduino) del joystick mentre per la rotazione della mano nei due sensi sono utilizzati i pulsanti dei due joystick connessi ai pin 1 e 2 di Arduino (ingressi I/O in configurazione INPUT_PULLUP).

Rimane la chiusura e apertura della gripper (mano), per fare questo invece si è optato al cambio di stato apertura-chiusura e chiusura-apertura tramite la pressione contemporanea dei pulsanti dei joystick.

Ricordarsi di queste informazioni, limiti di rotazione dei servomotori, per non rovinare il Braccio:

  • M1=base (base) degrees. Allowed values from 0 to 180 degrees
  • M2=shoulder (spalla) degrees. Allowed values from 15 to 165 degrees
  • M3=elbow (gomito) degrees. Allowed values from 0 to 180 degrees
  • M4=wrist (polso) vertical degrees. Allowed values from 0 to 180 degrees
  • M5=wrist rotation degrees. Allowed values from 0 to 180 degrees
  • M6=gripper degrees. Allowed values from 10 to 73 degrees. 10: the gripper (pinza) is open, 73: the gripper is closed.

Codice:






Pilotare le uscite GPIO di Raspberry tramite Server TCP/IP sviluppato in Java e client Android

Obiettivo: Accendere e spegnere tre LED tramite Raspberry via Server Java TCP/IP e Client Android.

Pilotare le uscite GPIO di Raspberry tramite Server TCP/IP sviluppato in Java e client Android

Componenti:

  • Raspberry Pi 3 Model B+ oppure Raspberry Pi 4
    Model B+
  • N.1 LED Rosso
  • N.1 LED Giallo
  • N.1 LED Verde
  • N.3 resistenze da 220 ohm

Teoria:

Alla base di questa esercitazione c’è Raspberry e la
libreria Pi4J.

Raspberry Pi 3 Model B+ è la versione finale della famiglia Raspberry Pi 3 (https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/).

Queste le caratteristiche:

  • Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz
  • 1GB LPDDR2 SDRAM
  • 4GHz and 5GHz IEEE 802.11.b/g/n/ac wireless LAN, Bluetooth 4.2, BLE
  • Gigabit Ethernet over USB 2.0 (maximum throughput 300 Mbps)
  • Extended 40-pin GPIO header
  • Full-size HDMI
  • 4 USB 2.0 ports
  • CSI camera port for connecting a Raspberry Pi camera
  • DSI display port for connecting a Raspberry Pi touchscreen display
  • 4-pole stereo output and composite video port
  • Micro SD port for loading your operating system and storing data
  • 5V/2.5A DC power input
  • Power-over-Ethernet (PoE) support (requires separate PoE HAT)

Raspberry Pi 4 Model B è l’ultima versione di Raspberry (https://www.raspberrypi.org/products/raspberry-pi-4-model-b/).

Queste le caratteristiche:

  • Processore
    1.5GHz quad-core 64-bit ARM Cortex-A72 CPU ( about 3x performance)
  • 1GB,
    2GB o 4GB di LPDDR4 SDRAM
  • Gigabit
    Ethernet
  • Dual-band
    802.11ac wireless rete
  • Bluetooth
    5.0
  • 2
    porte USB 3.0 e 2 porte USB 2.0
  • Supporto
    dual monitor, con risoluzione fino a 4K
  • VideoCore
    VI Graphics supporta OpenGL ES 3.x
  • 4Kp60
    hardware decode di HEVC video
  • Compatibilità
    con i precedenti prodotti Raspberry Pi

Ed infine la libreria to Pi4J (https://pi4j.com/1.2/index.html).

Questa
libreria ha lo scopo di fornire un’API di I/O orientata agli oggetti implementata
per i programmatori Java per accedere alle funzionalità di I/O complete della
piattaforma Raspberry Pi. Questo progetto astrae l’integrazione nativa di basso
livello e il monitoraggio degli interrupt per consentire ai programmatori Java
di concentrarsi sull’implementazione della logica di business dell’applicazione.

Come funziona il progetto:

Il progetto è suddiviso in 2 gruppi, il server e il client.

Il server viene realizzato tramite Raspberry sul quale viene
fatto girare il Server TCP/IP Multithreading.

Il server in base a semplici comandi tipo “ON RED”, “OFF RED”,
“BLINK RED”, “ON YELLOW”, “OFF YELLOW”, “BLINK YELLOW”, “ON GREEN”, “OFF GREEN”,
“BLINK GREEN” tutti ovviamente senza virgolette, accende, spegne e fa
lampeggiare i vari LED collegati alle porte GPIO di Raspberry.

Il client invece è realizzato tramite Android Studio.

Il client ha una Activity contenente due Editbox per
digitare l’indirizzo IP e la porta di funzionamento del server e 11 bottoni in
grado di eseguire la connessione, accendere, spegnere, far lampeggiare i LED e
disconnettersi dal server.

È possibile anche utilizzare Putty da un qualsiasi PC, connettersi in modalità RAW all’indirizzo di Raspberry e alla porta 1050.

Schema di funzionamento

Schema Server:

Schema di collegamento di Raspberry ai LED
Piedinatura delle GPIO di Raspberry

Schermata Client:

Codice Sorgente:

Istruzioni installazione PI4J scrittura Server, compilazione ed esecuzione

Download Server TCP/IP Java

Download Client Android

Istruzioni per eseguire il server all’accensione di Raspberry come servizio




Creare un richiamo per Birdwatching tramite Arduino e lettore MP3 DFPlayer Mini

Obiettivo: Far suonare dei file MP3 di versi di uccelli tramite Arduino e lettore MP3 DFPlayer Mini visualizzando il numero della traccia su un display TM1637 e il nome il volume e lo stato su un display LCD 16×2 I2C con possibilità di cambiare la traccia tramite telecomando IR

Creare un richiamo per Birdwatching tramite Arduino

Componenti:

  • Arduino UNO
  • 1 DFPlayer Mini
  • 1 TM1637
  • 1 Display LCD 16×2 I2C
  • 1 Trasmettitore IR
  • 1 Ricevitore IR

Teoria:

Alla
base di questa esercitazione c’è il modulo DFPlayer Mini

Sul sito del produttore è possibile studiare le principali informazioni che permettono di utilizzare in modo semplice il lettore.

Si possono notare il pinout a 16 pin di collegamento, necessario per interconnettere il DFPlayer mini a pulsanti per essere utilizzato senza microcontrollore, le alimentazioni, le uscite DAC per essere collegato ad un amplificatore esterno, e le uscite dirette ad un altoparlante.

Caratteristiche del modulo:

  • Frequenze di campionamento supportate (kHz): 8 /
    11.025 / 12/16 / 22.05 / 24/32 / 44.1 / 48
  • Uscita DAC a 24 bit, supporto per gamma dinamica
    90 dB, supporto SNR 85 dB
  • Supporta pienamente FAT16, file system FAT32,
    supporto massimo 32G della scheda TF, supporto 32G di disco U, 64M byte
    NORFLASH
  • Vasta varietà di modalità di controllo, modalità
    di controllo I/O, modalità seriale, modalità di controllo tramite pulsanti
  • Funzione di attesa sonora pubblicitaria, la
    musica può essere sospesa. quando la pubblicità è finita nella musica continua
  • Dati audio ordinati per cartella, supporta fino
    a 100 cartelle, ogni cartella può contenere fino a 255 canzoni
  • 30 livelli di volume regolabile, 6 livelli EQ
    regolabili

Modalità di controllo

Sempre sul sito del produttore sono possibili vedere le tre modalità di funzionamento del lettore DFPlayer Mini che sono: Modalità Seriale, AD KEY Mode, I/O Mode.

Noi utilizzeremo la Modalità Seriale per interconnettere Arduino al modulo DFPlayer Mini e al tempo stesso utilizzare anche altri moduli quali Diplay LCD I2C 16×2, Display TM1637, Ricevitore IR

Una nota aggiuntiva deve essere anche posta al ricevitore IR che ci permetterà di acquisire il codice dal trasmettitore IR in grado di far avviare il file MP3 desiderato, spostandoci tra i file MP3, avendo la possibilità di mettere in pausa e in play il suono, alzare e abbassare il volume.

Cosa sono gli Infrarossi

La
radiazione infrarossa è una forma di luce simile alla luce che vediamo tutto
intorno a noi. L’unica differenza tra la luce IR e la luce visibile è la
frequenza e la lunghezza d’onda. La radiazione infrarossa si trova al di fuori
della gamma della luce visibile, quindi gli esseri umani non possono vederla.

Poiché l’infrarosso è un tipo di
luce, la comunicazione IR richiede una linea visiva diretta dal ricevitore al
trasmettitore quindi non è possibile trasmettere attraverso muri o altri
materiali come WiFi o Bluetooth.

Un tipico sistema di
comunicazione a infrarossi richiede un trasmettitore IR e un ricevitore IR. Il
trasmettitore ha l’aspetto di un LED standard, tranne per il fatto che produce
luce nello spettro IR invece che nello spettro visibile. Se si osserva la parte
anteriore del telecomando di un televisore, si vedrà il LED del trasmettitore
IR.

Il ricevitore IR è un fotodiodo e un preamplificatore che converte la luce IR in un segnale elettrico. I diodi del ricevitore IR in genere hanno questo aspetto:

Nel nostro caso è stato usato questo modulo preso nei soliti KIT per Arduino:

Schema elettronico

Preparazione Scheda MicroSD

La MicroSD card potrà essere di dimensioni massime di 32Gb è deve essere formattata con filesystem Fat16 o Fat32 oppure se possedete un Mac OS X, selezionare ExFat e poi puoi copiare i file MP3 che desiderate.
E’ conveniente che i file audio siano numerati per definirne l’ordine di esecuazione prograssiva. Al termine del trasferimento, si potrà estrarre la SD Card dal computer per puoi inserla nel DFPlayer mini.

Micro SD
Struttura della MicroSD

Codice sorgente






Come utilizzare Android Explore IoT Kit con visualizzazione dati sul cloud

Obiettivo: Realizzare il primo sketch in grado di visualizzare dati sul Cloud

Come utilizzare Android Explore IoT Kit con visualizzazione dati sul cloud

Componenti:

  • Arduino MKR1010
  • MKT IoT Carrier, che a sua volta include:
    Sensore di temperatura
    Sensore di umidità
  • Cavo Micro USB

Link:


https://www.arduino.cc/
https://www.arduino.cc/education
https://create.arduino.cc/iot/things
https://create.arduino.cc/iot/dashboards/
https://create.arduino.cc/iot/dashboards/devices
https://create.arduino.cc/editor/




Arduino Explore IoT Kit

Obiettivo: Unboxing del kit Educational di Arduino Explorer IoT Kit

Componenti:

  • Arduino MKR1010
  • MKT IoT Carrier, che a sua volta include:
    2 relé 24V
    Slot scheda SD
    5 pulsanti touch
    Connettori plug-and-play per diversi sensori
    Sensore di temperatura
    Sensore di umidità
    Sensore di pressione
    Sensore UV
    Accelerometro
    Display RGB 1.20″
    Slot per batteria ricaricabile Li-Ion 18650
    5 LED RGB
  • Cavo Micro USB
  • Sensore di umidità
  • Sensore a infrarossi passivo
  • Cavi plug-and-play per tutti i sensori
  • Accesso ad Arduino Create, una piattaforma online integrata che consente di scrivere codice, accedere a contenuti, configurare schede e condividere progetti
  • Accesso alla piattaforma online dedicata con tutte le informazioni, le attività e i contenuti per usare il kit
  • 10 lezioni hands-on passo-passo, che coprono tutti gli aspetti fondamentali legati all’IoT:
    Hardware
    Rete
    Algoritmi e programmazione
    Sicurezza
    Gestione dei dati
  • 10 sfide aperte

Link:


https://store.arduino.cc/explore-iot-kit
https://www.campustore.it/arduino-education-explore-iot-kit.html




Real Time Clock per Arduino

Obiettivo: Scrivere e poi leggere l’ora e la data da una scheda RTC Real Time Clock.



Componenti elettronici:

  • Arduino UNO
  • 1 TinyRTC con chip DS1307 (link1link2)

TeoriaAlla base di questa esercitazione c’è il modulo TinyRTC con chip DS1307 ed EEPROM: 24C32 32K I2C con interfaccia I2C.

Caratteristiche Hardware

  • Chip RTC: DS1307
  • Memoria EEPROM: 24C32 32K I2C
  • Comunicazione: I2C (possibilità di collegare altri dispositivi I2C in cascata)
  • Batteria di backup supportata (NON inclusa): LIR2032
  • Ciclo di funzionamento del modulo (a piena carica): 1 anno
  • Dimensioni: 28 x 28 x 9mm
  • Peso: 4g

Se avete bisogno nei vostri progetti di un sistema per la
gestione di data e orario questa scheda è quello che fa per voi.

Per utilizzare tale scheda viene utilizzata la libreria RTClib.h

Tramite tale libreria è possibile settare nella funzione di setup la data e l’ora personalizzata (riga codice n.25), oppure quella di compilazione (riga codice n.22) , la prima volta che si carica il codice in Arduino, in modo tale che la scheda TinyRTC si configuri con un orario e data opportuni, poi si deve ricaricare lo stesso sketch commentando la riga di codice (n.22 o n.25).

Da questo momento in poi Arduino sarà in grado di utilizzare
un orologio real time in grado di gestire ore, minuti, secondi, anni, mesi e
giorni!

Collegamento Circuitale:

Collegamento Circuitale

Codice






Leggere informazioni dal GPS BN-880 o uBlox M8N

Obiettivo:

Leggere tutte le informazioni provenienti dal GPS BN-880 utilizzando la libreria TinyGPS++

Video:



Componenti elettronici:

Teoria:

Alla base di questa esercitazione c’è il modulo GPS Baitian BN-880, ma andrebbe benissimo anche un modulo uBlox NEO-7M o M8N o equivalenti.

Il modulo in oggetto oltre ad avere integrato il GPS,
oggetto dell’esercitazione, ha anche integrato una bussola (compass) HMC5883l comunicante
tramite il bus/protocollo I2C.

Ecco alcune caratteristiche:

  • Inexpensive,
    light, Dual Mode GPS and GPS/Compass using UBLOX M8N module
  • Receiving
    Format: GPS, GLONASS, Galileo, BeiDou, QZSS and SBAS
  • Frequency:
    GPS L1,GLONASS L1,BeiDou B1,SBAS L1,Galileo E1
  • Channels: 72
  • Data Protocol: NMEA-0183 or UBX, Default
    NMEA-0183
  • Single GNSS: 1Hz-18Hz
  • Concurrent GNSS: 1Hz-10Hz
  • Compass IC: HMC5883L

Il sistema GPS (Global Positioning System):

GPS sta per Global Positioning System cioè un Sistema di Posizionamento Globale, la cui funzione primaria è quella di determinare con precisione la posizione sul pianeta Terra di un ricevitore (come ad esempio uno smartphone o un apparecchio dedicato). Il ricevitore GPS riceve continuamente segnali da lontani satelliti in orbita attorno alla Terra. Attorno alla Terra, a circa 20.200 km di altitudine, orbitano 31 satelliti del sistema GPS. Ogni satellite ha al suo interno un precisissimo orologio atomico. Ogni satellite invia continuamente un segnale radio contenente la sua posizione, e l’orario di trasmissione del segnale. Il ricevitore GPS confronta questi segnali, e tramite alcune equazioni riesce a stabilire la sua posizione.

Il pallino rosso è il ricevitore GPS. Alle ore 12:00 tutti i
satelliti GPS inviano un segnale che dice “io mi trovo nella posizione XYZ, e
sono le 12:00”. Poiché i satelliti hanno distanze diverse dal ricevitore, il
segnale “io mi trovo nella posizione XYZ, e sono le 12:00” arriva al ricevitore
in momenti diversi: quello del satellite 4 arriva per primo; poi quello del
satellite 2; poi 3; e poi 1. Sapendo quanto ci ha messo il segnale ad arrivare,
e quindi la distanza fra il ricevitore e i vari satelliti, il ricevitore GPS,
con una relativamente semplice triangolazione, riesce a stimare la propria
posizione sul pianeta Terra.

Che cosa trasmette il modulo GPS:

Il modulo GPS trasmette tramite Seriale TTL (0-5 Volt) delle
“sentenze” tramite il protocollo NMEA0183.

NMEA 0183 (o più comunemente NMEA) è uno standard di comunicazione di dati utilizzato soprattutto in nautica e nella comunicazione di dati satellitari GPS. L’ente che gestisce e sviluppa il protocollo è la National Marine Electronics Association. Questo protocollo si basa sul principio che la fonte, detta talker, può soltanto inviare i dati (sentences) e la ricevente, detta listener, può soltanto riceverli.

Ad esempio la seguente sentenza $GGA trasmette tantissime
informazioni oltre alla Latitudine e Longitudine:

Tramite
la libreria TinyGPS++ è possibile intercettare tutti i tipi di sentenze GPS e
inoltre nell’ultima versione anche di elaborare le sentenze particolari, ad
esempio prelevate da altre fonti NMEA0183.

Schema Elettronico (Fritzing):

Codice:






Pilotare un Servo Motore tramite Potenziometro

Obiettivo: Ruotare un Servo Motore tramite un potenziometro



Pre-requisiti


Il Servomotore


Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Servomotore
  • 1 Potenziometro

TeoriaIl Servomotore è uno particolare tipo motore ampiamente utilizzato sia in contesti industriali sia nell’ambito del modellismo. Nel dettaglio, il servomotore è impiegato in tutte le applicazioni che prevedono il controllo della posizione di in motore in corrente continua ed il raggiungimento di un determinato angolo in modo preciso indipendentemente dalla posizione iniziale. Le caratteristiche principali del servomotore sono:

Come già accennato, i servo
motori sono dispositivi molto utilizzati in svariati ambiti perché permettono
la rotazione del proprio albero in base ad un angolo prestabilito.

I servomotori sono stati utilizzati per la prima volta nel mondo del modellismo RC, generalmente per controllare lo sterzo delle auto RC o i flap su un aereo RC o per aprire botole su un drone. Con il tempo, hanno trovato il loro uso anche nella robotica, nell’automazione e in svariati progetti Arduino.

Solitamente l’albero può ruotare da 0 a 180 gradi e usando Arduino, possiamo dire a un servo di andare in una posizione specificata

In questo tutorial vedremo come interconnettere il servo motore ad Arduino e come farlo ruotare tramite un potenziometro con pochissime istruzioni.

Collegamento Circuitale:

Risultato:

Codice: