Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Old-School Two-Way Pager met Arduino

Componenten en benodigdheden

Hologram Global IoT-simkaart
× 1
Arduino UNO
× 1
Arduino GSM-schild V2
× 1
Adafruit LCD Shield Kit met 16x2 Character Display - Slechts 2 pinnen gebruikt! - BLAUW EN WIT
× 1
Hammond Project Box 4,7 x 2,6 x 1,4 doorschijnend blauw
× 1

Apps en online services

Hologram Data Router

Over dit project

Inleiding

Op zoek naar de glorie van de late jaren 90 en vroege jaren 2000, dacht ik dat ik zou proberen mijn eigen bidirectionele pager te maken, net zoals Jay-Z vroeger gebruikte! Maar ik heb gemerkt dat dit idee nuttiger is dan op het eerste gezicht - ik heb het zo ontworpen dat het door kinderen kan worden gebruikt in plaats van een echte mobiele telefoon, of het kan worden gebruikt als een "SOS" -knop voor iemand die alleen buitenshuis werkt of zelfs sporten (als het wat kleiner was). En de laatste paar weken staat dit apparaat altijd aan in mijn woonkamer waar mijn vrouw en ik domme berichten voor elkaar achterlaten.

Samenvatting:dit project verzendt en ontvangt tekstberichten (sms) via een arduino met mobiel modem ingebouwd in een kleine behuizing met een lcd-scherm en eenvoudige bedieningsknoppen.

Merk op dat de code voor dit project de mogelijkheid bevat om het systeem vanaf de seriële interface te laten werken, zodat je een versie van dit project kunt bouwen en gebruiken, zelfs als je geen LCD-scherm hebt!

Hardware selectie

Ik had een Arduino GSM-schild dat ik met dit project wilde gebruiken, samen met een simkaart van Hologram, dus combineren met een Arduino UNO was heel logisch geweest. Adafruit maakt een LCD-scherm met ingebouwde knoppen, en omdat het de I2C-bus gebruikt, gebruikt het slechts twee pinnen op de Arduino voor het scherm en vijf knoppen, waardoor er veel ruimte overblijft voor toekomstige aanpassingen.

Het LCD-scherm heeft een mooie blauwe achtergrondkleur, dus ik dacht dat het leuk zou zijn om het te combineren met een doorschijnende blauwe behuizing. Het op elkaar stapelen van de drie borden zorgde voor een aantal zeer schone verbindingen en was elektrisch geen probleem omdat de twee schilden verschillende pinnen van elkaar gebruiken.

  • LCD-afscherming:analoge 4 en 5 pinnen voor de I2C-bus (samen met +5V voeding en aarde [maar alleen de aarde naast de Vin-pin, niet die naast de 5V-pin])
  • GSM-schild:pinnen 2 en 3 voor seriële software, en pin 7 als stroomreset (plus stroom en aarde uiteraard, hoewel ik hier nooit details over heb gezien in de documentatie)

Al het andere is gratis om nog uit te breiden! Er kunnen zelfs nog andere apparaten aan de I2C-bus worden toegevoegd.

Tijdens de ontwikkeling werkte het systeem prima op alleen USB-stroom van mijn laptop voor het verzenden en ontvangen van sms, hoewel ik vermoed dat het meer stroom nodig zal hebben om GPRS-mobiele data betrouwbaar te gebruiken.

Mobiele communicatie

Hologram biedt een mobiele dataservice die werkt met elk apparaat dat een simkaart accepteert. Nadat ik mijn simkaart voor service had geregistreerd, kon ik er met slechts een extra klik een telefoonnummer aan toewijzen in mijn netnummer naar keuze. Een andere functie die dit project bijvoorbeeld geweldig maakt als communicator voor kinderen, is dat het zo goedkoop is om de service actief te houden ($ 0,40 per maand) en dat ik het op elk moment kan pauzeren als ik het apparaat niet meer gebruik. Zoals de meeste abonnementen voor mobiele telefoons, is het ontvangen van sms-berichten gratis en kost het verzenden $ 0,19 per stuk. In de toekomst kunnen deze kosten nog verder worden verlaagd door gebruik te maken van een dataverbinding met de cloudservice van Hologram, waar een bericht automatisch kan worden doorgestuurd naar een gratis sms-service. $ 0,60 voor één megabyte aan gegevens levert je een heleboel kleine sms-berichten op.

Om welke reden dan ook, hoewel het GSM-schild uiteindelijk goed werkte, zou het de GSMScanner niet correct uitvoeren en GSMModem getIMEI() functies die zijn ontworpen voor de eerste installatie en probleemoplossing. Vrij misleidend! SMS- en GPRS-gegevensfuncties werkten prima, dus als iemand weet waarom de modem me nog steeds zijn eigen IMEI-nummer niet kan vertellen, hoor ik graag uw ideeën.

Code en interface

Adafruit heeft uitstekende instructies om het LCD-schild in actie te laten zien en Arduino heeft een goede startgids voor het GSM-schild die de belangrijke functies laat zien, dus het grootste deel van mijn code was gebaseerd op die twee functies, plus de toevoeging van mijn eigen gebruikersinterface.

Ik had nog nooit een gebruikersinterface geprogrammeerd die geen letter in een opdrachtregel invoerde met een toetsenbord, dus ik wilde het simpel houden. Ik besloot een selectie van standaardberichten te maken om te verzenden, waar je doorheen kon scrollen met de toetsen omhoog en omlaag - eigenlijk makkelijker dan ik dacht!

Gewoon door de drie kaarten op elkaar te stapelen met een werkende simkaart (zelfs van je eigen telefoon!) en de onderstaande code te laten knipperen, krijg je een sms-apparaat dat als volgt werkt:

  • Zet het aan, het start op en geeft aan wanneer het netwerk is verbonden
  • Linkerknop:Ga naar het "startscherm"
  • Rechterknop:Bevestig in inkomend bericht, zodat het volgende bericht kan binnenkomen als dat er is. Dimt het scherm ook als er geen actueel bericht is.
  • Toetsen omhoog/omlaag:blader door de selectie van voorgeprogrammeerde berichten die u wilt verzenden. Ik denk dat je er zoveel als je wilt in de code kunt plaatsen; Ik begon met vier.
  • Selecteerknop:het momenteel geselecteerde bericht verzenden

Dat is het! Inkomende berichten worden automatisch weergegeven, ongeacht welk menu op het apparaat actief is, en de achtergrondverlichting wordt zelfs ingeschakeld als deze uitgeschakeld was.

De volgende logische stap zou kunnen zijn om een ​​menu met bestemmingsnummers toe te voegen voor de uitgaande berichten, of om het automatisch te laten reageren op het laatste bericht dat het heeft ontvangen (met behulp van de remoteNumber() functie).

Definitieve opbouw

Om de openingen in de projectdoos te snijden, gebruikte ik een boor voor normale gaten en vervolgens een Dremel multifunctioneel snijbit (#561) met geleider (#565) voor de grotere uitsparingen. Met wat extra planken en klemmen om een ​​mal te maken om de Dremel te geleiden, zou de Dremel schonere lijnen hebben gemaakt, maar ik ben blij genoeg met wat ik uit de vrije hand heb gedaan. Het bit wilde absoluut meer ronddwalen dan ik had verwacht!

De enige echte draden in het project zijn voor stroom om een ​​9V-batterij toe te voegen en te schakelen - zonder batterij kan deze worden gevoed via USB of een stopcontact en je bent klaar!

Een 9V-batterij en clip passen mooi naast de Arduino en onder het GSM-schild (dat ongeveer even groot is als een Arduino Mega). Ik heb draden gesoldeerd aan enkele header-pinnen om de stroomaansluiting gemakkelijk te kunnen bevestigen.

Gelukkig had het GSM-schild extra lange en buigbare draden op zijn pinnen. Ik kon ze iets naar binnen buigen zodat ze de sockets op de Arduino misten, waardoor die verbindingen vrij bleven voor mijn powerheader. Ik vermoed dat dit de reden is waarom de pinnen zo zijn! Het LCD-scherm aan de bovenkant heeft korte en stevige pinnen zonder vrouwelijke verbindingen aan de voorkant, dus het wegbuigen van de pinnen is de enige methode die ik heb gevonden om andere dingen dan de schermen in deze opstelling aan te sluiten.

Door de soldeerdraden van de USB-poort en een paar andere aan de onderkant van de Arduino vast te knippen, kan deze plat in de behuizing op een dubbelklevende schuimtape zitten. Dan stapelen de borden zich op om het LCD-scherm achter te laten en de knoppen steken net boven de bovenkant van de behuizing uit - perfect!

Conclusie

Ik zal aan dit systeem blijven sleutelen en zelfs mijn 4-jarige neefje er een beetje mee laten spelen. Ik denk dat het best goed werkt als een boodschapper, maar ik was verrast dat ik het nog leuker vind als een klein reclamebord in mijn huis om berichten weer te geven. Ik ben blij met de esthetiek, die daar helpt.

Verdere werkzaamheden hieraan kunnen het hebben van een tweede menu voor het selecteren van de ontvanger van een bericht, het automatisch dimmen van het scherm om stroom te besparen, het toevoegen van lichten/zoemers/semafoonmotoren voor meldingen, of enig ander gewenst gebruikersinterfacegedrag!

Het systeem kan ook fundamenteel worden gewijzigd om meldingen van een service als IFTTT weer te geven, bijvoorbeeld als je een pakket hebt laten bezorgen of iemands laatste tweets. Wat ben je aan het bouwen? Hoe zou je het systeem verbeteren?

Geniet ervan!

-Mike

Je kunt meer over mij en mijn projecten lezen op mijn blog, inclusief meer over dit project.

(Dit project is mogelijk gemaakt als onderdeel van Hologrammen Hacker-In-Residence-programma. Neem voor meer informatie contact op met Sheena, de contentcoördinator van Hologram, via [email protected])

Code

  • Systeemcode voor Arduino
Systeemcode voor ArduinoArduino
/** * Tweerichtingspagersysteem met Arduino en Hologram mobiele service * Mike Schaus * 28 december 2016 * Gemaakt als onderdeel van het Hologram Hacker-In-Residence-programma * * Dit project verzendt en ontvangt tekst (SMS) berichten via * een arduino met mobiel modem ingebouwd in een kleine behuizing * met een LCD-scherm en eenvoudige bedieningsknoppen. * * Merk op dat er een code is meegeleverd om te functioneren via het LCD-scherm OF * de seriële monitor, dus u kunt deze code zelfs gebruiken zonder * een LCD-scherm. */#include #define PINNUMBER ""// include the LCD library code:#include #include #include // Het schild gebruikt de I2C SCL- en SDA-pinnen. Op klassieke Arduino's// zijn dit Analog 4 en 5, dus die kun je niet meer gebruiken voor analogRead()// Je kunt echter wel andere I2C-sensoren aansluiten op de I2C-bus en delen// de I2C-bus.Adafruit_RGBLCDShield lcd =Adafruit_RGBLCDShield( );// Deze #defines maken het gemakkelijk om de kleur van de achtergrondverlichting in te stellen#define OFF 0x0#define ON 0x1// maak de pijl speciaal op de LCDconst byte arrow[8] ={ B00000, B00000, B01000, B01100, B01110, B01100, B01000, B00000};// initialiseer de GSM-bibliotheekinstantieGSM gsmAccess(false); // voeg een 'true' parameter toe voor debug-enabled GSM_SMS sms;// char array van het telefoonnummer om sms te verzenden// verander het nummer 12125551212 in een nummer// je hebt toegang totchar remoteNumber[20]="12125551212";// Array om het nummer vast te houden waar een SMS van wordt opgehaaldchar senderNumber[20];// char array van de mogelijke uitgaande berichten om uit het menu te kiezenchar* responsen[]={"Mike=Awesome!", "Ja", "Nee", "Howdy!"};//#define NUMRESPONSES 4 // als iemand weet hoe dit te berekenen, ben ik een en al oor#define NUMRESPONSES (sizeof(responses)/sizeof(char *)) // dankzij de opmerking van Steve Kemp !int positie=-1; // op deze manier zal de eerste druk op de knop altijd de eerste optie van het menu tonen inByte =0; // inkomende seriële byte voor toetsenbordinterfaceboolean achtergrondverlichting =true; // track achtergrondverlichting status voor het wisselen van unsigned long previousMillis =0; // slaat de laatste keer op dat berichten werden gecontroleerd#define CHECKINTERVAL 1500 // hoe vaak moet worden gecontroleerd op tekstberichtenvoid setup() { // plaats hier uw setup-code om één keer uit te voeren:// initialiseer seriële communicatie Serial.begin(9600); Serial.println(F("SMS-berichtverzender -- opstarten...")); // stel het aantal kolommen en rijen van het LCD-scherm in:lcd.begin (16, 2); // Druk een bericht af op het LCD lcd.print(F("Hallo, Hologram!")); lcd.setCursor(0, 1); lcd.print(F("Bezig met opstarten...")); lcd.set Achtergrondverlichting (AAN); // stel het pijlteken in voor display lcd.createChar (0, pijl); // verbindingsstatus boolean notConnected =true; // Start GSM-schild // Als uw SIM een pincode heeft, geef deze dan door als een parameter van begin() tussen aanhalingstekens while(notConnected) { if(gsmAccess.begin(PINNUMBER)==GSM_READY) { notConnected =false; Serial.println(F("GSM is verbonden omdat je zo geweldig bent")); Serial.println(F("Wachten op berichten, of verzenden met \"s\"")); Serieel.println(); lcd.wissen(); lcd.setCursor(0,0); thuis scherm(); } else { Serial.println(F("Niet verbonden")); lcd.wissen(); lcd.setCursor(0,0); lcd.print(F ("Niet verbonden")); vertraging (1000); } }}// dit is de functie van het menusysteem ongeldig showResponses() {// Serial.println(position); // alleen voor het debuggen van menusysteem lcd.clear(); lcd.setCursor(0,0); // zorg ervoor dat de cursorpositie legaal is als (position<0) position=0; if (positie>NUMRESPONSES-1) positie =NUMRESPONSES-1; // schrijf huidige selectie en volgende optie als er een andere optie is lcd.write(0); //pijlteken lcd.print(positie+1); lcd.print("-"); lcd.print(antwoorden[positie]); if (positie  0) { inByte =Serial.read(); // ontvang inkomende byte if (inByte =='s') { printResponseOptions (); while (Serial.available()> 0) {// wis de toetsenbordbuffer voor het geval char junk =Serial.read(); } while (Serial.available() ==0); // Wacht hier totdat de invoerbuffer een teken heeft inByte =Serial.parseInt(); // zou hier willen controleren op een geldige keuze om robuuster te zijn sendSMS (antwoorden [inByte]); } } // controleer slechts eens in de paar seconden op nieuwe berichten om de interface responsiever te houden, niet-ondertekend long currentMillis =millis(); if (currentMillis - previousMillis>=CHECKINTERVAL) { previousMillis =currentMillis; ontvangSMS(); // duurt ongeveer 26 ms als er geen berichten zijn }}

Schema's

Montage is eigenlijk veel eenvoudiger dan het schema zou impliceren - de meeste verbindingen worden gemaakt door simpelweg de twee schilden op de Arduino te stapelen! Alles daarbuiten is optioneel voor batterijvermogen.

Productieproces

  1. CO2-monitoring met K30-sensor
  2. Doofblinde communicatie met 1Sheeld/Arduino
  3. Bedien muntvangers met Arduino
  4. Arduino met Bluetooth om een ​​LED te bedienen!
  5. Capacitieve vingerafdruksensor met een Arduino of ESP8266
  6. Spelen met Nextion Display
  7. Nunchuk-gestuurde robotarm (met Arduino)
  8. Zonnestraling meten met Arduino
  9. Mini-radar met Arduino
  10. Muziek maken met een Arduino
  11. Hoestdetectie met TinyML op Arduino