Force Feedback med LCD-skärm (2 / 4 steg)

Steg 2: Ansluta till MegaMoto



Först måste vi tråd MegaMoto. Gör följande:

-Anslut din 12V utbudet till BAT +/-terminaler

-Anslut manöverdonet till MOTA och MOTB terminalerna

-VALFRIA Anslut BAT + till Vin om du vill driva Arduino från datorn, eller lämna USB inkopplad.

-Ställ MegaMoto stiften enligt följande:

-Aktiverar = 13

-PWMA = 11

-PWMB = 3

-Sensor = A5

Den vänstra knappen bör göra manöverdonet förlänga, högerknappen bör göra manöverdonet tillbaka. Om dina anvisningar återförs, sedan vända de MOTA och MOTB anslutningarna.

Nu när knapparna är konfigurerade kan vi lägga till LCD programmet resten av programmet. Vi har lagt till fyra nya funktioner. Read_LCD_buttons(), updateTrip(), updateLCD() och printFeedback().

Read_LCD_buttons() är samma som testprogrammet, det läser status för knapparna från LCD-skärmen.

UpdateTrip() används för att kontrollera resultaten av upp och ner knappar och ändra amp gränsen för att resa den säkerhet avstängningen på.

UpdateLCD() är det allmänna LCD skriver funktion, som skriver all ny information till LCD-skärmen.

PrintFeedback() skriver nuvarande strömstyrka lottningen till LCD-skärmen. Detta är separat från den huvudsakliga updateLCD() funktionen, så att vi kan se nuvarande dragningen i realtid, snarare än väntar på att slinga.

Ladda upp programmet för att testa är, i nästa steg kommer vi att gå över olika delar av koden i detalj.

Obs: Resa gränser och nuvarande feedback är inte faktiskt hur många ampere som dras, de är endast resultat av den nuvarande sensorn. Du kan lägga till en ekvation i konvertera värdet till ampere innan du skriver det till LCD-skärmen.

/ * Kod för att visa den aktuella amp dra av manöverdonet och att minska makten om det
stiger över en viss summa.

Skrivet av progressiva automatiseringar
16 juli 2015

Hårdvara:
-RobotPower MegaMoto kontroll styrelser
-LCD sköld
-Arduino Uno
*/
#include < LiquidCrystal.h >

LiquidCrystal lcd (8, 9, 4, 5, 6, 7); / / Välj stiften används på LCD-panelen

definiera vissa värden används av panel och knappar
#define btnRIGHT 1
#define btnUP 2
#define btnDOWN 3
#define btnLEFT 4
#define btnSELECT 5
#define btnNONE 0

int lcd_key = 0;
int adc_key_in = 0; //value att läsa LCD-knappen input

CONST int btnup = 130;
CONST int btndown = 306;
CONST int btnleft = 479;
CONST int btnright = 0;
CONST int Välj = 720;
CONST int ingen = 1023;
CONST int tröskel = 2; //Analog värden för LCD knappar

CONST int EnablePin = 13.
CONST int PWMPinA = 11;
CONST int PWMPinB = 3; stift för Megamoto

CONST int CPin1 = A5; motoriska feedback

int knappen = 0; //value att läsa LCD knappar

int leftlatch = låg;
int rightlatch = låg, //motor lås

int hitLimits = 0;
int hitLimitsmaxfront = 10;
int hitLimitsmaxback = 5; //values veta om resor gränsen var nådd

lång lastfeedbacktime = 0;
int firstfeedbacktimedelay = 750; första dröjsmål att ignorera nuvarande spike
int feedbacktimedelay = 50; fördröjning mellan feedback cykler
lång currentTimefeedback = 0;

int debounceTime = 500. belopp till Dämpningstid
lång lastButtonpress = 0; timer för debouncing
lång currentTimedebounce = 0;

int CRaw = 0; RAW A/D-värde

int maxAmps = 0; resa gränsen

lång currentTimetrip = 0;
lång SenasteUppdatering = 0;
int updateTime = 100; //how snabbt kan resa värden uppdatering

bool dontExtend = false;
bool firstRun = true; //program logik

char * titeln [] = {"progressiva", "AUTOMATIK"}; Makt på titel

void setup()
{
Serial.BEGIN(9600);

pinMode (EnablePin, OUTPUT);
pinMode (PWMPinA, OUTPUT);
pinMode (PWMPinB, OUTPUT); //Set motor utgångar

pinMode (CPin1, indata); //set feedback input

LCD.BEGIN (16, 2); / / start biblioteket
lcd.setCursor (0, 0), lcd.print(title[0]), lcd.setCursor (0, 1), lcd.print(title[1]); Skriv ut rubrik
fördröjning (2000), //show titel i 2 sekunder

currentTimetrip = millis();
currentTimedebounce = millis();
currentTimefeedback = 0; //Set första gånger

lcd.setCursor (0, 0);
LCD.Print ("ampere Feedback"); skriva ut menyn meddelande

updateLCD(); skriva nya värden till skärmen

} //end setup

void loop()
{
Serial.println ("Main loop");

updateTrip (); //check knappar, uppdatering strömstyrka

latchButtons (); //check knappar, se om vi behöver flytta

moveMotor (); //check lås, flytta motor in eller ut

} //end huvudloop

void updateLCD()
{
lcd.setCursor (0, 1);
LCD.Print ("ampere: 0");

lcd.setCursor (8, 1);
LCD.Print ("resa: 0");

lcd.setCursor (13, 1);
LCD.Print(""), //clear gamla värde

om (maxAmps > 99) lcd.setCursor (13, 1);
annars om (maxAmps > 9) lcd.setCursor (14, 1);
annat lcd.setCursor (15, 1);

LCD.Print (maxAmps), //write nya värde

} //end updateLCD

void latchButtons()
{
knappen = read_LCD_buttons();

om (knappen == btnLEFT & & rightlatch! = hög) //left är framåt
{
currentTimedebounce = millis() - lastButtonpress;
om (currentTimedebounce > debounceTime & & dontExtend == false) //once du har utlöst dontExtend, ignorera alla framlänges pressar
{
leftlatch =! leftlatch;
knappen = btnNONE;
firstRun = sant;
lastButtonpress = millis();
hemkomst.
} //end om
} //end btnLEFT

om (knappen == btnRIGHT & & leftlatch! = hög) //right är tillbaka
{
currentTimedebounce = millis() - lastButtonpress;
om (currentTimedebounce > debounceTime)
{
rightlatch =! rightlatch;
knappen = btnNONE;
firstRun = sant;
lastButtonpress = millis();
hemkomst.
} //end om
} //end btnRIGHT
} //end latchButtons

int read_LCD_buttons()
{
adc_key_in = analogRead(A0); läsa värdet från sensorn
Delay(20);

om (adc_key_in > ingen - tröskeln & & adc_key_in < ingen + tröskel) återvända btnNONE;
om (adc_key_in > btnup - tröskeln & & adc_key_in < btnup + tröskel) återvända btnUP;
om (adc_key_in > btndown - tröskeln & & adc_key_in < btndown + tröskel) återvända btnDOWN;
om (adc_key_in > btnleft - tröskeln & & adc_key_in < btnleft + tröskel) återvända btnLEFT;
om (adc_key_in > btnright - tröskeln & & adc_key_in < btnright + tröskel) återvända btnRIGHT;
om (adc_key_in > Välj - tröskeln & & adc_key_in < Välj + tröskel) återvända btnSELECT;

återvända btnNONE; När alla andra misslyckas, återvända ingen

} //end readLCD

void updateTrip()
{
om (knappen == btnUP)
{
currentTimetrip = millis() - SenasteUppdatering;
om (currentTimetrip > updateTime)
{
maxAmps = maxAmps + 1.

om (maxAmps > 999) maxAmps = 0; //check för rollover

lcd.setCursor (13, 1);
LCD.Print(""), //clear gamla värde

om (maxAmps > 99) lcd.setCursor (13, 1);
annars om (maxAmps > 9) lcd.setCursor (14, 1);
annat lcd.setCursor (15, 1); //set markören följaktligen

LCD.Print (maxAmps), //write nya värde

SenasteUppdatering = millis();
} //end om
} //end om btnUP

annars om (knappen == btnDOWN)
{
currentTimetrip = millis() - SenasteUppdatering;
om (currentTimetrip > updateTime)
{
maxAmps = maxAmps - 1;

om (maxAmps < 0) maxAmps = 999; //check för rollover

lcd.setCursor (13, 1);
LCD.Print(""), //clear gamla värde

om (maxAmps > 99) lcd.setCursor (13, 1);
annars om (maxAmps > 9) lcd.setCursor (14, 1);
annat lcd.setCursor (15, 1); //set markören följaktligen

LCD.Print (maxAmps), //write nya värde

SenasteUppdatering = millis();
} //end om
} //end annars om btnDOWN

} //end updateTrip

void moveMotor()
{
om (leftlatch == hög) motorForward(255); hastighet = 0-255
om (leftlatch == låg) motorStop();
om (rightlatch == hög) motorBack(255); hastighet = 0-255
om (rightlatch == låg) motorStop();

} //end moveMotor

void motorForward(int speeed)
{
medan (dontExtend == false & & leftlatch == hög)
{
Serial.println ("flytta framåt");
digitalWrite (EnablePin, hög);
analogWrite (PWMPinA, speeed);
analogWrite (PWMPinB, 0); //move motor
om (firstRun == true) delay(firstfeedbacktimedelay);
annat delay(feedbacktimedelay); liten fördröjning att få snabba

getFeedback();

firstRun = false;

latchButtons();
} //end medan

} //end motorForward

void motorBack (int speeed)
{
medan (rightlatch == hög)
{
Serial.println ("flytta tillbaka");
digitalWrite (EnablePin, hög);
analogWrite (PWMPinA, 0);
analogWrite (PWMPinB, speeed); //move motor
Delay(3); liten fördröjning att få snabba

currentTimefeedback = millis() - lastfeedbacktime;

om (firstRun == true & & currentTimefeedback > firstfeedbacktimedelay) getFeedback(); om det inte har varit tillräckligt länge, händer ingenting
om (firstRun == false & & currentTimefeedback > feedbacktimedelay) getFeedback(); om det inte har varit tillräckligt länge, händer ingenting

firstRun = false;

latchButtons();

} //end medan

dontExtend = false;

} //end motorBack

void motorStop()
{
analogWrite (PWMPinA, 0);
analogWrite (PWMPinB, 0);

digitalWrite (EnablePin, låg);
firstRun = sant; //once motorn har stannat, återaktivera firstRun för start nuvarande spikar

} //end stopMotor

void getFeedback()
{
CRaw = analogRead(CPin1);

om (CRaw == 0 & & hitLimits < hitLimitsmaxback) hitLimits = hitLimits + 1.
annars om (CRaw == 0 & & hitLimits < hitLimitsmaxfront) hitLimits = hitLimits + 1.
annat hitLimits = 0;

om (hitLimits == hitLimitsmaxback)
{
rightlatch = låg;
} //end om

om (hitLimits == hitLimitsmaxfront)
{
leftlatch = låg;
hitLimits = 0;
} //end om

om (CRaw > maxAmps)
{
dontExtend = sant;
leftlatch = låg;
} //end om

printFeedback();

lastfeedbacktime = millis (); //store tidigare tid för att ta emot feedback
} //end getFeedback

void printFeedback()
{
lcd.setCursor (5, 1);
LCD.Print("");

om (CRaw > 99) lcd.setCursor (5, 1);
annars om (CRaw > 9) lcd.setCursor (6, 1);
annat lcd.setCursor (7, 1);
LCD.Print(CRaw);

} //end printFeedback

Se Steg
Relaterade Ämnen

Arduino Joystick bakbord med LCD-utgång

vill kunna styra ett par servon med en tumme-joystick? Men vet inte var du ska börja?Jag har servon, men jag kan sätta dig på rätt spår om hur man gör saker när du flyttar med styrspak.Detta instructable kommer att lära dig att mata riktning med styr...

Självbalanserande Robot med LCD-

Den modifierade versionen av min mpu6050 balansera robot stabilare med LCD och exempel på ansluta 2 i2c på samma stiftvideo 1video 2Steg 1: Steg 1: ◾L298N dubbla motor förare breakout ombord◾L298N dubbla motor förare breakout ombord12 V BATTARY9 V BA...

DS18B20 temperatur sond med LCD-

DS18B20 kommer i en temperatur sond form, som är vattentät. Jag hade riktigt svårt att försöka få detta en arbetar och jag tänkte jag skulle dela hur jag till slut fik den arbetande. Njut!Steg 1: delarDe delar du behöver för detta projekt:Arduino Meg...

Netduino GPS med LCD-skärm

ÖversiktJag hittade ett oanvänt Netduino V1-kort i min delar låda, så ville hitta något jag kunde ägna den till. Det var redan ansluten till en Nokia 5110 LCD-skärm för ett tidigare oavslutade projekt. Driver den upp, hittade jag båda arbetande böter...

Hur man gör en uttryckssymbol jacka med LCD-skärm

Konceptet:Jag skulle vilja göra en jacka som har en liten LCD skärm att skapa undertexter för interpersonell mänsklig interaktion. Användaren skulle använda en begränsad "tangentbord" med kraft sensorer och knappar under mjuk silikon nycklar för...

Arduino HC-SR04 (med LCD)

HejI denna tutorial jag ska visa dig hur man 1. Ansluta HC-SR04 till en arduino och skriva ut avståndet till seriell övervaka, 2. Anslut en LCD-skärm och skriva ut resultaten där istället. Sensorn fungerar genom att pinga ut ett ultraljud som vi inte...

Med PCF8574 ryggsäckar med LCD-skärmar och Arduino

IntroduktionMed LCD-moduler med din Arduino är populära, men mängden ledningar kräver tid och tålamod att tråd det upp rätt - och även använder mycket av digital utgångsstift. Thats varför vi älskar dessa seriell ryggsäck moduler - de är monterade på...

Ultrasonic linjal med LCD och Arduino

du behöverEn LCD-skärmEn Arduino Uno (jag har en Ethernet-shield på min, det gör inte någon sak i detta projekt, men det är en smärta att ta på och av)En Ultrasonic Sensormodul20 - 30 hoppare ledningarDetta är en ganska enkel projekt som jag kom med,...

Mini Arduino Multi funktion styrenhet med LCD-skärm

detta Instructable bygger på mini Arduino miljö monitor och mini Arduino EEGEN monitor Instructables.Det kan du styra upp till 4 reläer med tid, temperatur och/eller ljus, ditt sinne, eller vilken sensor du vill använda.Exemplen är prototyper, jag gå...

Arduino Ohm mätare med LCD-

Detta Instructable visar dig hur man gör en Digital Ohm mätare med Arduino.This Ohm mätare är mycket exakt... och helt DIY.Steg 1: Samla allt material.1) Arduino UNO (eller någon annan Arduino)2) bakbord3) 16 x 2 LCD uppvisning4) hoppare ledningar5)...

Atmega16/32 utveckling styrelsen med LCD

detta instructable visar, hur du gör din egen utveckling styrelsen för Atmega16 eller Atmega32 processorer. Internet är fullt av hemgjorda utveckling styrelser, men jag tror att det finns utrymme kvar för en annan. Denna styrelse har varit mycket anv...

Temp & Fuktsensor med LCD Disp & lysdiod

I detta instructable, jag har använt DHT11 temperatur & luftfuktighet sensor och Arduino UNO för att visa de aktuella temperatur & luftfuktighet avläsningarna till en 16 x 2 LCD-Display. Parallellt med, jag har också skapat en 3-LED setup som ange...

Ultrasonic avståndsmätare med LCD-display på Arduino UNO

I denna tutorial kommer vi att se en annan användning av modulen HC-SR04 ultraljud. Denna modul används ofta på robotar och leksaksbilar för att hitta hinder men det kan användas för att mäta avstånd också.Avstånd som mäts av HC-SR04 visas på vår äls...

Digitalt oscilloskop med LCD-skärm

Jag försökte göra enkel och billig oscilloskop använda gemensamma delar från dagens komponent återförsäljare. När du skapar, jag försökte minska antalet delar, samtidigt som minst nödvändiga för funktionen av ett oscilloskop - för olika inställningar...

Networked LCD ryggsäck med LCD Smartie

tecken LCD skärmar bläddra information är en populär fall mod. De är oftast kontrolleras via en parallellport, serieport ryggsäckeller USB ryggsäck (mer). Detta Instructable visar våra öppen källkod ethernet nätverk LCD ryggsäck.LCD kontrollprogram s...

Komma igång med LCD och mikroprocessorer

i detta Instructable, ta reda på hur man styr LCD med en ATmega8 och Bascom.Du behöver:-Skärbräda-Tråd-ATmega8-Programmerare-Bascom AVR (det finns även en demoversion gratis)-10 k motstånd-100 k motstånd-10 k varierande resistor-7805 spänningsregulat...

LED T-Shirt med LCD-skärm och Bluetooth

Hemgjord LED T-Shirt med 324 adresserbara WS2812B LED. Kontrolleras med Arduino kopplat pro micro till LCD-pekskärm och Bluetooth till Android telefon app. allt gjorts i huset (kretskort, skjorta kod, telefon app, skjorta layout, LED Ribbon strängar)...

Raspberry Pi + Arduino Serial med LCD-skärm

IntroDetta är min Raspberry Pi info LCD, jag ville försöka få Arduino och Raspberry Pi prata med varandra via USB följetong och jag gjorde denna lilla projekt.Raspberry Pi använder ett python-skript för att hämta data och skickar det sedan som en str...

Arduino tryckgivare (FSR) med LCD-skärm

Detta instructable (förhoppningsvis) kommer att visa hur man konstruerar en Arduino-baserad trycksensor som visar det uppmätta trycket på en liten LCD-skärm. Jag in element, både hårdvara och mjukvara, från olika källor (jag kommer att ge referenser...