Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Pager bidirectionnel à l'ancienne avec Arduino

Composants et fournitures

Carte SIM Hologram Global IoT
× 1
Arduino UNO
× 1
Arduino GSM shield V2
× 1
Kit de protection LCD Adafruit avec affichage 16x2 caractères - Seulement 2 broches utilisé! - BLEU ET BLANC
× 1
Hammond Project Box 4,7 x 2,6 x 1,4 bleu translucide
× 1

Applications et services en ligne

Routeur de données hologramme

À propos de ce projet

Présentation

Cherchant à recréer la gloire de la fin des années 90 et du début des années 2000, j'ai pensé que j'essaierais de créer mon propre téléavertisseur bidirectionnel, tout comme Jay-Z l'utilisait auparavant ! Mais j'ai trouvé cette idée plus utile qu'à première vue - je l'ai conçue pour qu'elle puisse être utilisée par les enfants à la place d'un vrai téléphone portable, ou qu'elle puisse être utilisée comme bouton « SOS » pour quelqu'un qui travaille seul à l'extérieur. ou même faire de l'exercice (si c'était un peu plus petit). Et depuis quelques semaines, cet appareil est toujours allumé dans mon salon où ma femme et moi nous laissons des messages idiots.

Résumé :Ce projet envoie et reçoit des messages texte (SMS) via un arduino avec modem cellulaire intégré dans un petit boîtier avec un écran LCD et des boutons de commande simples.

Notez que le code de ce projet inclut la possibilité d'exécuter le système à partir de l'interface série afin que vous puissiez créer et utiliser une version de ce projet même si vous n'avez pas de bouclier LCD !

Sélection du matériel

J'avais un Arduino GSM Shield que je voulais utiliser avec ce projet avec une carte SIM d'Hologram, donc combiner avec un Arduino UNO m'avait beaucoup plu. Adafruit fabrique un écran LCD avec des boutons intégrés, et parce qu'il utilise le bus I2C, il n'utilise que deux broches sur l'Arduino pour l'affichage et cinq boutons, laissant beaucoup de place pour une personnalisation future.

L'écran LCD a une belle couleur de fond bleu, alors j'ai pensé que le combiner avec un boîtier bleu translucide aurait l'air bien. L'empilement des trois cartes les unes sur les autres a permis d'obtenir des connexions très propres et n'a posé aucun problème électriquement car les deux blindages utilisent des broches différentes l'une de l'autre.

  • Bouclier LCD : broches analogiques 4 et 5 pour le bus I2C (avec alimentation +5 V et masse [mais uniquement la masse à côté de la broche Vin, pas celle à côté de la broche 5 V])
  • Bouclier GSM : broches 2 et 3 pour la série logicielle et broche 7 pour la réinitialisation de l'alimentation (plus l'alimentation et la masse évidemment, même si je n'ai jamais vu de détails à ce sujet dans la documentation)

Tout le reste est libre de s'étendre encore ! D'autres appareils pourraient même encore être ajoutés au bus I2C.

Pendant le développement, le système fonctionnait correctement avec l'alimentation USB de mon ordinateur portable pour l'envoi et la réception de SMS, même si je pense qu'il aura besoin de plus d'énergie pour utiliser les données cellulaires GPRS de manière fiable.

Communication cellulaire

Hologram fournit un service de données cellulaires qui fonctionne avec tout appareil acceptant une carte SIM. Après avoir enregistré ma carte SIM pour le service, d'un simple clic supplémentaire, j'ai pu lui attribuer un numéro de téléphone dans l'indicatif régional de mon choix. Une autre caractéristique qui rend ce projet génial en tant que communicateur pour enfants, par exemple, est qu'il est si peu coûteux de garder le service actif (0,40 $/mois) et que je peux le suspendre à tout moment si j'arrête d'utiliser l'appareil. Comme la plupart des forfaits de téléphonie mobile, la réception de SMS est gratuite et l'envoi coûte 0,19 $ chacun. À l'avenir, ce coût peut être encore réduit en utilisant une connexion de données au service cloud d'Hologram où un message peut être automatiquement acheminé vers un service SMS gratuit. 0,60 $ pour un mégaoctet de données vous permettra d'obtenir de nombreux petits messages texte.

Pour une raison quelconque, même si le bouclier GSM fonctionnait finalement correctement, il n'exécuterait pas correctement le GSMScanner et GSMModem getIMEI() fonctions conçues pour la configuration initiale et le dépannage. Assez trompeur ! Les fonctions de données SMS et GPRS ont bien fonctionné, donc si quelqu'un sait pourquoi le modem ne peut toujours pas me dire son propre numéro IMEI, j'aimerais entendre vos idées.

Code et interface

Adafruit a d'excellentes instructions pour montrer le bouclier LCD en action et Arduino a un bon guide de démarrage pour le bouclier GSM qui présente les fonctions importantes, donc la plupart de mon code était basé sur ces deux corps de fonctions, plus l'ajout du mien interface utilisateur.

Je n'avais jamais programmé d'interface utilisateur auparavant qui n'entrait pas de lettre dans une ligne de commande avec un clavier, alors je voulais rester simple. J'ai décidé de faire une sélection de messages prédéfinis à envoyer qui pourraient être parcourus avec les touches haut et bas, en fait plus facile que je ne le pensais !

En empilant simplement les trois cartes les unes sur les autres avec une carte SIM fonctionnelle (même à partir de votre propre téléphone !) et en flashant le code ci-dessous, vous obtiendrez un appareil de messagerie texte qui fonctionne comme ceci :

  • Allumez-le, il démarre et vous informe une fois que le réseau est connecté
  • Bouton gauche :accédez à l'écran d'accueil
  • Bouton droit :accuser réception du message entrant, permettant au message suivant d'arriver s'il y en a un. Assombrit également l'écran s'il n'y a pas de message en cours.
  • Boutons haut/bas :faites défiler la sélection de messages préprogrammés à envoyer. Je suppose que vous pouvez en mettre autant que vous le souhaitez dans le code ; J'ai commencé avec quatre.
  • Bouton Sélectionner :envoyer le message actuellement sélectionné

C'est ça! Les messages entrants s'affichent automatiquement quel que soit le menu actif sur l'appareil, et allumeront même le rétroéclairage s'il avait été éteint.

La prochaine étape logique pourrait être d'ajouter un menu de numéros de destination pour les messages sortants, ou simplement de le faire répondre automatiquement au dernier message qu'il a reçu (en utilisant le remoteNumber() fonction).

Version finale

Pour découper les ouvertures dans la boîte du projet, j'ai utilisé une perceuse pour les trous normaux, puis une mèche de coupe polyvalente Dremel (#561) avec guide (#565) pour les plus grandes découpes. L'utilisation de planches et de pinces supplémentaires pour faire un gabarit pour guider le Dremel aurait permis d'obtenir des lignes plus propres, mais je suis assez content de ce que j'ai fait à main levée. Le bit voulait définitivement errer plus que ce à quoi je m'attendais !

Les seuls vrais fils du projet sont destinés à l'alimentation pour ajouter une batterie 9 V et un interrupteur. Sans batterie, il peut être alimenté par USB ou par une prise murale et le tour est joué !

Une batterie 9V et un clip s'intègrent parfaitement à côté de l'Arduino et sous le blindage GSM (qui a à peu près la même taille qu'un Arduino Mega). J'ai soudé des fils à certaines broches d'en-tête pour faciliter la connexion de l'alimentation.

Heureusement, le blindage GSM avait des fils extra longs et pliables sur ses broches. J'ai pu les plier légèrement pour qu'ils manquent les prises de l'Arduino, laissant ces connexions libres pour mon connecteur d'alimentation. Je soupçonne que c'est pourquoi les épingles sont comme ça ! Le blindage LCD sur le dessus a des broches courtes et robustes sans connexions femelles sur la face avant, donc plier les broches est la seule méthode que j'ai trouvée pour connecter des choses autres que les blindages dans cette configuration.

Le fait de couper les fils de soudure du port USB et quelques autres sur le dessous de l'Arduino lui permet de s'asseoir à plat dans le boîtier sur du ruban adhésif double face en mousse. Ensuite, les cartes s'empilent pour que l'écran LCD et les boutons dépassent à peine du haut du boîtier, parfait !

Conclusion

Je vais continuer à bricoler avec ce système et même laisser mon neveu de 4 ans le frapper un peu. Je pense que cela fonctionne plutôt bien en tant que messager, mais j'ai été surpris de l'aimer encore plus en tant que petit panneau d'affichage dans ma maison pour afficher des messages. Je suis satisfait de l'esthétique, ce qui aide là-bas.

Un travail supplémentaire à ce sujet pourrait-il avoir un deuxième menu pour sélectionner le destinataire d'un message, assombrir automatiquement l'affichage pour économiser de l'énergie, ajouter des lumières/buzzers/moteurs de téléavertisseur pour les notifications, ou tout autre comportement d'interface utilisateur préféré que vous pourriez souhaiter !

Le système pourrait également être fondamentalement modifié pour afficher les notifications d'un service comme IFTTT, comme si vous aviez un colis livré ou les derniers tweets de quelqu'un. Que construisez-vous ? Comment amélioreriez-vous le système ?

Profitez-en !

-Mike

Vous pouvez en savoir plus sur moi et mes projets sur mon blog, y compris plus sur ce projet.

(Ce projet a été rendu possible dans le cadre de Hologramme Programme Hacker-In-Residence. Pour plus d'informations, contactez Sheena, coordinatrice du contenu d'Hologram, à [email protected])

Code

  • Code système pour Arduino
Code système pour ArduinoArduino
/** * Système de téléavertisseur bidirectionnel avec service cellulaire Arduino et Hologram * Mike Schaus * 28 décembre 2016 * Réalisé dans le cadre du programme Hologram Hacker-In-Residence * * Ce projet envoie et reçoit du texte (SMS) messages via * un arduino avec modem cellulaire intégré dans un petit boîtier * avec un écran LCD et des boutons de commande simples. * * Notez que le code est inclus pour fonctionner via le shield LCD OU * le moniteur série, vous pouvez donc utiliser ce code même sans * shield LCD. */#include #define PINNUMBER ""// inclut le code de la bibliothèque LCD :#include #include #include // Le bouclier utilise les broches I2C SCL et SDA. Sur les Arduinos classiques// il s'agit d'Analog 4 et 5 donc vous ne pouvez plus les utiliser pour analogRead()// Cependant, vous pouvez connecter d'autres capteurs I2C au bus I2C et partager// le bus I2C.Adafruit_RGBLCDShield lcd =Adafruit_RGBLCDShield( );// Ces #defines facilitent le réglage de la couleur du rétroéclairage#define OFF 0x0#define ON 0x1// font de la flèche un caractère spécial sur l'octet LCDconst arrow[8] ={ B00000, B00000, B01000, B01100, B01110, B01100, B01000, B00000} ;// initialiser l'instance de la bibliothèque GSMGSM gsmAccess(false); // inclure un paramètre 'true' pour debug enabledGSM_SMS sms;// tableau de caractères du numéro de téléphone à envoyer SMS// changer le numéro 12125551212 en un numéro// vous avez accès à char remoteNumber[20]="12125551212";// Tableau pour contenir le numéro d'un SMS récupéré à partir de char senderNumber[20] ; // tableau de char des messages sortants possibles à choisir dans le menuchar* response[]={"Mike=Awesome!", "Yes", "No", "Salut !"};//#define NUMRESPONSES 4 // si quelqu'un sait comment calculer cela à la place, je suis tout ouïe#define NUMRESPONSES (sizeof(responses)/sizeof(char *)) // merci au commentaire de Steve Kemp !int position=-1; // de cette façon, la première pression sur le bouton affichera toujours la première option du menuint inByte =0; // octet série entrant pour l'interface clavier rétroéclairage booléen =true; // suivre l'état du rétroéclairage pour basculer unsigned long previousMillis =0; // stockera la dernière fois que les messages ont été vérifiés#define CHECKINTERVAL 1500 // à quelle fréquence vérifier les messages texte void setup() { // mettez votre code de configuration ici, à exécuter une fois :// initialiser les communications série Serial.begin(9600); Serial.println(F("SMS Message Sender -- démarrage...")); // configure le nombre de colonnes et de lignes de l'écran LCD :lcd.begin(16, 2); // Imprime un message sur l'écran LCD lcd.print(F("Bonjour, Hologramme !")); lcd.setCursor(0, 1); lcd.print(F("Démarrage...")); lcd.setBacklight(ON); // configure le caractère de flèche pour l'affichage lcd.createChar(0, arrow); // état de la connexion booléen notConnected =true; // Démarrer le bouclier GSM // Si votre SIM a un code PIN, transmettez-le comme paramètre de begin() entre guillemets while(notConnected) { if(gsmAccess.begin(PINNUMBER)==GSM_READY) { notConnected =false; Serial.println(F("GSM est connecté parce que tu es tellement génial")); Serial.println(F("En attente de messages, ou envoyer avec \"s\"")); Serial.println(); lcd.clear(); lcd.setCursor(0,0); écran d'accueil(); } else { Serial.println(F("Non connecté")); lcd.clear(); lcd.setCursor(0,0); lcd.print(F("Non connecté")); retard(1000); } }}// c'est la fonction du système de menu void showResponses() {// Serial.println(position); // uniquement pour le débogage du système de menus lcd.clear(); lcd.setCursor(0,0); // assurez-vous que la position du curseur est légale if (position<0) position=0; si (position>NUMRÉPONSES-1) position =NUMRÉPONSES-1 ; // écrit la sélection actuelle et l'option suivante s'il existe une autre option lcd.write(0); //caractère flèche lcd.print(position+1); lcd.print("-"); lcd.print(réponses[position]); if (position  0) { inByte =Serial.read(); // récupère l'octet entrant if (inByte =='s') { printResponseOptions(); while (Serial.available()> 0) { // efface le tampon du clavier juste au cas où char junk =Serial.read(); } while (Serial.available() ==0); // Attendez ici que le tampon d'entrée ait un caractère inByte =Serial.parseInt(); // voudrait vérifier le choix valide ici pour être plus robuste sendSMS(responses[inByte]); } } // vérifier les nouveaux messages seulement une fois toutes les quelques secondes pour garder l'interface plus réactive unsigned long currentMillis =millis(); if (currentMillis - previousMillis>=CHECKINTERVAL) { previousMillis =currentMillis; recevoirSMS(); // prend environ 26 ms lorsqu'il n'y a pas de messages }}

Schémas

L'assemblage est en fait beaucoup plus simple que le schéma ne le laisserait supposer - la plupart des connexions sont effectuées simplement en empilant les deux blindages sur l'Arduino ! Tout ce qui est au-delà est facultatif pour l'alimentation par batterie.

Processus de fabrication

  1. Surveillance du CO2 avec le capteur K30
  2. Communication sourds-aveugles avec 1Sheeld/Arduino
  3. Contrôler l'accepteur de pièces avec Arduino
  4. Arduino avec Bluetooth pour contrôler une LED !
  5. Capteur d'empreintes digitales capacitif avec un Arduino ou ESP8266
  6. Jouer avec Nextion Display
  7. Bras robotique contrôlé par Nunchuk (avec Arduino)
  8. Mesure du rayonnement solaire avec Arduino
  9. Mini radar avec Arduino