×

关于帮助农民的地球漫游车开源案例

消耗积分:0 | 格式:zip | 大小:0.03 MB | 2022-12-22

李霞

分享资料个

描述

嗨,大家

本项目主要是关于帮助农民的地球漫游车。本项目主要包含三个模数。

模块 1:

完整设置的硬件连接现在考虑直流电机。

这需要两个直流电机和一个电机驱动器。电机驱动器包含

pYYBAGOibxWABz8rAAC4JU3Vcuk816.jpg
电机驱动器
 

在这里,您必须将 v+、en1、en2 连接到面包板中的单点,并将电机的四根电线连接到 1 ma 2 引脚中的四个输入。现在接下来将电机驱动器引脚的输出引脚连接到 arduino 和电池应如下图连接。

pYYBAGOibyWABp2QAAEgDqmA1dw607.jpg
 

现在接下来我们必须将它们连接到螺栓。相同的四个引脚应连接到螺栓的数字引脚(0、1、2、3)。

poYBAGOibyeAfB6fAABgTv9z8As160.png
土壤传感器
 

现在土壤传感器应该连接到螺栓,但将数字引脚连接到螺栓(数字 4 引脚)。现在终于是时候将温度传感器连接到螺栓模拟引脚(A0)了。

pYYBAGOibzKAEdt_AADaCrsJb70328.jpg
温度感应器
 

现在所有的地面和 v+(温度传感器、湿度传感器)、en1、en2 到 arduino 的 5v,最后应该为所有引脚提供所需电压的电池。

poYBAGOibzqAQpEtAABSnxrHTIM304.png
螺栓模块
 

模块 2:

NRF 连接:

poYBAGOibzyAFDisAAANJ8kYsoE469.png
 

上图称为nrf模块,用于无线电通信。上图也应该包含在我们的电路中以控制附近区域的汽车。

pYYBAGOibz-AFHZjAAAdOYmdrPI492.png
 

NRF 与 ARDUINO 的最终连接

pYYBAGOib0OAJtlMAACB_r_T60M357.png
最终连接
 

现在是连接 JOY STICKS 的时候了:

使用两个操纵杆:

1)控制小车方向。

2)控制舵机。

pYYBAGOib0eAarVxAAAk6v0rVPc924.png
 

模块 3:

最终编码

1)阿杜诺编码:

发射机:

#include 
#include 
#include 
#include 
#include 

RF24 radio(7, 8); // CSN, CE
const byte address[6] = "00001";

int x_key = A1;                                              
int y_key = A0;                                              
int p_key = A3;                                              
int q_key = A2;                                              
int x_pos;
int y_pos;
int p_pos;
int q_pos;

void setup() {
  radio.begin();
  radio.openWritingPipe(address)
;
  radio.setPALevel(RF24_PA_MIN);
  radio.setChannel(87);
  radio.setDataRate(RF24_
250KBPS);
  radio.stopListening();
 
  Serial.begin(9600);
  pinMode (x_key, INPUT) ;                    
  pinMode (y_key, INPUT) ;
  pinMode (p_key, INPUT) ;                    
  pinMode (q_key, INPUT) ;        
}
int pos;
void loop() {
  x_pos = analogRead (x_key) ;  
  y_pos = analogRead (y_key) ;  
  p_pos = analogRead (p_key) ;  
  q_pos = analogRead (q_key) ;  
  Serial.println(x_pos);
  Serial.println(y_pos);
  Serial.println(p_pos);
  Serial.println(q_pos);
  if (p_pos>400 && p_pos<600 && q_pos>400 && q_pos<600)
  {
  if(x_pos>400 && x_pos<600 && y_pos>400 && y_pos<600)
  {
    pos=100;
    radio.write(&pos, sizeof(pos));
  }
  if(x_pos>400 && x_pos<600 && y_pos<400)
  {
    pos=200;
    radio.write(&pos, sizeof(pos));
  }
  if(x_pos>400 && x_pos<600 && y_pos>600)
  {
    pos=300;
    radio.write(&pos, sizeof(pos));
  }
  if(y_pos>400 && y_pos<600 && x_pos<400)
  {
    pos=400;
    radio.write(&pos, sizeof(pos));
  }
  if(y_pos>400 && y_pos<600 && x_pos>600)
  {
    pos=500;
    radio.write(&pos, sizeof(pos));
  }
  Serial.println(pos);
  delay(100);
}
else if(p_pos<400 || p_pos>600)
{
  if(p_pos<400)
  {
    pos=600;
    radio.write(&pos, sizeof(pos));
  }
  if(p_pos>600)
  {
    pos=700;
    radio.write(&pos, sizeof(pos));
  }
  delay(100);
}
}

接收者:

#include 
#include 
#include 
#include 
#include 
#include 
Servo servo;

RF24 radio(7, 8); // CSN, CE
const byte address[6] = "00001";
int servo_pin = 9;
int sensor_pin=A0;
int output_value;

void setup() {
  Serial.begin(9600);
  radio.begin();
  servo.attach (servo_pin ) ;
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.setChannel(87);
  radio.setDataRate(RF24_250KBPS);
  radio.startListening();
}
int pos;
void loop() {
  if (radio.available()) {
    radio.read(&pos, sizeof(pos));
    Serial.println(pos);
    if(pos==100)
    {
    digitalWrite(6,LOW);
    digitalWrite(5,LOW);
    digitalWrite(4,LOW);
    digitalWrite(3,LOW);
  //   Serial.println("gk0");
    }
    else if (pos==200){
    digitalWrite(6,HIGH);
    digitalWrite(5,LOW);
    digitalWrite(4,HIGH);
    digitalWrite(3,LOW);
    delay(10);
    // Serial.println("gk1");
    }
     else if (pos==300){
    digitalWrite(6,LOW);
    digitalWrite(5,HIGH );
    digitalWrite(4,LOW);
    digitalWrite(3,HIGH);
     delay(10);
   // Serial.println("gk2");
    }
    else if (pos==400){
    digitalWrite(6,LOW);
    digitalWrite(5,HIGH );
    digitalWrite(4,HIGH);
    digitalWrite(3,LOW);
    delay(10);
   //  Serial.println("gk3");
    }
     else if (pos== 500){
    digitalWrite(6,HIGH);
    digitalWrite(5,LOW );
    digitalWrite(4,LOW);
    digitalWrite(3,HIGH);
     delay(10);
    //  Serial.println("gk5");
    }
    else if (pos== 600){
     servo.write(90);
     delay(10);    
    //  Serial.println("gk6");
    }
     else if (pos== 700){
     servo.write(180);
     delay(10);
    //  Serial.println("gk7");
   
 }
  }
  else
  {
    Serial.println("connection lost");  
  }
}
}

现在接收电报消息:(服务器代码)

登录到ripl.it之类的服务器之一,然后上传代码

主程序

import requests                 # for making HTTP requests
import json                     # library for handling JSON data
import time                     # module for sleep operation
from boltiot import Bolt        # importing Bolt from boltiot module
import conf                     # config file
mybolt = Bolt(conf.bolt_api_key, conf.device_id)
def get_sensor_value_from_pin(pin):
try:
response = mybolt.digitalRead(pin)
data = json.loads(response)
if data["success"] != 1:
print("Request not successfull")
print("This is the response->", data)
return -999
sensor_value = int(data["value"])
return sensor_value
except Exception as e:
print("Something went wrong when returning the sensor value")
print(e)
return -999
def send_telegram_message(message):
"""Sends message via Telegram"""
url = "https://api.telegram.org/" + conf.telegram_bot_id + "/sendMessage"
data = {
"chat_id": conf.telegram_chat_id,
"text": message
}
try:
response = requests.request(
"GET",
url,
params=data
)
print("This is the Telegram response")
print(response.text)
telegram_data = json.loads(response.text)
return telegram_data["ok"]
except Exception as e:
print("An error occurred in sending the alert message via Telegram")
print(e)
return False
while True:
# Step 1
sensor_value = get_sensor_value_from_pin("4")
print("The current sensor value is:", sensor_value)
# Step 2
if sensor_value == -999:
print("Request was unsuccessfull. Skipping.")
time.sleep(10)
continue
# Step 3
if sensor_value >= conf.threshold:
print("The current temperature value is")
message = "The moisture value is just greater than threshold "
telegram_status = send_telegram_message(message)
print("This is the Telegram status:", telegram_status)
# Step 4
time.sleep(100)

配置文件:

"""Configurations for telegram_alert.py"""
bolt_api_key = "XXXX"               # This is your Bolt Cloud API Key
device_id = "XXXX"                  # This is the device ID and will be similar to BOLTXXXX where XXXX is some numbers
telegram_chat_id = "@XXXX"          # This is the channel ID of the created Telegram channel. Paste after @
telegram_bot_id = "botXXXX"         # This is the bot ID of the created Telegram Bot. Paste after bot
threshold = 0                     # Threshold beyond which the alert should be sent

输入你的 bot 和 api 值

过程:

使用 Telegram 发送警报消息

什么是电报?

Telegram 是一款类似于 Whatsapp 的消息应用程序。您还可以发送和接收消息以及文​​件。免费使用。您可以通过您的 Android/iOS/Windows 手机以及您的 PC 或 Mac 访问该平台。

 
 

一些电报术语 -

什么是电报频道?

频道之于 Telegram 就像群组之于 Whatsapp。频道是一种向大量观众传播信息的工具。他们可以拥有无​​限数量的订阅者,他们可以通过永久 URL 公开,并且频道中的每个帖子都有自己的查看计数器。

什么是机器人?

机器人是在 Telegram 中运行的第三方应用程序。用户可以通过向机器人发送消息、命令和请求来与机器人交互。

我们将使用机器人在我们的频道上发送警报。

我们将在这个项目中学到什么?

在这个项目中,当传感器值超过您设置的阈值时,您将能够通过 Telegram 向您的手机发送警报。

这个项目我需要什么?

要通过电报发送警报和消息,您需要,

  • 具有 Internet 连接的 Android/iOS/Windows 手机。
  • 电报帐户。为此,您需要一个手机号码。
  • 通过 PuTTY 或虚拟机访问您的 Ubuntu 操作系统。

设置电报

注册/登录 Telegram 的步骤

  • 前往手机上的 Playstore 或 App Store 并搜索 Telegram。
  • 下载并安装最新版本的 Telegram 应用程序。
  • 注册一个新帐户或通过提供您的手机号码登录 Telegram。
  • Telegram 会打电话给您或向您发送短信以验证您的手机号码。
  • 验证您的帐户并在需要时批准任何权限。
  • 您将登录到 Telegram,并会看到类似于下图的屏幕。(如果和下面的截图有出入也没关系)
poYBAGNYtp2AMARVAAE9P_Uh6o0820.png
 

您已成功安装 Telegram 并设置您的帐户。在接下来的课程中,我们将学习更多关于频道和机器人的知识。

创建频道

什么是电报频道?

频道之于 Telegram 就像群组之于 Whatsapp。频道是一种向大量观众传播信息的工具。他们可以拥有无​​限数量的订阅者,他们可以通过永久 URL 公开,并且频道中的每个帖子都有自己的查看计数器。

创建频道的步骤

  • 转到 Telegram 应用程序的主屏幕。
  • 从左侧滑动以显示菜单。
  • 点击“新频道”。
pYYBAGNYtqGAEEzLAAFEwa5k-TQ041.png
 
  • 它会要求您提供频道的名称和说明。给一个合适的名字和描述。添加照片是可选的。
pYYBAGOifbqAOqXYAAI3VmZOrxs685.jpg
 
  • 在下一个屏幕中,将频道设置为公共。
  • 在同一屏幕上,它会要求您输入频道的永久链接。您可以使用小写字母和数字 0-9 来创建频道链接。
  • 请注意,频道链接名称是全局的,只有当链接名称可用时,您才能创建频道链接。频道链接名称类似于电子邮件地址,即一次只能存在一个唯一的电子邮件 ID。
  • 您可以将频道链接名称保留为 temperature_alert_,后跟您的电子邮件 ID。例如,如果我的电子邮件 ID 是 developer@boltiot.com,我可以将频道链接名称保留为temperature_alert_developer_boltiot_com (我删除了 @ 和. 符号,因为它是不允许的,并将其替换为下划线 _)这只是一个建议。频道链接名称可以保留,只要有效即可。
  • 记下此频道永久链接名称。稍后将需要将消息发送到此频道。例如下面截图中的频道链接名称是“ temperature_alert”。
pYYBAGOifdGARSBlAAKMhsbKehQ376.jpg
 
  • 恭喜!您已经创建了一个新频道。您还可以从您的应用程序主屏幕查看此频道。
pYYBAGOifdmAWvEGAAJGeDSOCG0315.jpg
 
  • 您可以单击顶部的频道名称以查看有关它的更多详细信息。
poYBAGOifd6AODKMAAFYkV40E7Q745.jpg
 
  • 接下来,我们需要创建一个机器人并将其添加到频道,以便它可以在此频道中为我们发布警报。

创建一个机器人

什么是机器人?

机器人是在 Telegram 中运行的第三方应用程序。用户可以通过向机器人发送消息、命令和请求来与机器人交互。

我们将使用机器人在我们的频道上发送警报。

创建一个新的机器人

Telegram 允许我们在名为“BotFather”的机器人的帮助下创建一个新的机器人。它是创建和管理其他机器人的单个机器人。

  • 在应用程序的主屏幕上,单击右上角的搜索图标并输入“botfather”。
poYBAGNYtqWAP4AfAAFzngz-3v4174.png
 
  • 在搜索结果中,单击“BotFather”的正确结果,如下所示。正确的“BotFather”名称旁边会有一个蓝色勾号。这将带您进入与“BotFather”的聊天窗口。
pYYBAGNYtqmATm9RAAIQZagjXE8796.png
 
  • 聊天将已经有一些项目,并将向您显示一个命令列表以开始使用。
pYYBAGNYtq6AdptKAASp06nlfeU822.jpg
 
  • 由于我们需要创建一个新的机器人,因此请继续并在窗口中输入“/newbot”。
  • 它会要求您输入更多详细信息,例如 Bot 名称和 Bot 用户名。
  • 成功创建机器人后,您将看到一个类似于下图的屏幕,其中包含机器人令牌。此令牌用于控制您的机器人并代表它发送消息。请妥善保管此令牌,因为它将允许任何人访问您的机器人。
poYBAGNYtrKAezJsAARA5B6LaDo298.png
 
  • 在上面的截图中,Bot 令牌是“894346529:AAhuJ2XJQy5dlEtLYF0sc0Z_qu0fSqihSSc”。请将其保存为 telegram_bot_id。telegram_bot_id 保存为“bot”,后跟 bot 令牌。因此,在此示例中,telegram_bot_id 将为“bot894346529:AAhuJ2XJQy5dlEtLYF0sc0Z_qu0fSqihSSc”。
  • telegram_bot_id 将在 python 代码中用于发送消息。python代码将在后面的课程中教授。
  • 另外,保存 Bot ID 时请小心。您可能会混淆 0 和 O、I 和 1 等,因为它们看起来很相似。
  • 恭喜,您已经创建了一个新的机器人。现在,我们需要将它添加到我们之前创建的频道中,以便我们可以发送警报。

将机器人添加到频道

  • 从 App 主屏幕,打开我们之前创建的频道。
  • 在屏幕中,单击顶部的频道名称以打开该频道的信息。
pYYBAGOiflSAAAUwAALSO2SDuVk654.png
 
  • 单击“管理员”按钮,以便我们可以将新创建​​的机器人添加到频道中。
pYYBAGOifl6ASNNFAAIxmOFfcoo801.png
 
  • 使用机器人的用户名搜索我们创建的机器人。找到正确的 Bot 后,单击它以将其添加到频道。请确保您在上一步中单击了管理员按钮,因为这将允许我们的机器人发布到频道。
poYBAGOifmaAfI2fAAMTEF7_H8c854.png
 
  • 系统将要求您确认机器人的权限。按右上角的刻度线继续将机器人添加到频道。确保机器人有权“发布消息”。
pYYBAGOifm-ATB8xAAGFaCa2M6w881.jpg
 
  • 您现在将在频道的管理员列表中看到新创建的机器人。
pYYBAGOifnKAMonFAAESOFo_pxk341.png
 
  • 现在我们将编写代码以通过 Bot 将消息发送到频道。

现在为 TWILLO 和 MAIL GUN 设置网络

使用 Google Assistant 在您的手机上随时通过短信和电子邮件接收 LM35 温度传感器值。

poYBAGOifneAc-XjAADAuvsYzM4634.jpg
 

当您需要随时检查 Iot 项目的传感器值时,您会怎么做?你只需登录到你的云来检查它。看起来很简单,对吧?但是,如果您必须每小时检查一次值或每隔几分钟检查一次值,并且一天要检查多次,该怎么办?那会有点(非常)麻烦,对吧?现在,想象一个世界,您只需对 Google 智能助理说“将传感器值发送给我”,即可通过短信和电子邮件获取传感器值。等等,等等,等等。那种情况不是想象出来的,因为你们自己几步就能做到。请仔细阅读,找出答案。

在此项目中,我们将通过发送给 Google 智能助理的命令通过短信和电子邮件从 LM35 传感器接收温度传感器值。

第 1 步:硬件设置

将 LM35 传感器握在手中,以便您可以看到名称。三个引脚从左到右分别是VCC、输出和GND。将三个引脚连接到母线到公线。将对应于从左到右的三个引脚的三根线连接到 Bolt WiFi 模块上的 5 V、A0 和 GND 引脚。将 WiFi 模块连接到 5 V 电源。确保它已连接到有效的互联网连接。

第 2 步:在 Integromat 中创建 IFTTT 模块

登录您的 Integromat 帐户。如果您尚未在 Integromat 上注册,则可以单击此处创建一个帐户。登录后,点击屏幕右上角的“创建新场景”。在屏幕中选择 IFTTT、HTTP、Mailgun 和 Twilio 以选择所需的工具,然后单击“继续”。然后单击白色圆圈并从列表中选择 IFTTT,然后从菜单中选择“接收数据”。该模块对于将其连接到 IFTTT 上的 Applet 至关重要,稍后将进行讨论。单击“添加”添加一个新的 Webhook,然后为其指定一个合适的名称,然后单击“保存”。现在,您将获得一个 URL 或链接。保存它以供进一步使用。

pYYBAGOifnuAUQSTAABP2hiw2wo370.jpg
 

第 3 步:在 Integromat 中创建 HTTP 模块

接下来,单击附加到模块的“+”符号以添加新模块。选择“HTTP”,然后选择“发出请求”。这是从 Bolt Iot Cloud 接收传感器值所必需的。在 URL 中,粘贴链接https://cloud.boltiot.com/remote/your-bolt-iot-api-key/analogRead?pin=A0&deviceName=BOLTXXXXXXX。将“your-bolt-iot-api-key”和“BOLTXXXXXXX”替换为您可以在 Bolt Iot Cloud 中轻松找到的相应凭据。让方法为“GET”并单击“OK”。

上面的链接用于从 Bolt Iot Cloud 获取传感器值。上述链接的输出将采用 {"value": "XXX", "success": "1"} 的形式,其中 XXX 是传感器值。

pYYBAGOjtJqAWkQBAABqLyRCgq0151.jpg
 

第 4 步:在 Integromat 中创建 Mailgun 模块

现在,再次单击“+”并在搜索框中键入“Flow Control”并选择它,然后选择“Router”。必须制作两个白色圆圈。单击第一个白色圆圈并选择“Mailgun”,然后选择“发送电子邮件”。在这里,Mailgun 用于接收带有温度的电子邮件。如果您已经在 Mailgun 中拥有一个帐户,那么您必须拥有可以在您的 Mailgun 帐户中轻松找到的 API 密钥和域名。如果您在 Mailgun 中没有帐户,则可以按照下面给出的替代步骤操作。根据要求填写所需的详细信息。输入收件人的邮件(这是您的电子邮件地址)。在“发件人”字段中,键入“test@yourdomainname”。在“内容”部分,我们需要写入温度值而不是传感器值。要将温度值转换为传感器值,我们需要将该数字除以 10.24。要获得 XXX 形式的传感器值,我们需要消除我们使用函数“substring”的所有其他字符。单击旁边对话框中的“A”符号,然后选择“子字符串”。

pYYBAGOjtJ6AOpbkAAB1Um0gtIQ044.jpg
 

在括号内的第一个空格中,单击星号下的“数据”选项,然后在第二个空格和第三个空格中单击“11”和“14”。严格来说,这不是获取传感器值的正确方法,因此我使用 hack 来获取。如果有人知道正确的方法,他们可以在下面的评论部分提及该方法。

pYYBAGOjtJ6AOpbkAAB1Um0gtIQ044.jpg
 
poYBAGOjtKOAfwMYAABqVB_6ghM256.jpg
 

后者是为了仅从输出中捕获“XXX”。然后将该数字除以 10.24

poYBAGOjtKeAYQVIAABxmHj5tBY458.jpg
 

在保存场景之前,不要忘记打开屏幕底部的“计划”并将“运行场景”选择为“立即”。您的最终方案应如下所示。

pYYBAGOjtKmAN10vAABhx0BQrAk627.jpg
 

第 6 步:在 IFTTT 中制作新的 Applet

登录到您的 IFTTT 帐户。如果您还没有在 IFTTT 上注册,那么您可以单击此处创建一个帐户。登录后,单击“我的小程序”部分下的“新建小程序”。在搜索框中搜索后,依次点击“+this”和“Google Assistant”。在以下屏幕中单击“说一个简单的短语”。键入要为其触发所需操作的命令。

pYYBAGOjtKuAK34mAAAzwfVA1hs899.jpg
 

单击“触发器”,然后单击“+那个”。在搜索框中搜索“Webhooks”并选择它,然后在以下屏幕中选择“Make a web request”。在 URL 字段中,粘贴我们在 Integromat 中创建 IFTTT 模块后在第 2 步中获得的链接。当您对 Google Assistant 说出命令时,此步骤对于在 Integromat 中运行场景非常重要。然后,在方法中选择“POST”并单击“创建操作”。为小程序写一个合适的名称,然后选择“完成”。

poYBAGOjtK6AWMmDAAAyx2AH97o228.jpg
 

而已。现在看看当您拿出手机并说“Ok Google,发送温度传感器值”时的神奇之处。

原理图

将母对公电线连接到 LM35 传感器

pYYBAGOjtLGAce1DAABIqg9Uepk652.jpg
 

将母对公电线连接到 Bolt WiFi 模块

poYBAGOjtLOAMLcSAAAyllARpaA038.jpg
 

最终连接

pYYBAGOjtLWAGDiYAAAlCrLijGM425.jpg
 

就是这样,现在上传所有内容然后检查。

如有任何疑问,请通过评论部分与我联系。

谢谢你....................................

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !