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

Hoe u een aangepaste Android-app voor uw Arduino-project kunt bouwen met behulp van MIT App Inventor

In deze Arduino-zelfstudie leren we hoe we aangepaste Android-applicaties kunnen bouwen voor het besturen van Arduino met behulp van de online applicatie MIT App Inventor. Je kunt de volgende video bekijken of de schriftelijke tutorial hieronder lezen.

Overzicht

Voor deze tutorial hebben we twee voorbeelden. Het eerste voorbeeld is het besturen van een eenvoudige LED en het tweede voorbeeld is het besturen van een stappenmotor met behulp van een smartphone. In mijn vorige tutorial hebben we al geleerd hoe we de Bluetooth-communicatie tussen het Arduino-bord en de smartphone kunnen maken met behulp van de HC-05 Bluetooth-module en hebben we de Arduino-code uitgelegd die nodig is voor het eerste voorbeeld.

Arduino-code

Hier is een kort overzicht van die code. Via de seriële poort ontvangen we dus de binnenkomende data van de smartphone en slaan we deze op in de ‘state’ variabele. Als we het teken '0' ontvangen dat vanaf de smartphone wordt verzonden wanneer op de knop 'LED:UIT' wordt gedrukt, schakelen we de LED uit en sturen we de tekenreeks 'LED:UIT' terug naar de smartphone. Aan de andere kant, als we het teken '1' ontvangen, zullen we de LED inschakelen en de string "LED:ON" terugsturen.

/* Arduino and HC-05 Bluetooth Module Tutorial
 * 
 * by Dejan Nedelkovski, www.HowToMechatronics.com
 * 
 */
 
#define ledPin 7
int state = 0;

void setup() {
 pinMode(ledPin, OUTPUT);
 digitalWrite(ledPin, LOW);
 Serial.begin(38400); // Default communication rate of the Bluetooth module
}

void loop() {
 if(Serial.available() > 0){ // Checks whether data is comming from the serial port
 state = Serial.read(); // Reads the data from the serial port
 }

 if (state == '0') {
 digitalWrite(ledPin, LOW); // Turn LED OFF
 Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON"
 state = 0;
 }
 else if (state == '1') {
 digitalWrite(ledPin, HIGH);
 Serial.println("LED: ON");;
 state = 0;
 } 
}Code language: Arduino (arduino)

Dus nu moeten we onze aangepaste Android-applicatie bouwen die die tekens '0' en '1' verzendt wanneer een bepaalde knop wordt ingedrukt, en ook de inkomende strings van de Arduino ontvangt.

MIT App Inventor

Vanaf de MIT App Inventor-website moeten we inloggen op de online bouwapplicatie door op "Creëer apps!" knop. Om in te loggen hebben we een Gmail-account nodig. Zodra we nu zijn ingelogd, kunnen we ons eerste project maken. Zo ziet het ontwerpvenster eruit en nu kunnen we beginnen met het bouwen van onze applicatie.

Maar voordat we dat doen, kunnen we onze smartphone aan dit project koppelen, zodat we direct op onze smartphone in realtime kunnen zien hoe de app vorm krijgt. Om dat te doen, moeten we eerst de MIT AI2 Companion-app downloaden uit de Play Store en deze op onze smartphone installeren. Vervolgens selecteren we in het Connect-menu van de online-editor AI Companion en er verschijnt een streepjescode die we alleen maar hoeven te scannen of de code in de smartphone-app in te voeren en de verbinding tussen de online-editor en de smartphone-app wordt tot stand gebracht.

Dus als we nu bijvoorbeeld een knop invoegen in het scherm van de online editor, dan verschijnt de knop ook realtime op de smartphone. Evenzo, als u uw smartphone niet wilt gebruiken tijdens het bouwen van de app, kunt u de Android Emulator op uw computer installeren en op dezelfde manier gebruiken. U kunt meer details vinden over het instellen van de emulator op hun website.

De app bouwen – voorbeeld 1

Nu zijn we klaar om het eerste voorbeeld te bouwen. We beginnen met de indeling van het programma. Eerst zullen we enkele Horizontale Arrangementen uit het lay-outpalet toevoegen en hun eigenschappen, zoals de hoogte, de breedte en de uitlijning, aanpassen aan het gewenste uiterlijk van ons programma. Vervolgens zullen we vanuit het UserInterface-palet een ListPicker toevoegen en er een afbeelding aan toevoegen. De ListPicker wordt gebruikt om het Bluetooth-apparaat te selecteren waarmee onze smartphone verbinding zal maken.

Vervolgens voegen we nog een HorizontalArrangements toe waarin we een Label plaatsen. Dit label geeft aan of de smartphone al dan niet is verbonden met de Bluetooth-module en daarom zullen we de begintekst van dit label instellen op "Niet verbonden". Het volgende label wordt gebruikt om de status van de LED weer te geven, of deze nu aan of uit is. De beginstatus is "LED:UIT". Vervolgens voegen we de twee knoppen 'Turn On' en 'Turn Off' toe voor het bedienen van de LED. Op dit punt is het goed om de componenten een andere naam te geven, zodat we ze later gemakkelijker kunnen herkennen en gebruiken in de Blocks-editor. Wat nu nog rest, is het toevoegen van de BluetoothClient, een niet-zichtbaar onderdeel, en een klok die zal worden gebruikt voor de realtime indicatie van de verbindingsstatus.

Blocks Editor

Nu zijn we in de Blocks-editor klaar om ons programma leven in te blazen. Aan de linkerkant hebben we alle blokken en functies met betrekking tot de eerder toegevoegde componenten.

We beginnen met de BluetoothList ListPicker. Vanaf daar zullen we eerst het 'BeforePicking'-blok toevoegen en daaraan het 'set Bluetooth Elements'-blok koppelen. Vervolgens zullen we uit de BluetoothClient-blokken het blok 'BluetoothClient AddressesAndNames' toevoegen. Wat deze set blokken zal doen, is een lijst met Bluetooth-apparaten instellen die al aan onze telefoon zijn gekoppeld, dus wanneer we op de ListPicker "Connect-knop" klikken, wordt de lijst met alle gekoppelde apparaten weergegeven.

Vervolgens moeten we instellen wat er zal gebeuren nadat we onze specifieke Bluetooth-module hebben gekozen of geselecteerd. Vanuit het BluetoothClient-blok zullen we het blok 'Bel BluetoothClient .Connect address' toevoegen en het blok 'BluetoothList Selection' eraan toevoegen, wat betekent dat onze telefoon verbinding maakt met het Bluetooth-adres dat we eerder hebben geselecteerd.

Naast de klokblokken zullen we het blok ".Timer" toevoegen. Binnen dit blok zullen we de realtime indicatie geven of de telefoon al dan niet is verbonden met de Bluetooth-module met behulp van het "set Text" -blok van het label met de naam "Verbonden".

Vervolgens moeten we de twee knoppen leven geven. Dus wanneer op de "TurnOn_Button" wordt geklikt, zullen we de Bluetooth-clientfunctie "Send1ByteNumber" gebruiken om een ​​nummer naar de Arduino Bluetooth-module te sturen. In ons geval is dat het getal 49 dat overeenkomt met het teken '1' volgens de ASCII-tabel en dat zal de LED aanzetten. Direct daarna zullen we de "ReceiveText" BluetoothClient-functie gebruiken om de inkomende string te ontvangen die van de Arduino naar de telefoon wordt teruggestuurd. Deze string is ingesteld op het label "LED_Status".

Dezelfde procedure geldt voor de "TurnOff_Button" waar het verzendende nummer moet worden gewijzigd in 48, wat overeenkomt met teken '0'. Wat nu nog rest is het downloaden en installeren van het programma op onze smartphone. We kunnen dat doen vanuit het menu "Build" door het op onze computer op te slaan en vervolgens naar onze telefoon over te zetten of een QR-code te scannen om het programma online te downloaden. Hier is de demonstratie van het voorbeeld.

Hier is een downloadbestand van het bovenstaande MIT App Inventor-project:

BluetoothTest.aia

1 bestand(en) 5,16 KB downloaden

Voorbeeld stappenmotorbesturing


Laten we nu eens kijken naar het tweede voorbeeld, het besturen van een stappenmotor. Bovenaan het scherm hebben we dezelfde componenten voor de Bluetooth-verbinding als in het vorige voorbeeld. Vervolgens hebben we een Canvas-component die wordt gebruikt voor het tekenen en invoegen van afbeeldingen. Ik heb twee transparante afbeeldingen ingevoegd die ik eerder tekende. De eerste is een afbeelding van een meter die op zijn plaats wordt vastgezet en de tweede is een afbeelding van een aanwijzer die zal draaien. Vervolgens hebben we een Check-knop om te schakelen tussen Handmatig en Auto of continu lopende modus en een knop om de draairichting te veranderen. Bij de knop hebben we een schuifregelaar voor het wijzigen van de rotatiesnelheid van de stappenmotor.

Hier zijn de blokken en de Arduino-code achter dit voorbeeld. Dus in de Blokken-editor hebben we weer dezelfde blokken voor de Bluetooth-verbinding als in het vorige voorbeeld.

Voor het roteren van de aanwijzerafbeelding gebruiken we nu de ImageSprite-functie ".PointInDirection" die de afbeelding roteert van de 0°-positie naar de X- en Y-coördinaten waar het canvas is aangeraakt. Tegelijkertijd stellen we de geroteerde ImageSprite-kop in op het bovenstaande tekstlabel. Daarna noemen we een op maat gemaakte procedure, of functie die in feite een vertraging van 10 m seconden is.

Ten slotte sturen we de koerswaarde als een tekst naar de Arduino met behulp van de Bluetooth-functie "SendText". Deze waarde wordt geaccepteerd door de Arduino en het zal de stappenmotor dienovereenkomstig roteren.

Het volgende is het CheckBox-blok. Dus als de CheckBox is aangevinkt, sturen we de tekst "Auto" naar de Arduino die de stappenmotor activeert om continu te draaien. Terwijl we in deze modus zijn als we op de knop "Reverse" drukken, sturen we de tekst "Reverse" naar de Arduino die de draairichting van de motor zal veranderen. Terwijl we ons in deze modus bevinden, kunnen we ook de rotatiesnelheid wijzigen. Als we de positie van de schuifregelaar wijzigen, wordt de huidige waarde van de schuifregelaarpositie naar de Arduino gestuurd, waardoor de rotatiesnelheid van de stepper verandert. Als we de CheckBox uitschakelen, gaan we terug naar de handmatige modus. Hier is de demonstratie van het voorbeeld.

Hier is een downloadbestand van het bovenstaande MIT App Inventor-project, evenals de twee afbeeldingen die in het project zijn gebruikt:

StepperMotorTest.aia

1 bestand(en) 60,96 KB downloaden

Stappenmotormeter en aanwijzerafbeeldingen

1 bestand(en) 27,34 KB downloaden

Hier is de Arduino-code van het tweede voorbeeld:

/*  Stepper Motor Control via HC-05 Bluetooth Module
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */

// Defining variables
const int stepPin = 7; 
const int dirPin = 6;
String state = ""; 
int currentHeading=0;
int currentAngle=0;
int lastAngle=0;
int angle=0;
int rotate=0;
int runContinuously=0;
String mode = "Manual";
boolean dirRotation = HIGH;
int rotSpeed = 1500;
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
  Serial.begin(38400); // Default communication rate of the Bluetooth module
}
void loop() {
  delayMicroseconds(1);
  if(Serial.available() > 0){ // Checks whether data is comming from the serial port
    state = Serial.readString(); // Reads the data from the serial port
 }
 // When Auto Button is pressed
 if (mode == "Auto") {
  if (state == "Reverse") {
    delay(10);
    if (dirRotation == HIGH) {
      dirRotation = LOW;
    }
    else {
      dirRotation = HIGH;
    }  
    digitalWrite(dirPin,dirRotation);
    delay(10);
    state = "";
  }
  rotSpeed = state.toInt();
  if (rotSpeed >= 300 && rotSpeed <= 3000) {
  digitalWrite(stepPin,HIGH); 
  delayMicroseconds(rotSpeed); 
  digitalWrite(stepPin,LOW); 
  delayMicroseconds(rotSpeed);
  }
  else {
  digitalWrite(stepPin,HIGH); 
  delayMicroseconds(1500); 
  digitalWrite(stepPin,LOW); 
  delayMicroseconds(1500);
  }
  
  if (state == "Manual"){
    mode = state;
  }
 }
 // When Program is in Manual mode
 else if (mode == "Manual"){ 
 currentHeading = state.toInt();
 //Serial.println(angle);
 //Serial.println(state);
 if (currentHeading < 0 ){
  currentHeading = 360+currentHeading;
 }
 currentAngle = map(currentHeading,0,359,0,200);
 digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  if (currentAngle != lastAngle){
    if(currentAngle > lastAngle){  
      rotate = currentAngle - lastAngle;  
      for(int x = 0; x < rotate; x++) {
      digitalWrite(stepPin,HIGH); 
      delayMicroseconds(500); 
      digitalWrite(stepPin,LOW); 
      delayMicroseconds(500); 
      }
    }

    if(currentAngle < lastAngle){  
      rotate = lastAngle - currentAngle; 
      digitalWrite(dirPin,LOW); //Changes the rotations direction
      for(int x = 0; x < rotate; x++) {
      digitalWrite(stepPin,HIGH); 
      delayMicroseconds(500); 
      digitalWrite(stepPin,LOW); 
      delayMicroseconds(500); 
      }
    }
  }
  lastAngle = currentAngle;
  if (state == "Auto"){
    mode = state;
  }
 }
}
Code language: Arduino (arduino)

Productieproces

  1. Bouw een ballistisch parachuteherstelsysteem voor uw drone
  2. Hoe kiest u het juiste materiaal voor uw project?
  3. Maak Monitor Ambilight met Arduino
  4. Universele afstandsbediening met Arduino, 1Sheeld en Android
  5. DIY voltmeter met Arduino en smartphone
  6. Hoe u uw roadmap voor automatisering in 7 stappen kunt samenstellen
  7. Magnesium vs. Aluminium:een legering kiezen voor uw aangepaste gietproject
  8. Hoe u de juiste kraan voor uw project kiest?
  9. Aangepaste bewerking:hier leest u hoe u zich kunt voorbereiden op uw projectofferte
  10. Hoe u de staalvereisten voor uw project kunt inschatten
  11. De voordelen van zandstralen voor uw op maat gemaakte metaalproductieproject