IOT – Arduino (project 1)

QUÈ FAREM?

Cada cop que es toqui el braçalet que fabricarem amb materials reciclats, enviarem un emoji a través de Telegram.

OBJECTIUS

  • Fer servir bots de Telegram
  • Utilitzar sensors
  • Crear un producte IOT, fent servir el WiFi

MATERIALS

  • Telegram
  • MKR1000 Board
  • Protoboard
  • Paper d’alumini
  • Brunzidor
  • Resistència de 5MΩ (1 Mega = 1.000.000)
  • Cables

CHAT BOT

Telegram és una aplicació de missatgeria molt popular per a mòbils i per l’ordinador. Un dels serveis que ofereix Telegram és de chat-bot. Un chat-bot és un progama amb el cual pots xatejar.

Per poder-lo fer servir al nostre projecte, haurem de descarregar la llibreria TelegramBot library per Arduino, per tal de poder implementar aquest tipus de programa a la nostra placa.

Al nostre mòbil o ordinador crearem el nostre bot seguint els següents pasos:

  1. Busquem el bot @BotFather
  2. Escribim /newbot per crear un nou bot de Telegram
  3. Escribim el nom del vostre bot. Nom recomanat: MKR
  4. Escribim un nom d’usuari pel nostre bot. El nom ha d’acabar en «bot». Exemple: MKRThaisbot
  5. Copiem l’API del nostre bot

PREPAREM LA PLACA

Abans de res, haurem d’instal·lar totes aquestes llibreries:

COM INSTAL·LAR UNA LLIBRERIA DESCARREGADA EN .ZIP

Les llibreries sovint es distribueixen com a fitxerZIP. El nom de la carpeta és el nom de la llibreria. A l’interior de la carpeta hi haurà un fitxer .cpp, un fitxer .h i sovint un fitxer keywords.txt, una carpeta d’exemples i altres fitxers requerits per la biblioteca. 

No descomprimiu la llibreria descarregada, deixeu-la com és. A l’Arduino IDE, aneu a Sketch> Include Library> Afegeix .ZIP Library.

Torna al menú Sketch > Include Library. Hauríes de veure la llibreria al final de la llista de llibreries. Ja la pots inserir al teu programa.

ACTUALITZEM EL FIRMWARE DE LA PLACA

Un cop ja tenim la llibreria del WiFi101 inserida, actualitzem el firmware:

Connecta la placa al PC.

Anem a Archivos>Ejemplos>WiFi101>FirmwareUpdater

Puja el programa a la placa.**

** Recorda sel·leccionar la placa a Herramientas>Placa. Si no surt la placa MKR, clica a Boards Manager i instal·la el paquet Arduino SAMD Boards.

Clica en Tools i sel·lecciona «WiFi101 Firmware Updater» del menú desplegable.

Afegeix el domini api.telegram.org i puja’l a la placa.

ECHOBOT

Obre l’exemple EchoBot de la llibreria de TelegramBot, omple els credencials de la xarxa WiFi i escriu l’API que has copiat del BotFather.

Puja el programa a la placa.

Acabes de crear un Bot que copia tots els missatges que l’escriguis!

Ara prova d’enviar un emoji. Què és el que pasa?

El bot no pot reproduir l’emoji però sí que escriu un equivalent codificat. Això és perquè la via en que el bot rep l’emoji no és la mateixa que fa servir per rebre-la. Per poder enviar emojis haurem de fer servir caràcters UNICODE.

Per exemple, per enviar un cor farem servir \U00002764 *

Podeu veure la llista d’emojis en format unicode aquí.

*El codi a copiar son els 4 digits, a posar darrere de U0000.

Aquest és el programa que hauríem de fer servir en cas de voler que el bot respongui amb l’eco d’un cor:

void loop() { 
   message m = bot.getUpdates(); // Read new messages 
   if ( m.chat_id != 0 ){ // Check if there are some updates 
     Serial.println(m.text); // print the message received 
     if(m.text == "u2764ufe0f"){ //check if it received an heart emoji 
     bot.sendMessage(m.chat_id, "\U00002764");  
    // Reply to the same chat with the heart emoji 
     } 
   } 
} 

Afegeix aquest codi al teu programa del Echobot.

El resultat hauria de ser:

SENSOR CAPACITATIU

Ara crearem el nostre propi sensor capacitatiu.

La llibreria CapacitiveSensor converteix dos o més pins d’Arduino en un sensor capacitiu, que pot detectar la capacitat elèctrica del cos humà. Tota la configuració del sensor requereix una resistència de mitjà a alt valor i una peça de paper d’alumini.

Carregueu el programa exemple, connecteu els cables i vegeu el resultat a la consola:

#include <CapacitiveSensor.h> 
CapacitiveSensor   foil = CapacitiveSensor(5,4);        
// 10M resistor between pins 5 & 4, pin 4 is sensor pin, add a wire and or foil
void setup()                     
{ 
  foil.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate  
  Serial.begin(9600); 
} 
void loop()                     
{ 
   long start = millis(); 
   long sensor_value =  foil.capacitiveSensor(30); 
   Serial.print(millis() - start);        // check on performance in milliseconds 
   Serial.print("\t");                    // tab character for debug windown spacing 
   Serial.print(sensor_value);            // print sensor output  
   Serial.println("\t");                    // print sensor output 3 
   delay(500);                             // arbitrary delay to limit data to serial port  
} 

 

EL BATEC DEL COR

Com més toquem la pulsera, més batecs del cor escoltareu. Com més batecs, més emojis que enviarem.

A més, imitarem el so d’un batec del cor amb un brunzit i algunes línies simples de codi.

int Buzzer = 8; // Pin attached to the buzzer 
void setup(){} 
void loop(){ 
 HeartBeat(); 
 delay(1000); 
} 
void HeartBeat(){ 
   tone(Buzzer, 31, 200); // tone(Pin, Note, Duration); 
   delay(200); 
   tone(Buzzer, 31, 400); 
   delay(200); 
   noTone(Buzzer);  
   delay(1000); 
} 

PROBLEMES AMB EL WIFI

El Wi-Fi pot ser com,,,,,plicat. De vegades s’apaga durant uns pocs segons sense cap motiu i això podria suposar un problema perquè executem la funció de connexió WiFi només al principi del sketch.

Els serveis en línia també poden ser difícils. Quan l’Arduino envia una sol·licitud a un servidor (Telegram en aquest cas), espera una resposta. Per centenars de motius, una resposta pot NO arribar, deixant l’Arduino en un bucle infinit.

Per fer que el vostre projecte sigui més estable, podeu afegir un control de verificació.

Un control de verificació (watchdog) és un temporitzador que ha de ser actualitzat periòdicament, en cas contrari es reiniciarà el programa.

Podeu utilitzar aquestes dues llibreries per afegir un control de verificació al vostre projecte:

ASF Core s’ha de descarregar e instal·lar manualment.

L’exemple de l’Echobot quedaria així:

#include <WiFi101.h> 
#include <SPI.h> 
#include <TelegramBot.h> 
#include <Adafruit_SleepyDog.h>  
// Initialize Wifi connection to the router 
char ssid[] = "xxxx";             // your network SSID (name) 
char pass[] = "yyyy";           // your network key 
// Initialize Telegram BOT 
const char BotToken[] = "xxxx"; 
WiFiSSLClient client; 
TelegramBot bot (BotToken, client); 
void setup() { 
 Serial.begin(115200); 
 while (!Serial) {} 
 delay(3000); 
 // attempt to connect to Wifi network: 
 Serial.print("Connecting Wifi: "); 
 Serial.println(ssid); 
 while (WiFi.begin(ssid, pass) != WL_CONNECTED) { 
   Serial.print("."); 
   delay(500); 
 } 
 Serial.println(""); 
 Serial.println("WiFi connected"); 
 bot.begin(); 
 Watchdog.enable(10000); // set the timer to 10 sec 
} 
void loop() { 
   Watchdog.reset(); // if this function is not called within 10 seconds the board will reset itself 
   message m = bot.getUpdates(); // Read new messages 
   if ( m.chat_id != 0 ){ // Checks if there are some updates 
     Serial.println(m.text); 
     bot.sendMessage(m.chat_id, m.text);  // Reply to the same chat with the same text 
   } else { 
     Serial.println("no new message"); 
   } 
} 

PROJECTE ACABAT

Alguna cosa no funciona o t’has perdut combinant l’EchoBot amb el sensor capacitatiu?

Revisa el programa complet.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.